• Spring boot + MyBatis-Plus3


    学习

    增删改查

    在 service 层直接调用。

    1. insert(user)  增
    2. selectById(1)  根据id查
    3. updateById(user)  更新
    4. selectByMap(map)  根据条件查
    5. selectBatchIds(list) 根据多个id查
    6. selectPage(page, null) 分页查
    7. deleteById(1) 删除id为1的用户
    8. deleteByMap(map) 删除符合条件的用户
    9. deleteBatchIds(list) 删除多个id的用户

     其他功能

    ID自动生成功能

    @TableId(type=IdType.AUTO)

    1. IdType.AUTO:自增
    2. ASSIGN_ID:分配ID(主键类型为Long、Integer或String)。默认是雪花算法,根据时间戳自增。
    3. ASSIGN_UUID:分配UUID(主键类型为String)。

    添加注释: 

    1. @TableId(type = IdType.AUTO)
    2. private Long id; //ID

    自动填充功能

    @TableField(fill = FieldFill.INSERT)

    1. FieldFill.INSERT:插入时,对这个属性进行操作
    2. FieldFill.INSERT_UPDATE:插入和更新时,都要对这个属性进行操作

    1. 添加注释: 

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

    2. 创建一个处理器,实现 MetaObjectHandler 接口: 

    1. @Slf4j
    2. @Component
    3. public class MyMetaObjectHandler implements MetaObjectHandler {
    4. //插入时的填充策略
    5. @Override
    6. public void insertFill(MetaObject metaObject) {
    7. log.info("start intsert fill ....");
    8. this.strictInsertFill(metaObject,"createTime", LocalDateTime.class,LocalDateTime.now());// 起始版本 3.3.0(推荐使用)
    9. this.strictInsertFill(metaObject,"updateTime", LocalDateTime.class,LocalDateTime.now());// 起始版本 3.3.0(推荐使用)
    10. }
    11. //更新时的填充策略
    12. @Override
    13. public void updateFill(MetaObject metaObject) {
    14. log.info("start update fill ....");
    15. this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐)
    16. }
    17. }

    分页功能

    1.添加一个配置类。

    1. @Configuration
    2. public class MybatisPlusConfig {
    3. @Bean
    4. public MybatisPlusInterceptor mybatisPlusInterceptor() {
    5. MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    6. // 添加分页插件
    7. interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
    8. return interceptor;
    9. }
    10. }

    2. 在 service 层调用 selectPage(page, null)

    1. Page page = new Page<>(index, num);
    2. Page employeePage = employeeMapper.selectPage(page, null);

    Page的分页原理(MyBatis版):本质是使用了 threadlocal,把 index 和 num 放入到 threadlocal里,然后动态拼接 mysql 语句。

    输入:第几页index、每页展示几个数据 num。

    返回:这几个数据、当前页、总页数、总数据条数、是否有上一页、是否有下一页

    配置过程

    1. 在xml中引入MP和mysql依赖。
    2. 在yml配置文件配置数据库的驱动、url、用户名、密码。设置MP的自动驼峰命名。
    3. 在引导类中加入@MapperScan("包名")
    4. Mapper接口需要 extends BaseMapper<实体类>
    5. 在Service层注入Mapper,直接调用方法
    6. 增加驼峰命名自动映射:创建一个MybatisConfig配置类,并注入一个bean方法。【Mybatis-puls】使用Map作为返回对象下划线自动转成驼峰_mybatis下划线自动转驼峰映射-CSDN博客

    遇到问题

    1. “找不到Mapper Bean”:MyBatis-Plus3 只支持 jdk8,所以需要从把之前的 jdk7 改成 jdk8。而且@MapperScan()填的是包名,不用具体到类名。
    2. “无效的目标发行版”:IDEA 在创建项目中编译器没有 18 的版本。调试过程:
      1. 1查看设置中的版本是否对应(byte version = 8)IDEA 报错,无效的源发行版 无效的目标发行版 解决方法_无效的目标发行版: 20-CSDN博客
      2. 修改 maven 的 xml 配置文件(没用)maven在setting配置文件中指定jdk版本——以jdk1.8为例_setting.xml设置jdk-CSDN博客 
      3. 项目的 xml 文件。最后发现需要修改项目的 xml 文件 - maven 插件 - 编译器版本。
    3. “com.mysql.cj.jdbc.Driver cannot resorve”:删除mysql版本,让maven自动管理mysql版本。

    以上所有参考:

    MyBatis-Plus(详细)-CSDN博客

    学习MyBatis-Plus3这一篇就够了_mybatisplus3-CSDN博客

  • 相关阅读:
    allatori8.0文档翻译-第十四步:Eclipse IDE插件
    Perl 语言开发(十二):面向对象编程,深入理解与实践
    :style在列表中动态配置背景图片
    虚拟偶像主播的大致现状,数字人技术现状
    算法:(贪心算法)-独木舟问题
    设计模式系列详解 -- 观察者模式
    Linux常用命令
    (二)Java 线程
    快速了解 Kubernetes 的架构及特性
    d2-crud-plus 使用小技巧(六)—— 表单下拉选择 行样式 溢出时显示异常优化
  • 原文地址:https://blog.csdn.net/weixin_47173826/article/details/138165781