Spring boot 集成mybatis-plus

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是相当简单的,集成之后,操作数据库更是得心应手。

相关推荐
间彧12 分钟前
Kubernetes的Pod与Docker Compose中的服务在概念上有何异同?
后端
间彧15 分钟前
从开发到生产,如何将Docker Compose项目平滑迁移到Kubernetes?
后端
间彧21 分钟前
如何结合CI/CD流水线自动选择正确的Docker Compose配置?
后端
间彧22 分钟前
在多环境(开发、测试、生产)下,如何管理不同的Docker Compose配置?
后端
间彧23 分钟前
如何为Docker Compose中的服务配置健康检查,确保服务真正可用?
后端
间彧28 分钟前
Docker Compose和Kubernetes在编排服务时有哪些核心区别?
后端
间彧33 分钟前
如何在实际项目中集成Arthas Tunnel Server实现Kubernetes集群的远程诊断?
后端
brzhang1 小时前
读懂 MiniMax Agent 的设计逻辑,然后我复刻了一个MiniMax Agent
前端·后端·架构
lang201509281 小时前
Spring Boot日志配置完全指南
java·spring boot·单元测试
草明2 小时前
Go 的 IO 多路复用
开发语言·后端·golang