# Mybatis-Practice **Repository Path**: sunshinekay/mybatis-practice ## Basic Information - **Project Name**: Mybatis-Practice - **Description**: MyBatis基础入门、基于XML及基于注解开发的测试Demo,多表相关的一对一,一对多,多对多查询,MyBatis缓存机制验证,二级缓存使用,MyBatis整合Redis实现分布式缓存管理,自定义插件,整合PageHelper使用分页插件 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-06-28 - **Last Updated**: 2021-07-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## MyBatis 二级缓存开启步骤 1.SqlMapConfig.xml中增加 ` ` 2.需要开启二级缓存的Mapper.xml中增加 / 注解开发可在对应的Mapper接口类中增加@CacheNamespace 3.实体对象(例如:User)中实现序列化接口 ## MyBatis 整合 Redis 步骤 1.引入Mybatis整合Redis依赖 ` org.mybatis.caches mybatis-redis 1.0.0-beta2 ` 2.SqlMapConfig.xml中开启二级缓存 ` ` 3.Mapper.xml中标签使用的type设置为RedisCache(二级缓存实现类) `` 4.resources下添加redis.properties文件,配置redis连接信息 (配置信息生效前提:路径及命令强制要求为redis.properties) `redis.host=xx redis.port=6379 redis.connectionTimeout=5000 redis.password= redis.database=0` MyBatis整合Redis相关源码分析及工作流见 https://blog.csdn.net/sunshineKay/article/details/118309424 ## 自定义一个插件 1.自定义一个类实现org.apache.ibatis.plugin.Interceptor并实现相关方法(intercept、plugin、setProperties) 2.在SqlMapConfig.xml文件中添加插件信息 ` ` MyBatis插件原理见 https://blog.csdn.net/sunshineKay/article/details/118333150?spm=1001.2014.3001.5501 ## MyBatis整合PageHelper实现分页功能 1.引入PageHelper依赖的jar ` com.github.pagehelper pagehelper 3.7.5 com.github.jsqlparser jsqlparser 0.9.1 ` 2.在SqlMapConfig.xml文件中添加插件信息 ` ` 3.使用步骤 查询前设置当前页、页数:PageHelper.startPage(1,1); 拿到返回结果后可通过传入结果集获取PageInfo对象 PageInfo pageInfo = new PageInfo(resultList); ## MyBatis整合通用mapper实现单表基本增删改查 1.引入tk.mybatis依赖 ` tk.mybatis mapper 3.1.2 ` 2.在SqlMapConfig.xml文件中插件添加拦截器MapperInterceptor ` ` 3.实体类及属性增加映射@公式 类名上: `@Table(name = "user") user为当前实体类在数据库中表名,如果表名同实体类一致(不区分大小写)可不配置当前属性` 属性上:唯一主键配置@Id及相应的ID生成策略 `@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name="xxx") //当属性名和数据不一致,可配置此属性 @Transient 数据库表中无对应属性可配置此属性过滤` 4.mapper接口继承Mapper (此处需配置对应的实体 Mapper 否则插件无法找到对象) `public interface UserMapper extends Mapper ## 延迟加载(默认不开启) 动态代理实体类对象,拦截其对应的属性的Get方法 1. 将复杂SQl拆分成多条简单SQL,并编写对应的接口及SQL 2. 局部开启是在 mapper文件的 或者 标签中配置 fetchType="lazy" select="namespace.methodName" column="关联字段" 全局:在核心配置文件中 ` ` 3.局部与全局同时开启时,以局部为准