Spring boot 集成mybatis-plus
背景
Spring boot集成mybatis后,我们可以使用mybatis来操作数据。然后,我们还是需要写许多重复的代码和sql语句,比如增删改查。这时候,我们就可以使用 mybatis-plus了,它可以极大解放我们的生产力。
一、mybatis-plus介绍
mybatis-plus是对mybatis的功能增强,并且只做增强,不做改动,也就是说,你完全可以把mybatis-plus当作mybatis来做。
二,maven依赖
本次案例使用了8.0.11的mysql,采用了druid连接池,同时使用lombok,最后集成mybati-plus的依赖。
xml
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
<!--druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.4</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.6</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
三、yml配置
yml中 配置了数据源和mybatis-plus的参数
yml
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/aaa?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
username: root
password: 123456
web:
resources:
static-locations: classpath:/static/,file:${photo.file.dir} #暴露哪些资源可以通过项目名访问
# 对于thymeleaf模板引 无效
jackson:
date-format: yyyy-MM-dd HH:mm:ss #时间戳统一转换为指定格式
time-zone: GMT+8 # 时区修改为东8区
# mybatis-plus配置
mybatis-plus:
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath:mapper/*.xml
type-aliases-package: org.example.entity
四、项目结构
项目结构是非常简单的,典型的maven项目。
五、集成分页插件
mybatis-plus集成分页插件是相当简单的,只需要添加下面的配置类就可以了。
java
@Configuration
@MapperScan("org.example.mapper")
public class MybatisPlusConfig {
/**
* 添加分页插件
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 如果配置多个插件, 切记分页最后添加
// 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbType
return interceptor;
}
}
六、测试
我写了一个DailyReportMapper,里面有用到mybatis-plus的BaseMapper也有用到mybatis的原有方式。像注解方式和xml写sql的方式是mybatis原有功能,有了mybatis-plus,其实不需要写一行sql直接通过mapper就可以操作了。
java
@Mapper
public interface DailyReportMapper extends BaseMapper<DailyReport> {
@Select("insert into daily_report(emp_total,device_total,device_used_num,birthday_emp_num,create_time) values(#{empTotal},#{deviceTotal},#{deviceUsedNum},#{birthdayEmpNum},NOW())")
void save(DailyReport dailyReport);
List<DailyReport> lists(IPage<DailyReport> page);
}
为了测试方便,我就不写service了,直接在DemoController中调用。
java
@Controller
@RequestMapping("demo")
@Slf4j
public class DemoController {
@Autowired
private DailyReportMapper dailyReportMapper;
@RequestMapping("demo")
@ResponseBody
public String demo(){
IPage<DailyReport> page = new Page<>(1,10);
LambdaQueryWrapper<DailyReport> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(DailyReport::getId,111);
dailyReportMapper.selectList(page,wrapper);
List<DailyReport> lists = dailyReportMapper.lists(page);
return "demo";
}
}
页面访问url之后,日志打印如下:
sql
DBC Connection [com.mysql.cj.jdbc.ConnectionImpl@2ca78468] will not be managed by Spring
==> Preparing: SELECT COUNT(*) AS total FROM daily_report
==> Parameters:
<== Columns: total
<== Row: 2
<== Total: 1
==> Preparing: select * from daily_report LIMIT ?
==> Parameters: 10(Long)
<== Columns: id, emp_total, device_total, device_used_num, birthday_emp_num, create_time
<== Row: 1, 4, 9, 4, 0, 2024-05-29 17:03:03
<== Row: 2, 4, 9, 4, 0, 2024-05-30 19:38:00
<== Total: 2
可以看到,sql正常执行,分页插件也正常运行。
总结
spring boot 集成mybatis-plus是相当简单的,集成之后,操作数据库更是得心应手。