mybatis环境搭建步骤
- 创建maven工程
- 导入mybatis坐标,Mysql坐标
- 编写实体类
- 编写持久层Dao接口
- 配置持久层接口的xml配置文件
- 配置SqlMapConfig.xml文件
- 运行测试
注解方式使用mybatis
- 在持久层接口的方法上使用@select注解
- 在SqlMapConfig.xml中配置mapper标签的class或者name属性
- 删除持久层的配置文件
持久层配置文件中常用标签
- select标签 查找
- insert标签 保存
- update标签 更新
- delete标签 删除
- parameterType属性:传入参数类型
- resultType属性:返回值类型
- resultMap标签:建立查询结果和实体类间的对应关系,实现结果集的封装
mybatis中的连接池
mybatis中有3种连接池
- UNPOOLED
- POOLED
- JNDI
通过中type属性指定,一般使用的时POOLED
事务管理
默认需要手动提交,可在获取session时时传入参数“true”指定为自动提交
factory.openSession(true);
动态sql标签
- <if test=>标签
- where标签
- <foreach collection= open= close= item= separator=>标签
- sql标签:抽取重复的sql代码片段
多表查询
- 关键在于配置resultMap,建立结果集与封装类的对应关系
resultMap中使用到的标签
<resultMap id="" type="">
<id property="" column=""></id>
<result property="" column=""></result>
<collection property="" ofType="">
<id column="" property=""></id>
<result column="" property=""></result>
</collection>
<association property="" javaType="">
<id column="" property=""/>
<result column="" property=""/>
</association>
</resultMap>
- collection :用于指定实体类集合
- association:用于指定实体类
延迟加载
在做多表查询时,要在需要用到数据时再查询关联表,否则只做单表查询。
- assocation实现延迟加载:
select属性: 填写我们要调用的 select 映射的 id
column属性: 填写我们要传递给 select 映射的参数
- collection实现延迟加载:
select属性: 填写我们要调用的 select 映射的 id
column属性: 填写我们要传递给 select 映射的参数
开启延迟加载方法
在SqlMapConfig中加入
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
缓存
- 一级缓存:存在于SqlSession,只要SqlSession没有flush、commit或close就一直存在。
- 二级缓存:是mapper映射级别的缓存,提交后会被清空。
注解开发
@Insert:实现新增
@Update:实现更新
@Delete:实现删除
@Select:实现查询
@Result:实现结果集封装
@Results:可以与@Result一起使用,封装多个结果集
@ResultMap:实现引用
@Results定义的封装
@One:实现一对一结果集封装
@Many:实现一对多结果集封装
@SelectProvider: 实现动态SQL映射
@CacheNamespace:实现注解二级缓存的使用
补充:
- 在增删改操作后要提交事务,否则不会自动提交。