1、spring boot整合mybatis-plus (这里使用的是 3.4.3.1 )
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
<version>3.4.3.1</version>
<scope>compile</scope>
</dependency>
2、配置分页插件
package com.elq.product.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Created by xqh on 2021/4/2 10:24
*
* @Description
*/
@Configuration
public class MybatisPlusConfiguration {
/* 旧版本配置 3.2 版本使用,解决分页失效问题
@Bean
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}*/
/**
* 版本 3.4 使用,解决分页失效问题,DbType.MYSQL 为你的数据库类型
* 新的分页插件,一缓和二缓遵循mybatis的规则,
* 需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
// @Bean
// public ConfigurationCustomizer configurationCustomizer() {
// return configuration -> configuration.setUseDeprecatedExecutor(false);
// }
}
3、yml配置文件
mybatis-plus:
mapper-locations: classpath:/mapper/**/*.xml
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #开启sql日志
4、实体类
package com.elq.product.entity;
import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
@Data
@TableName("elq_logs")
public class LogsEntity implements Serializable {
//自动生成雪花ID
private Long snowId;
//入参时间格式化,如果入参不是pattern="yyyy-MM-dd HH:mm:ss" 定义的类型会报错
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
//出参数格式化,pattern = "yyyy-MM-dd HH:mm:ss"
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")//jackson注解
//@JSONField(format = "yyyy-MM-dd HH:mm:ss") //适用于Alibaba fastjson,可以直接在JSON.tostring时进行转义
private Date createTime;
private String data;
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
}
5、dao 层
package com.elq.product.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.elq.product.entity.LogsEntity;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface LogsDao extends BaseMapper<LogsEntity> {
}
6、分页查询在实现类中的使用
package com.elq.product.service.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.elq.product.dao.LogsDao;
import com.elq.product.entity.LogsEntity;
import com.elq.product.service.IndexService;
import com.elq.product.utils.SnowFlakeUtil;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import static java.lang.Long.toBinaryString;
@Service("IndexService")
public class IndexServiceImpl extends ServiceImpl<LogsDao, LogsEntity> implements IndexService {
public final static ObjectMapper mapper = new ObjectMapper();
@Autowired(required = false)
LogsDao logsDao;
@Override
// @Cacheable(value="getIndexList",key="#root.method.name",sync=true)
//分页插件 : https://www.jianshu.com/p/18f5c5881653
public List<LogsEntity> getIndexList() {
//数据库分页获取数据
Page<LogsEntity> objectPage = new Page<>(3, 20);//获取第3页,取20条
QueryWrapper<LogsEntity> objectQueryWrapper = new QueryWrapper<>();
QueryWrapper<LogsEntity> snow_id = objectQueryWrapper.orderByDesc("snow_id");
Page<LogsEntity> pageList = this.logsDao.selectPage(objectPage, snow_id);
List<LogsEntity> logsEntities = pageList.getRecords();
// String s1 = JSON.toJSONString(logsEntities);
//list对象转字符串***************************
String s ="";
try {
s = mapper.writeValueAsString(logsEntities);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
//json转list对象**********************
JavaType javaType = getCollectionType(ArrayList.class, LogsEntity.class);
List<LogsEntity> configList=new ArrayList<>();
try {
configList = mapper.readValue(s, javaType);//这里不需要强制转换
} catch (IOException e) {
e.printStackTrace();
}
return logsEntities;
}
@Override
public String inserts(LogsEntity logsEntity) {
// JAVA 实现雪花ID的生成
// Long uid = SnowFlakeUtil.getUid();
// logsEntity.setSnowId(uid);
int insert = this.baseMapper.insert(logsEntity);
// for (int i = 0; i < 1000; i++) {
// logsEntity.setSnowId(Long.valueOf(i));
// this.baseMapper.insert(logsEntity);
// }
// int insert = this.baseMapper.insert(logsEntity);
return insert+"";
}
// 删除缓存
@Override
@CacheEvict(value = "getIndexList",allEntries = true) //删除某个分区下的所有数据
public String deleteCache() {
return "delete Ok";
}
/**
* 获取泛型的Collection Type
* @param collectionClass 泛型的Collection
* @param elementClasses 元素类
* @return JavaType Java类型
* @since 1.0
*/
private static JavaType getCollectionType(Class<?> collectionClass, Class<?>... elementClasses) {
return mapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);
}
}
执行语句为这个: