# 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.局部与全局同时开启时,以局部为准