SpringBoot3- 整合 Mybatis-plus

2024年04月24日 17:43 · 阅读(653) ·

参考

SpringBoot 3.1.10 整合Mybatis-plus(快速学会)

开发环境

名称 版本
操作系统 Windows 11 X64
SpringBoot 3.2.4
Mybatis-plus 3.5.5
JDK 17

源码下载

sharding-jdbc-demo.zip

测试表

  1. CREATE TABLE `payment_wallet_detail` (
  2. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  3. `pay_month` varchar(6) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '支付月份yyyyMM,分片键',
  4. `tenant_id` bigint(20) DEFAULT NULL COMMENT '"tenantId',
  5. `create_by` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人',
  6. `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  7. `update_by` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '修改人(数据库中最终取 update_by)',
  8. `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间(数据库中最终取 update_time)',
  9. `is_delete` tinyint(1) DEFAULT '0' COMMENT '是否删除(0、否,1、是) 默认是0',
  10. PRIMARY KEY (`id`),
  11. KEY `payment_wallet_detail_kv_id_IDX` (`kv_id`) USING BTREE
  12. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='发放明细表';
  13. CREATE TABLE `payment_wallet_transaction` (
  14. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  15. `pay_order_number` varchar(30) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '外部订单号-对应明细表的明细唯一单号,分片键(hash-mod)',
  16. `tenant_id` bigint(20) DEFAULT '1' COMMENT '租户id',
  17. `create_by` varchar(100) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '创建人',
  18. `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  19. `update_by` varchar(100) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '修改人',
  20. `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  21. `is_delete` tinyint(1) DEFAULT NULL COMMENT '是否删除(0:否,1:是)',
  22. PRIMARY KEY (`id`) USING BTREE,
  23. KEY `pay_order_number_IDX` (`pay_order_number`,`transaction_direction`) USING BTREE
  24. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='发放流水表';

创建空项目

名称 SpringBoot3-Study
位置 D:\Study-Java\2023

创建模块-sharding-jdbc-demo

名称 sharding-jdbc-demo
位置 D:\Study-Java\2023\SpringBoot3-Study
语言 Java
构建系统 Maven
JDK 版本:17
供应商:Eclipse Temurin(AdoptOpenJDK HotSpot)17.0.8
位置:C:\Users\Administrator.jdks\temurin-17.0.8
主 ID com.atguigu
工件 ID sharding-jdbc-demo

sharding-jdbc-demo

目录结构

  1. ├─sharding-jdbc-demo
  2. pom.xml
  3. ├─src
  4. ├─main
  5. ├─java
  6. └─com
  7. └─sharding
  8. └─demo
  9. ShardingJdbcDemoApplication.java
  10. ├─common
  11. Contents.java
  12. ResponseCode.java
  13. ├─config
  14. MybatisPlusConfig.java
  15. ├─controller
  16. TestController.java
  17. ├─DTO
  18. BatchParam.java
  19. ├─exception
  20. InternalApiException.java
  21. ├─handler
  22. MyMetaObjectHandler.java
  23. ├─mapper
  24. PaymentWalletDetailMapper.java
  25. PaymentWalletTransactionMapper.java
  26. ├─model
  27. PaymentWalletDetail.java
  28. PaymentWalletTransaction.java
  29. SuperEntity.java
  30. ├─service
  31. IPaymentWalletDetailService.java
  32. IPaymentWalletTransactionService.java
  33. └─impl
  34. PaymentWalletDetailServiceImpl.java
  35. PaymentWalletTransactionServiceImpl.java
  36. ├─sharingrule
  37. PayMonthAlgorithm.java
  38. WalletPayOrderNumberShardingRule.java
  39. └─utils
  40. AssertUtil.java
  41. CommonUtil.java
  42. DateUtils.java
  43. └─resources
  44. application.yml
  45. sharding-dev.yml
  46. ├─mapper
  47. PaymentWalletDetailMapper.xml
  48. PaymentWalletTransactionMapper.xml
  49. └─META-INF
  50. └─services
  51. org.apache.shardingsphere.sharding.spi.ShardingAlgorithm

pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>3.2.4</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.sharding.demo</groupId>
  12. <artifactId>sharding-jdbc-demo</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>sharding-jdbc-demo</name>
  15. <description>sharding-jdbc-demo</description>
  16. <properties>
  17. <java.version>17</java.version>
  18. </properties>
  19. <dependencies>
  20. <dependency>
  21. <groupId>org.springframework.boot</groupId>
  22. <artifactId>spring-boot-starter-web</artifactId>
  23. </dependency>
  24. <!--引入 MybatisPlus 依赖-->
  25. <dependency>
  26. <groupId>com.baomidou</groupId>
  27. <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
  28. <version>3.5.5</version>
  29. </dependency>
  30. <!--mysql-->
  31. <dependency>
  32. <groupId>mysql</groupId>
  33. <artifactId>mysql-connector-java</artifactId>
  34. <version>8.0.30</version>
  35. </dependency>
  36. <!--引入 durid 数据源-->
  37. <dependency>
  38. <groupId>com.alibaba</groupId>
  39. <artifactId>druid-spring-boot-starter</artifactId>
  40. <version>1.1.18</version>
  41. </dependency>
  42. <!--lombok-->
  43. <dependency>
  44. <groupId>org.projectlombok</groupId>
  45. <artifactId>lombok</artifactId>
  46. </dependency>
  47. <!-- hutool-->
  48. <dependency>
  49. <groupId>cn.hutool</groupId>
  50. <artifactId>hutool-all</artifactId>
  51. <version>5.8.25</version>
  52. </dependency>
  53. <!-- springboot-->
  54. <dependency>
  55. <groupId>org.springframework.boot</groupId>
  56. <artifactId>spring-boot-starter</artifactId>
  57. </dependency>
  58. <dependency>
  59. <groupId>org.springframework.boot</groupId>
  60. <artifactId>spring-boot-starter-freemarker</artifactId>
  61. </dependency>
  62. </dependencies>
  63. <build>
  64. <plugins>
  65. <plugin>
  66. <groupId>org.springframework.boot</groupId>
  67. <artifactId>spring-boot-maven-plugin</artifactId>
  68. <configuration>
  69. <excludes>
  70. <exclude>
  71. <groupId>org.projectlombok</groupId>
  72. <artifactId>lombok</artifactId>
  73. </exclude>
  74. </excludes>
  75. </configuration>
  76. </plugin>
  77. </plugins>
  78. <resources>
  79. <resource>
  80. <directory>src/main/resources</directory>
  81. <includes>
  82. <include>**/*</include>
  83. </includes>
  84. <filtering>false</filtering>
  85. </resource>
  86. </resources>
  87. </build>
  88. </project>

application.yml

  1. server:
  2. port: 8088
  3. spring:
  4. datasource:
  5. type: com.alibaba.druid.pool.DruidDataSource
  6. driver-class-name: com.mysql.cj.jdbc.Driver
  7. url: jdbc:mysql://a.a.a.a:3306/testDB?serverTimezone=UTC&characterEncoding=utf-8&useSSL=false
  8. username: username
  9. password: password
  10. #mybatis
  11. mybatis-plus:
  12. mapper-locations: classpath:/mapper/*Mapper.xml
  13. #实体扫描,多个package用逗号或者分号分隔
  14. typeAliasesPackage:
  15. typeEnumsPackage:
  16. global-config:
  17. #主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
  18. id-type: 0
  19. #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
  20. field-strategy: 2
  21. #驼峰下划线转换
  22. db-column-underline: true
  23. #刷新mapper 调试神器
  24. refresh-mapper: true
  25. #数据库大写下划线转换
  26. #capital-mode: true
  27. #序列接口实现类配置
  28. #key-generator:
  29. #逻辑删除配置
  30. logic-delete-value: 0
  31. logic-not-delete-value: 1
  32. # #自定义填充策略接口实现
  33. # meta-object-handler:
  34. configuration:
  35. map-underscore-to-camel-case: true #开启驼峰命名
  36. cache-enabled: false
  37. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #日志

主启动类-ShardingJdbcDemoApplication

  1. package com.sharding.demo;
  2. import org.mybatis.spring.annotation.MapperScan;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. @SpringBootApplication
  6. @MapperScan(basePackages = "com.sharding.demo.mapper")
  7. public class ShardingJdbcDemoApplication {
  8. public static void main(String[] args) {
  9. SpringApplication.run(ShardingJdbcDemoApplication.class, args);
  10. }
  11. }

entity

SuperEntity

  1. package com.sharding.demo.model;
  2. import com.baomidou.mybatisplus.annotation.FieldFill;
  3. import com.baomidou.mybatisplus.annotation.IdType;
  4. import com.baomidou.mybatisplus.annotation.TableField;
  5. import com.baomidou.mybatisplus.annotation.TableId;
  6. import com.baomidou.mybatisplus.extension.activerecord.Model;
  7. import com.fasterxml.jackson.annotation.JsonFormat;
  8. import java.io.Serializable;
  9. import java.util.Date;
  10. import lombok.Getter;
  11. import lombok.Setter;
  12. import lombok.ToString;
  13. /**
  14. * 基础实体类
  15. */
  16. @Getter
  17. @Setter
  18. @ToString
  19. public class SuperEntity<T extends Model<T>> extends Model<T> {
  20. /**
  21. * 主键ID
  22. */
  23. @TableId(type = IdType.AUTO)
  24. private Long id;
  25. @TableField(value = "create_by", fill = FieldFill.INSERT)
  26. private String createBy;
  27. @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE)
  28. private String updateBy;
  29. /**
  30. * 创建时间
  31. */
  32. @TableField(value = "create_time", fill = FieldFill.INSERT)
  33. @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
  34. private Date createTime;
  35. /**
  36. * 更新时间
  37. */
  38. @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
  39. @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
  40. private Date updateTime;
  41. /**
  42. * 是否删除(0:未删除;1:已删除)
  43. */
  44. @TableField(value = "is_delete", fill = FieldFill.INSERT)
  45. private Integer isDelete;
  46. @Override
  47. public Serializable pkVal() {
  48. return this.id;
  49. }
  50. }

PaymentWalletDetail

  1. package com.sharding.demo.model;
  2. import com.baomidou.mybatisplus.annotation.IdType;
  3. import com.baomidou.mybatisplus.annotation.TableId;
  4. import lombok.Data;
  5. import lombok.EqualsAndHashCode;
  6. import java.math.BigDecimal;
  7. /**
  8. * 发放明细表
  9. */
  10. @Data
  11. @EqualsAndHashCode(callSuper = true)
  12. public class PaymentWalletDetail extends SuperEntity {
  13. /**
  14. * 主键ID
  15. */
  16. @TableId(type = IdType.ASSIGN_ID)
  17. private Long id;
  18. /**
  19. * "tenantId
  20. */
  21. private Long tenantId;
  22. /**
  23. *支付月份yyyyMM,分片键,取自iface pay_date
  24. */
  25. private String payMonth;
  26. private static final long serialVersionUID = 1L;
  27. }

PaymentWalletTransaction

  1. package com.sharding.demo.model;
  2. import com.baomidou.mybatisplus.annotation.IdType;
  3. import com.baomidou.mybatisplus.annotation.TableId;
  4. import lombok.Data;
  5. import lombok.EqualsAndHashCode;
  6. import java.math.BigDecimal;
  7. /**
  8. * 发放流水表
  9. */
  10. @Data
  11. @EqualsAndHashCode(callSuper = true)
  12. public class PaymentWalletTransaction extends SuperEntity {
  13. /**
  14. * 主键ID
  15. */
  16. @TableId(type = IdType.ASSIGN_ID)
  17. private Long id;
  18. /**
  19. * 外部订单号-对应明细表的明细唯一单号
  20. */
  21. private String payOrderNumber;
  22. /**
  23. * 租户id
  24. */
  25. private Long tenantId;
  26. }

Mapper

PaymentWalletDetailMapper

  1. package com.sharding.demo.mapper;
  2. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  3. import com.sharding.demo.model.PaymentWalletDetail;
  4. import org.springframework.stereotype.Repository;
  5. @Repository
  6. public interface PaymentWalletDetailMapper extends BaseMapper<PaymentWalletDetail> {
  7. }

PaymentWalletDetailMapper.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.sharding.demo.mapper.PaymentWalletDetailMapper">
  4. </mapper>

PaymentWalletTransactionMapper

  1. package com.sharding.demo.mapper;
  2. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  3. import com.sharding.demo.model.PaymentWalletTransaction;
  4. import org.apache.ibatis.annotations.Mapper;
  5. @Mapper
  6. public interface PaymentWalletTransactionMapper extends BaseMapper<PaymentWalletTransaction> {
  7. }

PaymentWalletTransactionMapper.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.sharding.demo.mapper.PaymentWalletTransactionMapper">
  4. </mapper>

service 和 serviceImpl 层

IPaymentWalletDetailService

  1. package com.sharding.demo.service;
  2. import com.baomidou.mybatisplus.extension.service.IService;
  3. import com.sharding.demo.model.PaymentWalletDetail;
  4. public interface IPaymentWalletDetailService extends IService<PaymentWalletDetail> {
  5. }

PaymentWalletDetailServiceImpl

  1. package com.sharding.demo.service.impl;
  2. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  3. import com.sharding.demo.mapper.PaymentWalletDetailMapper;
  4. import com.sharding.demo.model.PaymentWalletDetail;
  5. import com.sharding.demo.service.IPaymentWalletDetailService;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.springframework.stereotype.Service;
  8. @Slf4j
  9. @Service
  10. public class PaymentWalletDetailServiceImpl extends ServiceImpl<PaymentWalletDetailMapper, PaymentWalletDetail>
  11. implements IPaymentWalletDetailService {
  12. }

IPaymentWalletTransactionService

  1. package com.sharding.demo.service;
  2. import com.baomidou.mybatisplus.extension.service.IService;
  3. import com.sharding.demo.model.PaymentWalletTransaction;
  4. public interface IPaymentWalletTransactionService extends IService<PaymentWalletTransaction> {
  5. }

PaymentWalletTransactionServiceImpl

  1. package com.sharding.demo.service.impl;
  2. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  3. import com.sharding.demo.mapper.PaymentWalletTransactionMapper;
  4. import com.sharding.demo.model.PaymentWalletTransaction;
  5. import com.sharding.demo.service.IPaymentWalletTransactionService;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.springframework.stereotype.Service;
  8. @Slf4j
  9. @Service
  10. public class PaymentWalletTransactionServiceImpl
  11. extends ServiceImpl<PaymentWalletTransactionMapper, PaymentWalletTransaction>
  12. implements IPaymentWalletTransactionService {
  13. }

controller

  1. package com.sharding.demo.controller;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.sharding.demo.mapper.PaymentWalletDetailMapper;
  4. import com.sharding.demo.model.PaymentWalletDetail;
  5. import jakarta.annotation.Resource;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.springframework.web.bind.annotation.GetMapping;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9. import org.springframework.web.bind.annotation.RequestParam;
  10. import org.springframework.web.bind.annotation.RestController;
  11. import java.util.List;
  12. @Slf4j
  13. @RestController
  14. @RequestMapping("/test")
  15. public class TestController {
  16. @Resource
  17. PaymentWalletDetailMapper detailService;
  18. @GetMapping("/testGetDetail")
  19. public List<PaymentWalletDetail> testGetDetail(@RequestParam(name = "payMonth") String payMonth) {
  20. LambdaQueryWrapper<PaymentWalletDetail> wrapper = new LambdaQueryWrapper<>();
  21. wrapper.eq(PaymentWalletDetail::getPayMonth, payMonth);
  22. return detailService.selectList(wrapper);
  23. }
  24. }

测试结果

  1. [{"id":1,"createBy":null,"updateBy":null,"createTime":"2024-04-24 23:26:31","updateTime":"2024-04-24 23:26:31","isDelete":0,"payMonth":"202403"}]