发表于: 2017-12-24 23:46:52
2 484
编辑日报内容...
今天完成的事情:
整合spring+mybatis分步配置(使用注解配置)
创建工程,添加依赖包
1、让spring来管理数据源信息,原来的mybatis全局文件中就不需要加载数据源了 |
1.1 新建数据库properties配置、mybatis全局配置、spring配置,三个文件 因为完全使用注解,所以不用建mapper文件 |
1.2 在spring配置文件中,配置datasource |
2、 让spring管理SqlSessionFactory |
2.1 在spring配置文件(SqlSessionFactory bean标签)中,指定datasource |
2.2 在spring配置文件中,指定mybatis全局配置文件 |
2.3在spring配置文件中,指定需要扫描的mapper |
3、 让spring管理SqlSessionFactory(mapper模式) |
3.1 建pojo类;建接口类(DAO/Mapper) |
3.3 再接口的方法上注解,编写SQL语句 |
4让spring创建和管理mapper bean |
4.1给接口类添加spring的注解,使spring能自动创建和管理mapper bean |
上面绿色的是使用注解和xml配置的不同地方:
1、注解形式,直接在接口方法写sql,不用mapper文件
2、注解形式,没有mapper文件,所以不用指定mapper文件
3、注解形式,配置要被扫描的mapper/interface/DAO
4、注解形式,要在3中这些mapper/interface/DAO上进行注解,使使spring能自动创建和管理mapper bean
注解和xml文件怎么选
复杂、重要的用xml文件
不重要,简单的,用注解,比较快速
测试的问题
以前是用junit测试,要在@After创建容器,获取Bean,今天看了一个更好的方法:
用spring test测试
http://blog.csdn.net/shan9liang/article/details/40452469
注意:
依赖包:
Junit 4 (不同spring版本对junit版本有要求,>4.12)
Spring Test (Spring框架中的test包)
Spring 相关其他依赖包(不再赘述了,就是context等包
深入学习mybatis
增删改:
返回值可以是boollean、int、long
参数处理
单个参数
多个参数
多个参数会被封装成map | key:param1,param2,…………… |
value: |
测试时,执行sql语句传入的参数是map的value
在mapper映射文件中,编写的sql语句中,参数名需要用key的值
也就是 #{param1} #{param2} #{param3} #{param4}
这样可以,但是,不太好看,所以有了下面的命名参数
特殊情况:
传入list、set、数组,也会封装成map
传入类型 | key名称 | 取value |
List | list | #{list[0]} 取List第一个值 |
数组 | array |
|
集合 | collection |
|
命名参数
使用@Param() 注解参数,()中写别名
然后在mapper映射文件中,编写的sql语句中,参数名就可以直接用别名了。
直接传POJO
直接传入一个Map
传入时,指定key的名称,编写的sql语句中,就可以直接用key的名称了。
参数值的获取
#{}和${}区别
#{}:是以预编译的形式,将参数设置到sql语句中;PreparedStatement;防止sql注入
${}:取出的值直接拼装在sql语句中;会有安全问题;
怎么用
大多数情况用#{}
原生sql不支持占位符?时,无法预编译,使用${}
#{}更丰富的用法
参数的一些规则
javaType、jdbcType、mode、
jdbcTypeForNull全局配置
select语句
parameterType 属性
resulType属性
返回List
返回Map
返回一个map:单条记录,key值是字段名,value是这条记录对应的值
返回一个map:key是数据表一条记录的id,value是这条数据记录映射成的对象
使用@MapKey() 注解接口的方法 ()中写想作为key值的字段名,这里写@MapKey("id")
resultMap自定义结果映射规则
把查询出的数据,转化为java bean对象,这个转化规则可以通过resultMap自定义
先写一个resultMap规则 column指定返回数据的哪一列,property指定java bean属性 id标签用于定义主键,普通列用result标签
<resultMap type="转化后的java bean全类名" id="规则的id,标识唯一性"> |
在sql语句中调用上面的规则
<select id="和接口名保持一致" resultMap="上面的转化规则的id"> |
resultMap 关联查询
方法一:
java bean 中要保存对应关系,resultMap规则设置:property用级联属性
方法二:
java bean 中要保存对应关系,resultMap规则使用 association标签
服务器安装maven
查看java路径
echo $JAVA_HOME
安装maven
wget https://mirrors.cnnic.cn/apache/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.tar.gz
sudo mkdir /usr/local/maven
tar -xvzf apache-maven-3.5.2-bin.tar.gz
sudo mv apache-maven-3.5.2 /usr/local/maven
sudo vi /etc/profile
文件末尾添加:
MAVEN_HOME=/usr/local/maven/apache-maven-3.5.2
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin
再执行:
source /etc/profile
试验maven 命令:mvn -v
明天计划的事情:
学习log4j打日志
maven命令行执行常用命令
用Maven命令跑单元测试
学习下连接池
遇到的问题:
报错较多,但是根据信息都解决了,没来及记太多。
说个记得的:如果使用注解写sql语句,mapper文件中的sql语句要删除,要不会造成多个sql语句有相同的id
收获:
使用注解整合spring和mybatis
linux一些命令
mybatis一些进阶的用法,这部分虽然看了,但是没有实现代码,想了想,还是等以后有需求再深入学
用spring test做测试
评论