MyBatis01笔记
MyBatis标准配置 MyBatis全局配置文件【了解】 MyBatis的SQL映射文件
1、MyBatis标准配置
1、导入jar包
2、创建MyBatis的全局配置文件:mybatis-config.xml
3、创建mybatis的SQL映射文件和mapper接口
要求:SQL映射文件的namespace值和接口的全类名保持一致
SQL映射文件的SQL语句的id值和接口的方法名保持一致
4、编写测试代码,验证是否成功
总结:xxxDao---------->xxxDaoImpl
xxxMapper-------->sql映射文件
1、namespace值和接口全类名保持一致
2、sql语句所载标签的id值和方法名保持一致
BookMapper mapper = openSession.getMapper(BookMapper.class)
调用接口代理类对象的方法
2、MyBatis全局配置文件
注意:MyBatis全局配置文件中的标签是有顺序的
1、Properties标签 作用:加载properties配置文件信息
2、Setings标签: Settings标签内部可以设置多个setting标签,每个标签对应着mybatis的一个设置项
3、typeAliases标签 类型别名处理器:给一个类起别名
注:mybatis自带了一些类型别名,如基本的数据类型,引用数据类型
4、typeHandlers标签:将java数据类型转换为数据库的数据类型
5、Environments标签:Environments里面有多个environment标签,
每个environment标签可以设置mybatis的运行环境。
6、databaseIdProvider标签:
作用:为数据库厂商起别名
由于MyBatis支持多种数据库,(如:Oracle、MySQL、SqlServler、Db2)
注:配置MyBatis全局配置文件,SQL映射文件
7、Mappers标签:作用:加载Mapper接口或SQL映射文件
3、SQL映射文件
1、增删改查标签
1、对于增删改标签,必须提交事务。提交事务的两种方式:
1.1.手动提交:openSession.commit()
1.2.自动提交:sqlSessionFactory.openSession(true);
2、只有select必须指定返回值类型,所有标签的parameterType都可以省略。
2、往数据表中添加数据的时候获取自增
要求:
1.接口方法的参数必须是一个pojo对象
2.在insert标签设置两个属性:
3.useGenerateKeys=true,keyProperty=“pojo对象属性”
3、MyBatis支持基于注解的SQL语句
@select(value="select * from book where id = #{bid}")
注:建议使用基于xml的SQL语句
4、如何在SQL映射文件中取mapper接口中的参数
1、一个普通参数
#{随便写}
2、多个普通参数
#{param注解的value值}
3、参数是一个pojo对象
#{pojo对象的属性名}
4、是一个map对象
#{map中键值对的key}
5、参数是一个List、Collection、Set?
#{list[下标]}或者#{collection[下标]}
注:需要接口和SQL映射文件
4、返回值
基本数据类型:Integer、int、Long、long、boolean、Boolean、double、
select:resultType必须指定
insert/update/delete:返回的是添加、修改和删除的行数,只需在接口的方法上声明
返回值类型,不需要再标签上指定resultType
pojo对象:
select:resultType必须指定pojo对象的全类名
pojo对象列表:
select:resultType必须指集合中元素的数据类型
Map:封装数据表中的一样数据 封装数据表中的多行数据
5、#{}与${}的区别
#{}:采用占位符?,以预编译的方式设置参数的,类似于javaweb部分的preparestatement对象,
SQL安全的,不存在sql注入问题。
${}:直接将参数设置到sql语句中,类似于javaweb部分的statement对象,存在SQL注入问题。
在有些特殊情况下,我们必须使用${}.例如:表名、like模糊查询、排序字段。
6、ResultMap标签
但数据表的列名和pojo对象的属性名不一致的时候,如何将表的列名映射到对象属性上?
1、起别名
2、mapUnderScoreToCamelCase=true
3、ResultMap标签
ResultMap作用说明:1、字段映射 2、将表的关联关系直接映射为pojo对象的关联关系
【resultType属性不具备的功能】