Spring boot + MyBatis-Plus3

本文介绍了如何在服务层使用MyBatis-Plus进行增删改查操作,包括ID生成策略、注解自动填充、MetaObjectHandler处理、分页功能的配置和常见问题解决。重点涵盖了自动生成功能、自动填充、元对象处理器以及Maven和MySQL驱动的管理。
摘要由CSDN通过智能技术生成

学习

增删改查

在 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)。

添加注释: 

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

自动填充功能

@TableField(fill = FieldFill.INSERT)

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

1. 添加注释: 

    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

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

@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    //插入时的填充策略
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start intsert fill ....");
        this.strictInsertFill(metaObject,"createTime", LocalDateTime.class,LocalDateTime.now());// 起始版本 3.3.0(推荐使用)
        this.strictInsertFill(metaObject,"updateTime", LocalDateTime.class,LocalDateTime.now());// 起始版本 3.3.0(推荐使用)

    }

    //更新时的填充策略
    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start update fill ....");
        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐)
    }
}

分页功能

1.添加一个配置类。

@Configuration
public class MybatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 添加分页插件
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }

}

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

    Page<Employee> page = new Page<>(index, num);
    Page<Employee> 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博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值