mybatis框架学习

耗尽温柔 提交于 2020-01-27 08:15:44

1.mybatis入门知识
mybatis是一个持久层框架,所以在使用的时候一定要导入mybatis和mysql依赖。
在这里插入图片描述
在这里插入图片描述
在使用映射文件开发的时候要在配置文件中告知 mybatis 映射配置的位置,在使用注解开发的时候除了告知 mybatis 映射配置的位置,还要把IUserDao.xml文件删掉,否则会出现包扫描错误。
在这里插入图片描述
注解直接添加在持久层就可以
在这里插入图片描述
mybatis映射文件中的parameterType和resultType分别为持久层中的参数类型和返回值
在这里插入图片描述
2.resultMap 结果类型
返回值类型可以用resultMap进行封装,resultMap 可以实现将查询结果映射为复杂类型的 pojo,比如在查询结果映射对象中包括 pojo 和 list 实现一对一查询和一对多查询。
在这里插入图片描述
在使用resultMap进行封装时,映射文件也要用resultMap封装时设置的id
在这里插入图片描述
3.mybatis连接池
连接池就是用于存储连接的一个容器。
容器其实就是一个集合对象,该集合必须是线程安全的,不能两个线程拿到统一连接。(该集合还必须能实现队列的特性:先进先出)
在 Mybatis 的 SqlMapConfig.xml 配置文件中,通过来实现 Mybatis 中连接池的配置。
在这里插入图片描述
4.mybatis的动态sql
动态sql的if标签,if就是对其进行判断,需要注意的是空字符串要用“ ”用单引号包双引号,而不能使用‘ ’,不然会报错
在这里插入图片描述
动态sql的where标签,上面的映射文件可以把where后面的1=1去掉,直接用标签
在这里插入图片描述
动态sql的foreach标签,就是查到的结果是一个集合,对其进行循环。
在这里插入图片描述
注意,在使用mybatis封装一对多的时候要注意列名不可重复,不然只会封装第一条,可以起一个不一样的名字区分,column后面的名字要和sql语句中定义的名字一样。
在这里插入图片描述
Mybatis 缓存
1、一级缓存是 SqlSession 级别的缓存,只要 SqlSession 没有 flush 或 close,它就存在,当调用 SqlSession 的修改,添加,删除,commit(),close()等方法时,就会清空一级缓存。
2、二级缓存是 mapper 映射级别的缓存,多个 SqlSession 去操作同一个 Mapper 映射的 sql 语句,多个SqlSession 可以共用二级缓存,二级缓存是跨 SqlSession 的。
【二级缓存的开启与关闭】
<1>在 SqlMapConfig.xml 文件开启二级缓存

<settings>
<!-- 开启二级缓存的支持 -->
 <setting name="cacheEnabled" value="true"/>
</settings>
因为 cacheEnabled 的取值默认就为 true,所以这一步可以省略不配置。为 true 代表开启二级缓存;为false 代表不开启二级缓存

<2>配置相关的 Mapper 映射文件

<mapper namespace="com.itheima.dao.IUserDao">
<!-- 开启二级缓存的支持 -->
<cache></cache>
</mapper>

<3>配置 statement 上面的 useCache 属性

<select id="findById" resultType="user" parameterType="int" useCache="true">
select * from user where id = #{uid}
</select> 将 UserDao.xml 映射文件中的<select>标签中设置 useCache=true”代表当前这个 statement 要使用二级缓存,如果不使用二级缓存可以设置为 false。
注意:针对每次查询都需要最新的数据 sql,要设置成 useCache=false,禁用二级缓存。

Mybatis 注解开发常用的注解
@Insert:实现新增
@Update:实现更新
@Delete:实现删除
@Select:实现查询
@Result:实现结果集封装
@Results:可以与@Result 一起使用,封装多个结果集
@ResultMap:实现引用@Results 定义的封装
@One:实现一对一结果集封装
@Many:实现一对多结果集封装
@SelectProvider: 实现动态 SQL 映射
@CacheNamespace:实现注解二级缓存的使用

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!