将Configuration.xml的内容整合到application.properties中统一配置
使用Spring IoC 容器管理SqlSessionFactiory 和SqlSession对象
使用面向接口的编程+Mapper配置文件方式实现DAO层类
支持注解编程
Configuration的配置内容
environments:环境配置
mappers:映射器
typeAliases:类型别名
mybatis.type-aliases-package=org.csu.demo.domain
settings:设置
延迟加载:默认值为false。应用场景为关联查询,当开启时,所有关联对象都会延迟加载(当真正使用时才会查询数据库),目的在于提高程序执行效率
mybatis.configuration.lazy-loading-enabled = true
typeHandler:类型处理器
用于解决数据库中的数据类型和Java语言中的数据类型不匹配问题
Mybatis从结果集中取出一个值时,都会用类型处理器将获取到的值以合适的方式转换为Java类型
mybatis.type-handlers-package = org.csu.demo.persistence.util
CRUD元素常用属性
参数类型指定
#{property,javaType=int,jdbcType=NUMERIC}
结果映射ResultMap
可实现“对简单的查询零配置(80%),对复杂的查询只需描述语句关系(20%)”的设计目标
结果映射常用的两个属性是resultType和resultMap
<select id="addAccount" parameterType="String">
INSERT INTO SIGNON (USERNAME,PASSWORD)
VALUES(#{username}, #{password})
select>
由于实际项目的业务逻辑的复杂性,豁达配置需要动态的拼接SQL,如模糊搜索、条件查询等
Mybatis中有if,choose(when,otherwise),trim(where,set),foreach四个用于动态SQL的标签元素
if
<select id="findActiveBlogWithTitleLike" resultType="Blog">
SELECT* FROM BLOG WHERE state = 'ACTIVE'
<if test="title!=null">
AND title like #{title}
if>
select>
choose(when,otherwise)——复杂条件判断
<select id="findActiveBlogWithTitleLike" resultType="Blog">
SELECT* FROM BLOG WHERE state = 'ACTIVE'
<choose>
<when test="title!=null">
AND title like #{title}
when>
<when test="author!=null and author.name!=null">
...
when>
<otherwise>
...
otherwise>
choose>
select>
trim(where,set)——防止特殊情况SQL错误
<select id="findActiveBlogWithTitleLike" resultType="Blog">
SELECT* FROM BLOG WHERE
<if test="title!=null">
AND title like #{title}
if>
<if test="state!=null">
...
if>
select>
<select id="findActiveBlogWithTitleLike" resultType="Blog">
SELECT* FROM BLOG
<where>
<if test="title!=null">
AND title like #{title}
if>
<if test="state!=null">
...
if>
where>
select>
foreach——复杂查询
<select id="selectPostIn" resultType="domain.blog.Post">
SELECT * FROM POST P WHERE ID in
<foreach item="item" index="index" collection="list" open="(" seperator=" " close=")">
#{item}
foreach>
select>
MyBatis 三剑客
Mybatis-generator:自动代码生成工具。自动生成Javabean和Mapper映射器文件
<sqlMapGenerator targetPackage="mappers" targetProject="./src/main/resources">
<property name="enableSubPackages" value="false"/>
sqlMapGenerator>
Mybatis plugin:Mapper接口到xml映射器的自动导航
Mybatis PageHelper:查询数据量大的数据库表时,可以减少数据库查询压力,降低客户端的数据加载量
Mybatis plus:包含三剑客的功能,无侵入、损耗小,直接面向对象操作。
public void addAccount(String username,String password){
accountMapper.addAccount(username,password);
}
public List<Item> getItemListByProduct(String productId){
return itemMapper.getItemListByProduct(productId);
}