小言_互联网的博客

前言技术之mybatis-plus

411人阅读  评论(0)

目录

1.什么是mybatis-plus

2.初体验

3.日志

4.主键生成策略

5.更新

6.自动填充


1.什么是mybatis-plus

升级版的mybatis,目的是让mybatis更易于使用, 用官方的话说“为简化而生” 官网: MyBatis-Plus

2.初体验

1.准备数据库脚本

数据库 Schema 脚本如下:

DROP TABLE IF EXISTS user;

CREATE TABLE user
(
    id BIGINT(20) NOT NULL COMMENT '主键ID',
    name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    age INT(11) NULL DEFAULT NULL COMMENT '年龄',
    email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
    PRIMARY KEY (id)
);

其对应的数据库 Data 脚本如下:

DELETE FROM user;

INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');

2.初始化工程

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>2.7.7 </version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.ycx </groupId>
  12. <artifactId>mptest01 </artifactId>
  13. <version>0.0.1-SNAPSHOT </version>
  14. <name>mptest01 </name>
  15. <description>Demo project for Spring Boot </description>
  16. <properties>
  17. <java.version>1.8 </java.version>
  18. </properties>
  19. <dependencies>
  20. <dependency>
  21. <groupId>org.springframework.boot </groupId>
  22. <artifactId>spring-boot-starter </artifactId>
  23. </dependency>
  24. <dependency>
  25. <groupId>org.springframework.boot </groupId>
  26. <artifactId>spring-boot-starter-test </artifactId>
  27. <scope>test </scope>
  28. </dependency>
  29. <dependency>
  30. <groupId>com.baomidou </groupId>
  31. <artifactId>mybatis-plus-boot-starter </artifactId>
  32. <version>3.4.3.4 </version>
  33. </dependency>
  34. <dependency>
  35. <groupId>org.springframework.boot </groupId>
  36. <artifactId>spring-boot-starter-data-jdbc </artifactId>
  37. </dependency>
  38. <dependency>
  39. <groupId>mysql </groupId>
  40. <artifactId>mysql-connector-java </artifactId>
  41. <scope>runtime </scope>
  42. </dependency>
  43. <dependency>
  44. <groupId>org.projectlombok </groupId>
  45. <artifactId>lombok </artifactId>
  46. <optional>true </optional>
  47. </dependency>
  48. </dependencies>
  49. <build>
  50. <plugins>
  51. <plugin>
  52. <groupId>org.springframework.boot </groupId>
  53. <artifactId>spring-boot-maven-plugin </artifactId>
  54. </plugin>
  55. </plugins>
  56. </build>
  57. </project>

application.yml:

server.port=8080
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/oapro?useUnicode=true&characterEncoding=UTF-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

启动类,指定mapper接口的位置


  
  1. @ MapperScan( "com.ycx.mptest01.**")
  2. @ SpringBootApplication
  3. public class Mptest01Application {
  4. public static void main( String[] args) {
  5. SpringApplication. run( Mptest01Application. class, args);
  6. }
  7. }

3.编码

编写实体类 User.java


  
  1. import lombok. Data;
  2. @ Data
  3. public class User {
  4. private Long id;
  5. private String name;
  6. private Integer age;
  7. private String email;
  8. }

编写 Mapper 包下的 UserMapper接口


  
  1. import com. baomidou. mybatisplus. core. mapper. BaseMapper;
  2. import com. ycx. mptest01. model. User;
  3. import org. springframework. stereotype. Repository;
  4. @ Repository
  5. public interface UserMapper extends BaseMapper< User> {
  6. }

4.开始使用

添加测试类,进行功能测试:


  
  1. package com. ycx. mptest01;
  2. import com. ycx. mptest01. mapper. UserMapper;
  3. import com. ycx. mptest01. model. User;
  4. import org. junit. jupiter. api. Test;
  5. import org. springframework. beans. factory. annotation. Autowired;
  6. import org. springframework. boot. test. context. SpringBootTest;
  7. import java. util. List;
  8. @ SpringBootTest
  9. public class SampleTest {
  10. @ Autowired
  11. private UserMapper userMapper;
  12. @ Test
  13. public void testSelect( ) {
  14. System. out. println(( "----- selectAll method test ------"));
  15. List< User> userList = userMapper. selectList( null);
  16. userList. forEach( System. out::println);
  17. }
  18. }

 

3.日志

application.properties

mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

在开发中将sql语句打印到控制台,以便于调试

4.主键生成策略

雪花算法

默认的主键生策略,如果需要保存的实体对象中没有指定的主键值,则默认使用雪花算法来生成 

自增ID

数据库的字段必须是配置了自增 
对应的实体的主键字段加入自增注解: @TableId(type = IdType.AUTO) 

其他类型:

public enum IdType {
    AUTO(0), //自动增长
    NONE(1), //未设置主键
    INPUT(2), //手动输入
    ASSIGN_ID(3), //雪花算法
    ASSIGN_UUID(4); //排除到下划线的UUID,32位长度
    private final int key;

    private IdType(int key) {
        this.key = key;
    }

    public int getKey() {
        return this.key;
    }
}

