版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/madonghyu/article/details/81672843
MyBatis-Plus整合
1.添加springboot的MP依赖
<!-- springboot的mybatis-plus所需的依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
2.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
3.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层导入mapprt接口即可。
MyBatis二级缓存使用
注意点:
mybatis-plus 版本必须要低于2.0.9才可以使用二级缓存
mybatis-plus 版本必须要低于2.0.9才可以使用二级缓存
mybatis-plus 版本必须要低于2.0.9才可以使用二级缓存
否则由MP生成接口就算配置了二级缓存也没有用。
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 Object removeObject(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文件配置缓存接口就可以了
<cache type="com.zsy.cache.MybatisRedisCache">
<property name="eviction" value="LRU" />
<property name="flushInterval" value="6000000" />
<property name="size" value="1024" />
<property name="readOnly" value="false" />
</cache>