当前位置: 首页 > news >正文

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的依赖。

<!--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的参数

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集成分页插件是相当简单的,只需要添加下面的配置类就可以了。

@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就可以操作了。

@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中调用。

@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之后,日志打印如下:

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

相关文章:

  • 【MMU】——MMU 相关的 CP15 寄存器
  • uniapp通过Canvas绘制网格(心电图,坐标纸等可用)
  • 联合(union)和枚举(enum)学习(c语言)
  • 常用STL标准模板库
  • 区间预测 | Matlab实现QRCNN-GRU-Attention分位数回归卷积门控循环单元注意力机制时序区间预测
  • for深入学习
  • MySQL报ERROR 2002 (HY000)解决
  • NocoDB开源的智能表格详解-腾讯文档本地替代品
  • zs6d配置-2
  • python基础——-多任务-正则-装饰器
  • 深入理解mysql中的各种超时属性
  • 全面解析开源RTSP流媒体服务器:功能、性能与应用场景对比
  • 小白跟做江科大32单片机之按键控制LED
  • apple开发者账户证书删除与下载
  • 面试(五)
  • 初步了解服装买手、时尚网站
  • Spring Boot配置MySQL数据库连接数
  • python方法
  • 老程序员学习AI大模型的焦虑与机遇
  • 企微自动化机器人的应用与前景
  • 吴清:推动公募基金高质量发展的行动方案今天将会发布
  • 全军军级以上单位新任纪委书记监委主任培训班结业
  • 发表“男性患子宫肌瘤”论文的杂志一年发文三千余篇,中介称可提供代写
  • 新华每日电讯:上海“绿色大民生”撑起“春日大经济”
  • 长三角9座“万亿城市”一季报出炉:多地机器人产量大增
  • 恒瑞医药通过港交所上市聆讯,最快或5月挂牌上市