测试代码


  
  1. package com. ycx. mptest01. model;
  2. import com. baomidou. mybatisplus. annotation. IdType;
  3. import com. baomidou. mybatisplus. annotation. TableId;
  4. import lombok. Data;
  5. @ Data
  6. public class User {
  7. // @TableId(type = IdType.AUTO) 数据库自增
  8. // @TableId(type = IdType.ASSIGN_ID) 默认雪花算法
  9. @ TableId(type = IdType. INPUT) // 程序员自己控制
  10. private Long id;
  11. private String name;
  12. private Integer age;
  13. private String email;
  14. }

SampleTest.java


  
  1. @ Test
  2. public void testInsert( ) {
  3. User user = new User();
  4. user. setAge( 18);
  5. user. setEmail( "javaxl@qq.com");
  6. user. setName( "javaxl");
  7. // user.setId(66L); // 程序员自己控制
  8. userMapper. insert(user);
  9. }

 测试结果如下

 

5.更新

通过主键更新

SampleTest.java


  
  1. @ Test
  2. public void testUpdate( ) {
  3. User user = new User();
  4. user. setId(6L);
  5. //ID用于定位sql,其他的列段设置几个就修改几个,没有设置的则保留原来的值
  6. user. setName( "小李飞刀");
  7. user. setAge( 22);
  8. int i = userMapper. updateById(user);
  9. System. out. println(i);
  10. }

6.自动填充

在数据表的设计中,经常需要加一些字段,如:创建时间,最后修改时间等,此时可以使用mybatis-plus来帮我们进行自动维护

在自动填充有两种方式:

一: 通过数据库完成自动填充

 

 

注意:

生成时间:不需要根据当前时间戳更新
最后修改时间:需要根据当前时间戳更新

测试代码如下


  
  1. @ Test
  2. public void testInsert( ) {
  3. User user = new User();
  4. user. setAge( 18);
  5. user. setEmail( "javaxl@qq.com");
  6. user. setName( "javaxl");
  7. userMapper. insert(user);
  8. }

  
  1. @Data
  2. public class User {
  3. // @TableId(type = IdType.AUTO) 数据库自增
  4. // @TableId(type = IdType.ASSIGN_ID) 默认雪花算法
  5. // @TableId(type = IdType.INPUT) // 程序员自己控制
  6. private Long id;
  7. private String name;
  8. private Integer age;
  9. private String email;
  10. //在代码中同步加入创建时间和最后修改时间的维护
  11. private Date createTime;
  12. private Date lastModifiedTime;
  13. }

结果如下:

完成后可以通过新增或更新

二:使用程序完成自动填充

将数据库中的自动维护功能取消:

 

 

第一步:实体类中加入注解


  
  1. import com. baomidou. mybatisplus. annotation. FieldFill;
  2. import com. baomidou. mybatisplus. annotation. IdType;
  3. import com. baomidou. mybatisplus. annotation. TableField;
  4. import com. baomidou. mybatisplus. annotation. TableId;
  5. import lombok. Data;
  6. import java. util. Date;
  7. @ Data
  8. public class User {
  9. // @TableId(type = IdType.AUTO) 数据库自增
  10. // @TableId(type = IdType.ASSIGN_ID) 默认雪花算法
  11. // @TableId(type = IdType.INPUT) // 程序员自己控制
  12. private Long id;
  13. private String name;
  14. private Integer age;
  15. private String email;
  16. //在代码中同步加入创建时间和最后修改时间的维护
  17. // private Date createTime;
  18. // private Date lastModifiedTime;
  19. //表明在插入时自动维护字段
  20. @ TableField(fill = FieldFill. INSERT)
  21. private Date createTime;
  22. //表明在插入和更新时自动维护字段
  23. @ TableField(fill = FieldFill. INSERT_UPDATE)
  24. private Date lastModifiedTime;
  25. }

第二步:编写处理类

 


  
  1. import com. baomidou. mybatisplus. core. handlers. MetaObjectHandler;
  2. import org. apache. ibatis. reflection. MetaObject;
  3. import org. springframework. stereotype. Component;
  4. import java. util. Date;
  5. // 不要忘了处理器是spring的组件
  6. @ Component
  7. public class AutoFillHandler implements MetaObjectHandler {
  8. @ Override
  9. public void insertFill( MetaObject metaObject) {
  10. this. setFieldValByName( "createTime", new Date(), metaObject);
  11. this. setFieldValByName( "lastModifiedTime", new Date(), metaObject);
  12. }
  13. @ Override
  14. public void updateFill( MetaObject metaObject) {
  15. //this.setFieldValByName("createTime",new Date(), metaObject);
  16. this. setFieldValByName( "lastModifiedTime", new Date(), metaObject);
  17. }
  18. }

 测试代码如下


  
  1. @ Test
  2. public void testInsert( ) {
  3. User user = new User();
  4. user. setAge( 18);
  5. user. setEmail( "javaxl@qq.com");
  6. user. setName( "javaxl");
  7. userMapper. insert(user);
  8. }
  9. @ Test
  10. public void testUpdate( ) {
  11. User user = new User();
  12. user. setId(1611736686478331905L);
  13. //ID用于定位sql,其他的列段设置几个就修改几个,没有设置的则保留原来的值
  14. user. setName( "小李飞刀");
  15. user. setAge( 22);
  16. int i = userMapper. updateById(user);
  17. System. out. println(i);
  18. }

完成后可以通过新增或更新。


转载:https://blog.csdn.net/weixin_65808248/article/details/128757265
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场