# xugu-mybatisplus-demo **Repository Path**: XuguDB/xugu-mysplus-demo ## Basic Information - **Project Name**: xugu-mybatisplus-demo - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-04-23 - **Last Updated**: 2024-11-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 工程目录 ## main - com.xugu.mapper:mapper接口包 - com.xugu.pojo:数据库映射对象包 - com.xugu.service:service接口及其实现类包 - com.xugu.typeHandler:自定义的类型处理器包 ## test - com.xugu.MyBatisPlusTest.APITestApplication:service和mapper基本CRUD API测试类 - com.xugu.MyBatisPlusTest.BlobTestApplication:Blob数据类型测试类 - com.xugu.MyBatisPlusTest.ClobTestApplication:Clob数据类型测试类 - com.xugu.MyBatisPlusTest.DateTimeTestApplication:JDK1.8新增日期类型测试类 - com.xugu.MyBatisPlusTest.EnumTestApplication:https://baomidou.com/pages/8390a4/#步骤1-声明通用枚举属性 - com.xugu.MyBatisPlusTest.IdTestApplication:测试主键生成策略,包括数据库自增、UUID、雪花算法、自行填写 - com.xugu.MyBatisPlusTest.ListTestApplication:实体类List属性测试类 - com.xugu.MyBatisPlusTest.NormalTestApplication:普通数据类型测试类 # 详细说明 ## 基本API测试 (1)建表SQL ```sql CREATE TABLE APITest ( id VARCHAR, `name` VARCHAR ) ``` (2)Java实例类对象:com.xugu.pojo.APITest ```java @TableName("APITest") // 指定表名 public class APITest { @TableId(type = IdType.ASSIGN_ID) // 默认使用MyBatisPlus提供的分布式ID(雪花算法) private String id; private String name; } ``` (3)mapper和service mapper接口:com.xugu.mapper.APITestMapper,继承MyBatisPlus指定的BaseMapper接口即可 service接口:com.xugu.service.APITestService,继承MyBatisPlus指定的IService接口即可 service实现类:com.xugu.service.impl.APITestServiceImpl,继承MyBatisPlus指定的ServiceImpl类以及实现APITestService即可 (4)测试类,test包下:com.xugu.MyBatisPlusTest.APITestApplication 测试类中包含了Service和mapper的增删改查API测试 ## Blob字段属性测试 (1)建表SQL ```sql CREATE TABLE BlobTest ( blob_field blob ) ``` (2)Java实体类对象:com.xugu.pojo.BlobTest ```java @TableName("BlobTest") public class BlobTest { // 使用自定义的类型处理器处理Blob类型,MyBatis自带的BlobTypeHandler只能处理byte[]类型 @TableField(typeHandler = CustomBlobTypeHandler.class) private Blob blobField; } ``` (3)自定义类型处理器:com.xugu.typeHandler.CustomBlobTypeHandler MyBatis虽然有自带的BlobTypeHandler,但是该类型处理器是按照字节数组的方式进行处理的,也就是说实体类中的Blob字段只能定义为byte[] 因此,如果要定义Blob实体类属性,就只能使用自定义的类型处理器 (4)mapper和service mapper接口:com.xugu.mapper.BlobTestMapper,继承MyBatisPlus指定的BaseMapper接口即可 service接口:com.xugu.service.BlobTestService,继承MyBatisPlus指定的IService接口即可 service实现类:com.xugu.service.impl.BlobTestServiceImpl,继承MyBatisPlus指定的ServiceImpl类以及实现BlobTestService即可 (5)测试类,test包下:com.xugu.MyBatisPlusTest.BlobTestApplication 测试类中包含了Service和mapper针对BLOB字段的基本测试 ## Clob字段属性测试 (1)建表SQL ```sql CREATE TABLE ClobTest ( clob_field clob ) ``` (2)Java实体类对象:com.xugu.pojo.ClobTest ```java @TableName("ClobTest") public class ClobTest { // 使用自定义的类型处理器处理Clob类型,MyBatis自带的ClobTypeHandler只能处理String类型 @TableField(typeHandler = CustomClobTypeHandler.class) private Clob clobField; } ``` (3)自定义类型处理器:com.xugu.typeHandler.CustomClobTypeHandler MyBatis虽然有自带的BlobTypeHandler,但是该类型处理器是按照字符串的方式进行处理的,也就是说实体类中的Clob字段只能定义为String 因此,如果要定义Clob实体类属性,就只能使用自定义的类型处理器 (4)mapper和service mapper接口:com.xugu.mapper.ClobTestMapper,继承MyBatisPlus指定的BaseMapper接口即可 service接口:com.xugu.service.ClobTestService,继承MyBatisPlus指定的IService接口即可 service实现类:com.xugu.service.impl.ClobTestServiceImpl,继承MyBatisPlus指定的ServiceImpl类以及实现ClobTestService即可 (5)测试类,test包下:com.xugu.MyBatisPlusTest.ClobTestApplication 测试类中包含了Service和mapper针对CLOB字段的基本测试 ## JDK1.8新增日期类测试 (1)建表SQL ```sql CREATE TABLE DateTimeTest ( date_field DATE, time_field TIME, datetime_field DATETIME, zonedatetime_field DATETIME WITH TIME ZONE ) ``` (2)Java实体类对象:com.xugu.pojo.DateTimeTest ```java @TableName("DateTimeTest") public class DateTimeTest { private LocalDate dateField; private LocalTime timeField; private LocalDateTime datetimeField; private ZonedDateTime zonedatetimeField; } ``` (3)mapper和service mapper接口:com.xugu.mapper.DateTimeTestMapper,继承MyBatisPlus指定的BaseMapper接口即可 service接口:com.xugu.service.DateTimeTestService,继承MyBatisPlus指定的IService接口即可 service实现类:com.xugu.service.impl.DateTimeTestServiceImpl,继承MyBatisPlus指定的ServiceImpl类以及实现DateTimeTestService即可 (4)测试类,test包下:com.xugu.MyBatisPlusTest.DateTimeTestApplication 测试类中包含了Service和mapper针对LocalDate、LocalTime、LocalDateTime和ZonedDateTime的基本测试 ## 枚举类测试 Java对象中为枚举对象,数据库中仅保存枚举类的code值 (1)建表SQL ```sql CREATE TABLE EnumTest ( grade int -- 仅保留枚举类的code字段 ) ``` (2)Java实体类对象:com.xugu.pojo.EnumTest ```java @TableName("EnumTest") public class EnumTest { private GradeEnum grade; public enum GradeEnum { PRIMARY(1, "小学"), SECONDORY(2, "中学"), HIGH(3, "高中"); GradeEnum(int code, String descp) { this.code = code; this.descp = descp; } @EnumValue // MyBatisPlus提供的专门处理枚举类型的注解,标记数据库存的值是int类型的code private int code; private String descp; } } ``` (3)mapper和service mapper接口:com.xugu.mapper.EnumTestMapper,继承MyBatisPlus指定的BaseMapper接口即可 service接口:com.xugu.service.EnumTestService,继承MyBatisPlus指定的IService接口即可 service实现类:com.xugu.service.impl.EnumTestServiceImpl,继承MyBatisPlus指定的ServiceImpl类以及实现EnumTestService即可 (4)测试类,test包下:com.xugu.MyBatisPlusTest.EnumTestApplication 测试类中包含了Service和mapper针对枚举类的基本测试 ## 主键ID生成策略测试 (1)建表SQL ```sql CREATE TABLE IdTest ( id bigint IDENTITY(1,1) PRIMARY KEY, --测试自增 @TableId(type = IdType.AUTO) `name` varchar ) CREATE TABLE IdTest ( id varchar -- 测试主键生成策略 https://baomidou.com/pages/223848/#tableid ) ``` (2)Java实体类对象:com.xugu.pojo.IdTest ```java @TableName("IdTest") public class IdTest { @TableId(type = IdType.AUTO) // 使用数据库 ID 自增,同时会返回自增值并填充到id属性中 // @TableId(type = IdType.ASSIGN_ID) // 雪花算法分配ID // @TableId(type = IdType.ASSIGN_UUID) // 分配UUID // @TableId(type = IdType.NONE) // 无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT) // @TableId(type = IdType.INPUT) // insert 前自行 set 主键值 private Long id; private String name; } ``` (3)mapper和service mapper接口:com.xugu.mapper.IdTestMapper,继承MyBatisPlus指定的BaseMapper接口即可 service接口:com.xugu.service.IdTestService,继承MyBatisPlus指定的IService接口即可 service实现类:com.xugu.service.impl.IdTestServiceImpl,继承MyBatisPlus指定的ServiceImpl类以及实现IdTestService即可 (4)测试类,test包下:com.xugu.MyBatisPlusTest.IdTestApplication 测试类中包含了Service和mapper针对主键ID生成策略的基本测试,同时对于数据库自增主键ID的获取也进行了测试 ## 实体类List属性测试 直接将Java中为List对象当成一个Object对象来处理,序列化对象为一个json字符串,使得数据库中直接以varchar的形式保存整个List对象 (1)建表SQL ```sql CREATE TABLE ListTest ( ids varchar ) ``` (2)Java实体类对象:com.xugu.pojo.IdTest ```java @TableName(value = "ListTest", autoResultMap = true) // https://blog.csdn.net/qq_38822141/article/details/124514792 public class ListTest { // 直接将Java中为List对象当成一个Object对象来处理,序列化对象为一个json字符串,使得数据库中直接以varchar的形式保存整个List对象 @TableField(value = "ids", typeHandler = JacksonTypeHandler.class) private List ids; } ``` (3)mapper和service mapper接口:com.xugu.mapper.ListTestMapper,继承MyBatisPlus指定的BaseMapper接口即可 service接口:com.xugu.service.ListTestService,继承MyBatisPlus指定的IService接口即可 service实现类:com.xugu.service.impl.ListTestServiceImpl,继承MyBatisPlus指定的ServiceImpl类以及实现ListTestService即可 (4)测试类,test包下:com.xugu.MyBatisPlusTest.ListTestApplication 测试类中包含了Service和mapper针对List属性的基本测试 ## 普通常见字段测试 (1)建表SQL ```sql CREATE TABLE NormalTest ( tinyint_field tinyint, smallint_field SMALLINT, integer_field integer, bigint_field bigint, numeric_field NUMERIC(10,3), float_field FLOAT, double_field DOUBLE, char_field char(5), varchar_field varchar(10), date_field DATE, time_field TIME, timestamp_field TIMESTAMP, blob_field blob, clob_field clob, boolean_field boolean, binary_field BINARY ) ``` (2)Java实体类对象:com.xugu.pojo.NormalTest ```java @TableName("NormalTest") public class NormalTest { private Byte tinyintField; private Short smallintField; private Integer integerField; private Long bigintField; private BigDecimal numericField; private Float floatField; private Double doubleField; private String charField; private String varcharField; private Date dateField; private Time timeField; private Timestamp timestampField; @TableField(jdbcType = JdbcType.BLOB,typeHandler = CustomBlobTypeHandler.class) private Blob blobField; @TableField(jdbcType = JdbcType.CLOB,typeHandler = CustomClobTypeHandler.class) private Clob clobField; private Boolean booleanField; private byte[] binaryField; } ``` (3)mapper和service mapper接口:com.xugu.mapper.NormalTestMapper,继承MyBatisPlus指定的BaseMapper接口即可 service接口:com.xugu.service.NormalTestService,继承MyBatisPlus指定的IService接口即可 service实现类:com.xugu.service.impl.NormalTestServiceImpl,继承MyBatisPlus指定的ServiceImpl类以及实现NormalTestService即可 (4)测试类,test包下:com.xugu.MyBatisPlusTest.NormalTestApplication 测试类中包含了Service和mapper针对常见普通属性的基本测试