SSM框架---MyBatis
2021-03-23 11:07:39 36 举报
AI智能生成
SSM框架是Spring、SpringMVC和MyBatis的集合,是目前业界主流的Java EE开发框架之一。其中,MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的过程。MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。MyBatis具有灵活的特性,通过动态SQL可以使原始类型、枚举类型、包装类型及集合类型更安全方便地进行SQL操作。
作者其他创作
大纲/内容
背景知识
mybatis是什么
MyBatis 是一款优秀的持久层框架<br>
它支持自定义 SQL、存储过程以及高级映射。
为什么要使用mybatis
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
一个mybatis程序<br>
1、搭载环境<br>
1、新建Maven项目
2、删除src目录
3、导入Maven依赖
mysql依赖
mybatis依赖
junit依赖
2、创建一个子模块
1、在resources目录下创建mybatis-config.xml文件
2、配置mybatis-config.xml
⭐每一个Mapeer.xml都需要在Mybatis.xml核心配置文件中注册!<br>
3、编写工具类
3、编写测试代码
1、编写接口
2、编写接口实现类
4、使用junit测试代码
1、@Test注解<br>
2、使用MybatisUtils获得sqlSession<br>
3、使用sqlSession.getMapper获得mapper
4、使用mapper调用方法
5、关闭mapper
配置解析
Mybatis默认是事务管理器是JDBC,还有一个已经不再使用了
属性配置
properties外部配置文件
<!--引入外部配置文件--><br><properties resource="db.properties"><br> <property name="user" value="root"/><br> <property name="pwd" value="root"/><br></properties>
如果propertie和外部文件重名,优先使用外部配置文件
typeAlies别名设置
扫描实体类
<!--类别名--><br> <typeAliases><br> <typeAlias type="com.learning.pojo.User" alias="user"/><br> </typeAliases><br>
扫描pojo包
默认别名是类名(首字母小写)
<!--类别名--><br> <typeAliases><br> <package name="com.learning.pojo"/><br> </typeAliases>
可以使用注解起别名@Alias
映射器
1、resource绑定
2、class绑定
3、通过包绑定
注意:接口和xml需要同名同包<br>
生命周期
图解
SqlSessionFactoryBulider<br>
一旦创建了SqlSessionFactory后就不再需要了
SqlSessionFactory
类似于线程池
SqlSession
类似于线程池的一个线程<br>
用完后必须关闭
解决属性名和字段名不一致的问题
1、起别名
2、ResultMap结果集映射
⭐只需要映射不一样的字段即可
日志
日志工厂
标准的日志工厂配置
<settings><br> <setting name="logImpl" value="STDOUT_LOGGING"/><br> </settings>
LOG4J
1、先导入LOG4J的依赖
<dependency><br> <groupId>log4j</groupId><br> <artifactId>log4j</artifactId><br> <version>1.2.17</version><br></dependency>
2、创建LOG4J的配置文件
3、mybatis-config.xml注册LOG4J的日志实现
4、在需要使用LOG4J的类中导包
5、获取LOG4J对象,参数是当前类.class
分页
1、limit startIndex,pageSize
2、RowBounds实现分页,官方不推荐<br>
3、Mybatis PageHelaper分页插件<br>
使用注解开发
使用
1、删除mapper.xml
2、更改接口
@Select("select * from user")<br> List<User> getAllUser();<br>
3、在mybatis-config.xml核心配置中注册接口
<mappers><br> <mapper class="com.learning.mapper.UserMapper"/><br> </mappers>
底层核心
反射
Lombok
配置
1、IDEA安装lombok插件<br>
2、导入依赖
使用
@Data //所有的get、set、equals、hashcode<br>@AllArgsConstructor //有参构造<br>@NoArgsConstructor //无参构造
多对一查询
association
<association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/>
一对多查询
collection
<collection property="students" column="tid" <u style=""><b style=""><font color="#f68b1f">javaType="ArrayList"</font></b></u> select="getStudents"/>
动态SQL
if标签
<if test="anything != null"><br> and anything = #{anything}<br></if>
其他常用标签
choose-when-otherwise
trim
sql片段
1、定义sql片段<br>
<<b><font color="#0076b3">sql id="if-title"</font></b>><br> <if test="title != null"><br> and title = #{title}<br> </if><br> </sql>
2、引用sql片段
<<font color="#0076b3"><b>include refid</b></font>="<b><font color="#0076b3">if-title</font></b>"></include>
foreach
<foreach item="item" index="index" collection="list"<br> open="(" separator="," close=")"><br> #{item}<br> </foreach>
等价于(item1=item2=...)
缓存
三种缓存
1、一级缓存
生命周期
sqlSession创建和关闭过程
默认开启
不可关闭
2、二级缓存
生命周期
namespace---基于mapper
默认开启
1、mybatis-config.xml中建议显示声明
<setting name="cacheEnable" value="true"/>
2、在mapper中声明一下
在namespace下一行添加<br>
<cache eviction="FIFO" flushInterval="6000" readOnly="true" size="30"/><br>
3、自定义缓存
ehcache
使用
1、导入maven依赖
2、mybatis-config.xml中配置setting<br>
3、导入ehcache配置文件---ehcache.xml
4、缓存查询顺序
1、先查询二级缓存
因为二级缓存基于Mapper
2、再查询一级缓存
二级缓存没查到,需要进入sqlSession的一级缓存
3、再查询数据库
5、小结
java.io.NotSerializableException: com. kuang.pojo.XXXX
未序列化导致
只有当sqlSession被关闭时一级缓存的内存才会转存到二级缓存
缓存的底层实现就是map
缓存失效的情况
1、查询数据不同
2、存在增删改
3、手动清理缓存
sqlSession.clearCache()
0 条评论
下一页