• Mybatis-plus的操作(新增,修改,删除)


    一、springboot整合mybatis-plus

    1.1 springboot在整合mybatis-plus时,pom文件中的坐标

    一般同时会引入Druid

    1. <dependency>
    2. <groupId>com.baomidougroupId>
    3. <artifactId>mybatis-plus-boot-starterartifactId>
    4. <version>3.4.2version>
    5. dependency>
    6. <dependency>
    7. <groupId>mysqlgroupId>
    8. <artifactId>mysql-connector-javaartifactId>
    9. <scope>runtimescope>
    10. dependency>
    11. <dependency>
    12. <groupId>com.alibabagroupId>
    13. <artifactId>druid-spring-boot-starterartifactId>
    14. <version>1.2.6version>
    15. dependency>

    1.2 application.yml配置文件

    1. spring:
    2. application:
    3. name: springboot_mysql
    4. datasource:
    5. druid:
    6. driver-class-name: com.mysql.cj.jdbc.Driver
    7. url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
    8. username: root
    9. password: root
    10. mybatis-plus:
    11. configuration:
    12. #执行的sql语句,会打印在控制台上
    13. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    14. global-config:
    15. db-config:
    16. #id增长策略
    17. id-type: assign_id
    18. #数据库表与模型的关系
    19. table-prefix: tbl_

    1.3 数据库表与模型关系的映射关系

    MP会默认将模型类的类名首字母小写作为表名使用,假如数据库名称都以tbl_开头,那么我们就需要将所有的模型类上添加@TableName,配置起来还是比较繁琐,简化方式可以在配置文件中配置如下内容:

    1. mybatis-plus: 
    2.     global-config
    3.         db-config
    4.             table-prefix: tbl_

    设置前缀的内容,这样MP就会拿tbl_加上模型类的首字母小写,就刚好组装成数据库的表名。

    二、新增

    2.1、@TableId(type = IdType.策略)注解,主键的生成策略

    在向数据库表中新增数据时,往往Id都是自动生成的的,而不是手动维护的。所以可以在实体类中的Id字段上加上注解@TableId(type = IdType.策略),表示字段的生成策略。

    2.2、IdType.策略有ASSIGN_ID策略、ASSIGN_UUID策略、INPUT策略、AUTO策略

    2.2.1 ASSIGN_ID策略

    可以在分布式的情况下使用,生成的是Long类型的数字,可以排序性能也高,但是生成的策略和服务器时间有关,如果修改了系统时间就有可能导致出现重复主键。所以实体类的字段类型是Long类型的,否则会抛异常。

    2.2.2 ASSIGN_UUID策略

    可以在分布式的情况下使用,而且能够保证唯一,但是生成的主键是32位的字符串,长度过长占用空间而且还不能排序,查询性能也慢。

    2.2.3 AUTO策略

    数据库ID自增,这种策略适合在数据库服务器只有1台的情况下使用,不可作为分布式ID使用

    2.2.4 INPUT

    不设置id生成策略,MP不自动生成,约等于NONE,所以这两种方式都需要用户手动设置,但是手动设置第一个问题是容易出现相同的ID造成主键冲突,为了保证主键不冲突就需要做很多判定,实现起来比较复杂

    2.3、主键生成策略统一配置

    如果要在项目中的每一个模型类上都需要使用相同的生成策略,稍微比较繁琐,我们可以在配置文件中添加内容来使用统一的配置:

    1. mybatis-plus: 
    2.     global-config: 
    3.         db-config:
    4.             id-type: assign_id

    配置完成之后,每个模型的注解ID策略都将成为assign_id

    2.4 新增

    1. Employee employee = new Employee();
    2. employee.setLastName("zhangsan");
    3. employee.setGender(1);
    4. employee.setEmail("zhangsan@qq.com");
    5. employeeMapper.insert(employee);

    三、修改

    1. Employee employee = new Employee();
    2. employee.setId(13L);
    3. employee.setLastName("王五");
    4. employee.setEmail("wangwu@qq.com");
    5. employee.setGender(1);
    6. employeeMapper.updateById(employee);

    四、自动填充功能

    比如创建时间,修改时间等字段,都和当前时间有关系,可以通过set方法设置字段的值。但是也可以通过mybatis-plus提供的自动填充的功能设置字段的值。其步骤如下:

    第一步:在实体类需要填充的字段上加注解@TableField(fill=)

    1. @TableField(fill = FieldFill.INSERT)
    2. private Date createTime;
    3. @TableField(fill = FieldFill.INSERT_UPDATE)
    4. private Date updateTime;

    第二步:实现mybatis-plus提供的MetaObjectHandler接口

    1. 新建handler包,在handler包下创建类MyMetaObjectHandler implements  MetaObjectHandler,并由spring管理,添加@Component注解

    2. 类中重载insertFill,updateFill方法。新增的时候会执行insertFill()方法,修改时会执行updateFill()方法。

    1. @Component
    2. public class MyMetaObjectHandler implements MetaObjectHandler {
    3. @Override
    4. public void insertFill(MetaObject metaObject) {
    5. //setFieldValByName:参数1:字段名,参数2:赋值,参数3:metaObject
    6. this.setFieldValByName("createTime",new Date(),metaObject);
    7. this.setFieldValByName("updateTime",new Date(),metaObject);
    8. }
    9. @Override
    10. public void updateFill(MetaObject metaObject) {
    11. this.setFieldValByName("updateTime",new Date(),metaObject);
    12. }
    13. }

  • 相关阅读:
    卡巴斯基2009杀毒软件
    uniapp+node.js前后端做帖子模块:帖子的点赞/取消点赞(社区管理平台的小程序)
    我的DW个人网站设计——安徽宣城6页HTML+CSS+JavaScript
    4--OpenCV:图像像素的读写&像素运算
    用Django 写学习笔记程序第二章.2创建用户账户
    数据结构与算法 -- 动态规划基础
    Java学习笔记5.3.2 Set接口 - TreeSet类
    计算机网络常见面试题
    【MySQL高级】索引
    【算法|动态规划No.8】leetcode面试题 17.16. 按摩师
  • 原文地址:https://blog.csdn.net/weixin_51725434/article/details/127950546