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