MyBatis-Plus整合

* 添加springboot的MP依赖 <!-- springboot的mybatis-plus所需的依赖 --> <!--
<mybatis-plus.version>3.0.5</mybatis-plus.version> --> <dependency> <groupId>
com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <
version>${mybatis-plus.version}</version> </dependency>
* SpringBoot配置文件中MP配置,经过测试,只需配置mybatis-plus即可,如果原来项目存在mybatis,也只需要配置
mybatis-plus。 mybatis-plus: configuration: cache-enabled: true
map-underscore-to-camel-case: true mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.zsy.domain
* MP使用
首先在数据库建完表后,新建对应的JavaBean类
样例 //这些注解的具体参数这里就不一一列举,用到的话可以直接去源码查看,有中文注释 //表名 @TableName("carousel") public
class Carousel implements Serializable { //主键,自动增长 @TableId(value = "id", type =
IdType.AUTO) private Integer id; @TableField("content") private String content;
@TableField("url") private String url; public Carousel() {} public Carousel(
String content,String url) { this.content = content; this.url = url; } }
接下来新建一个mapper类以及对应的mapper.xml

CarouselMapper.class
@Repository //继承BaseMapper接口即可,里面包含了数据库操作的常用操作,具体也可以看源码 public interface
CarouselMapper extends BaseMapper<Carousel> {}
CarouselMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC
"-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="
com.zsy.mapper.CarouselMapper"> </mapper>
最后只要在service层使用mapper接口即可。

MyBatis二级缓存使用

* 注意点:
* mybatis-plus 版本必须要低于2.0.9才可以使用二级缓存,否则由MP生成接口就算配置了二级缓存也没有用。
* 但是最新的3.x版本,实现二级缓存的配置也有了一些改变。
*
建议在service使用缓存,不过如果要缓存的数据不需要service层处理的话,也可以直接在mapper层缓存,这里MP的二级缓存就是直接在Mapper层进行缓存的,个人觉得主要的优点就是方便省事吧。。。
* 下面介绍3.x的配置方法
* Mybatis的二级缓存实现也十分简单,只要在springboot的配置文件打开二级缓存,即 mybatis-plus: configuration:
cache-enabled: true
* 缓存接口实现样例 public class MybatisRedisCache implements Cache { // 读写锁 private
final ReadWriteLock readWriteLock = new ReentrantReadWriteLock(true);
//这里使用了redis缓存,使用springboot自动注入 @Autowired private RedisTemplate<String, Object>
redisTemplate; private String id; public MybatisRedisCache(final String id) {
if (id == null) { throw new IllegalArgumentException("Cache instances require
an ID"); } this.id = id; } @Override public String getId() { return this.id; }
@Override public void putObject(Object key, Object value) { if (redisTemplate ==
null) { //由于启动期间注入失败,只能运行期间注入,这段代码可以删除 redisTemplate = (RedisTemplate<String,
Object>) ApplicationContextRegister.getApplicationContext().getBean(
"RedisTemplate"); } if (value != null) { redisTemplate.opsForValue().set(key.
toString(), value); } } @Override public Object getObject(Object key) { try { if
(key != null) { return redisTemplate.opsForValue().get(key.toString()); } }
catch (Exception e) { log.error("缓存出错 "); } return null; } @Override public
ObjectremoveObject(Object key) { if (key != null) { redisTemplate.delete(key.
toString()); } return null; } @Override public void clear() { log.debug("清空缓存");
if (redisTemplate == null) { redisTemplate = (RedisTemplate<String, Object>)
ApplicationContextRegister.getApplicationContext().getBean(
"functionDomainRedisTemplate"); } Set<String> keys = redisTemplate.keys("*:" +
this.id + "*"); if (!CollectionUtils.isEmpty(keys)) { redisTemplate.delete(keys)
; } } @Override public int getSize() { Long size = redisTemplate.execute((
RedisCallback<Long>) RedisServerCommands::dbSize); return size.intValue(); }
@Override public ReadWriteLock getReadWriteLock() { return this.readWriteLock; }
}
* mapper.xml文件声明缓存,这里3.x只需要这样配置 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="
com.zsy.mapper.CarouselMapper"> <cache-ref namespace="
com.zsy.mapper.CarouselMapper"/> </mapper>
* Mapper接口使用注解 @Repository @CacheNamespace(implementation=MybatisRedisCache.
class,eviction=MybatisRedisCache.class) public interface CarouselMapper extends
BaseMapper<Carousel> {}

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信