MybatisPlus笔记

MybatisPlus没有对Mybatis做功能上的优化,只是简化了开发。

1、创建mybatis_plus项目步骤

①创建数据库,创建数据库表,添加数据,用于mp操作。

②创建springboot工程,2.2.1版本。

③pom.xml引入相关依赖。

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- mybatis-plus -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.0.5</version>
    </dependency>

    <!-- mysql -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.20</version>
    </dependency>

    <!-- lombok 用来简化实体类 -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
</dependencies>

④安装lombok插件。

⑤配置application.properties文件(数据库)。

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=

⑥编写代码。

2、使用mp插入数据

mp 会自动生成 id(主键)值,数值为19位。mp 的 insert 方法返回的是影响的行数。

// 添加操作
    @Test
    public void addUser() {
        User user = new User();
        user.setName("jianjian");
        user.setAge(23);
        user.setEmail("jianjian@qq.com");

        // insert 为影响的行数; mp 自动生成 id(主键),19位
        int insert = userMapper.insert(user);
        System.out.println("insert: " + insert);
    }

3、主键策略

①数据库自增长序列或字段。优点是排序方便。缺点是需要获取上一张表的最后一个数据的 id 值,麻烦。

②UUID:每次生成随机唯一的值。优点是不需要获取上一张表的最后一个数据的 id 值。缺点是排序不方便。

③redis 生成 id。redis 是单线程的,可以使用 redis 集群来获取更高的吞吐量。假设一个集群中有5 台 redis,可以初始化每台redis的值分别为1,2,3,4,5,然后步长都是 5,结果如下图。

④mybatis_plus 自带策略:snowflake 算法。

4、主键类型代码解释:TableId(type = IdType.AUTO)

①AUTO:自动增长。

②INPUT:自己设置id值。

③NONE:没有生成策略,自己输入id值。

④UUID:生成随机唯一id值。

⑤ID_WORKER:mp 自带策略,生成 19 位值,数字类型使用这种策略。

⑥ID_WORKER_STR:mp 自带策略,生成 19 位值,字符串类型使用这种策略。

5、mp实现自动填充

①在自动填充属性上面加上注解:TableField(fill = ..)。

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

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

②创建类(handler 包,不要忘记在类上面加上 Component 注解),实现接口 MetaObjectHandler,实现接口里面的方法。

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    // 使用 mp 实现添加操作,该方法会执行
    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createTime", new Date(), metaObject);
        this.setFieldValByName("updateTime", new Date(), metaObject);
        this.setFieldValByName("version", 1, metaObject);
    }

    // 使用 mp 实现修改操作,该方法会执行
    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }

}

6、mp实现乐观锁

①表中添加字段 version,对应实体类添加版本号属性。

②在实体类版本号属性添加注解(@Version)。

@Version
@TableField(fill = FieldFill.INSERT)
private Integer version;

③配置乐观锁插件,建议专门写一个配置类。

// 乐观锁插件
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }

③测试。在修改之前,MybatisPlus会判断根据 id 得到的版本号和数据库中的版本号是否一致,如果一致就会修改成功,否则修改失败。

// 测试乐观锁
    @Test
    public void testOptimisticLocker() {
        // 根据 id 查询数据
        User user = userMapper.selectById(1522543846976765953L);
        // 进行修改
        user.setAge(200);
        userMapper.updateById(user);
    }

7、mp实现分页

①配置分页插件。

// 分页插件
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }

②编写代码。

// 分页查询
    @Test
    public void testPage() {
        // 创建 page 对象
        // 传入两个参数:当前页 和 每页显示记录数
        Page<User> page = new Page<>(1, 3);

        // 调用 mp 分页查询的方法
        // 调用 mp 分页查询过程中,底层封装
        // 把分页所有数据封装到 page 对象里面
        userMapper.selectPage(page, null);

        // 通过 page 对象获取分页数据
        System.out.println(page.getCurrent()); // 当前页
        System.out.println(page.getRecords()); // 每页数据 list 集合
        System.out.println(page.getSize()); // 每页显示记录数
        System.out.println(page.getTotal()); // 总记录数
        System.out.println(page.getPages()); // 总页数

        System.out.println(page.hasNext()); // 是否有下一页
        System.out.println(page.hasPrevious()); // 是否有上一页
    }

8、删除

①物理删除:真实删除,将对应数据从数据库中删除,数据库表中再也没有此条数据。

②逻辑删除:假删除,将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录。

逻辑删除步骤:

第一步:表中添加逻辑删除字段,对应实体类添加属性,属性添加注解(TableLogic)。

@TableLogic // 逻辑删除
private Integer deleted;

第二步:配置逻辑删除的插件。

// 逻辑删除插件
    @Bean
    public ISqlInjector sqlInjector() {
        return new LogicSqlInjector();
    }

第三步:测试。如果配置成功,那么执行下面的删除方法时,只会把数据库中的相应数据的 deleted 字段改为 1。

// 测试逻辑删除
    @Test
    public void testDeleteLogic() {
        int result = userMapper.deleteById(2L);
        System.out.println(result);
    }

 补充:deleted 字段默认没有删除时为 0,删除时为 1。也可以通过将下面的代码写到配置文件当中,自己设定删除和未删除的值。

mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0

9、性能分析

 性能分析拦截器,用于输出每条SQL语句及其执行时间。SQL性能执行分析,开发环境使用,超过指定时间,停止运行。有助于发现问题。

①配置插件。

/**
     * SQL 执行性能分析插件
     * 开发环境使用,线上不推荐。
     * maxTime:SQL 最大执行时间
     *
     * 三种环境
     *      dev:开发环境
     *      test:测试环境
     *      prod:生产环境
     */
    @Bean
    @Profile({"dev", "test"})
    public PerformanceInterceptor performanceInterceptor() {
        PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
        // ms,超过此处设置的时间则 SQL 不执行
        performanceInterceptor.setMaxTime(500);
        performanceInterceptor.setFormat(true);
        return performanceInterceptor;
    }

②在配置文件中设置开发环境。

spring.profiles.active=dev

③测试:例如执行添加操作,在idea中可以看到SQL语句以及执行时间。

10、 mp实现复杂条件查询

使用QueryWrapper构建条件。

// mp 实现复杂查询操作
    @Test
    public void testSelectQuery() {
        QueryWrapper<User> wrapper = new QueryWrapper<>();

        // ge(>=)、gt(>)、le(<=)、lt(<)、eq(=)、ne(!=)
//        wrapper.ge("age", 23);

        // between
//        wrapper.between("age", 20, 30);

        // like
//        wrapper.like("name", "dai");

        // last:拼接到SQL语句的最后
//        wrapper.last("limit 1");

        // 查询指定的列
        wrapper.select("id", "name");
        List<User> users = userMapper.selectList(wrapper);
        System.out.println(users);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis Plus 是一个基于 MyBatis 的增强工具,它简化了 MyBatis 的开发流程,提供了更多便捷的操作方式。下面是一些关于 MyBatis Plus 的笔记: 1. 引入依赖:在项目的 pom.xml 文件中,添加 MyBatis Plus 的依赖。可以参考官方文档获取最新的版本信息。 2. 配置数据源:在项目的配置文件中,配置数据库连接信息。可以使用 Spring Boot 的配置文件,也可以使用 MyBatis Plus 提供的配置类来配置数据源。 3. 定义实体类:创建实体类,并使用注解进行字段和表的映射关系的标记。可以使用 @TableName 注解标记表名,@TableId 注解标记主键,@TableField 注解标记字段等。 4. 编写 Mapper 接口:创建 Mapper 接口,并继承 BaseMapper 接口。无需编写 XML 文件,MyBatis Plus 会根据接口方法的命名规则自动生成 SQL。 5. 使用通用 CRUD 方法:MyBatis Plus 提供了一些通用的 CURD 方法,如 insert、update、delete、select 等,并支持分页查询和条件查询。 6. 高级查询功能:MyBatis Plus 还提供了一些高级查询功能,如动态 SQL、条件构造器、Wrapper 查询等。可以根据具体需求选择使用。 7. 分页查询:MyBatis Plus 支持分页查询,可以通过 PageHelper 来实现分页功能。可以在查询方法中传入 Page 对象,并在查询结果中获取分页相关信息。 8. 自动填充功能:MyBatis Plus 支持自动填充功能,可以在实体类中定义字段,使用注解 @TableField(fill = FieldFill.INSERT) 标记需要自动填充的字段。 9. 乐观锁功能:MyBatis Plus 支持乐观锁功能,可以在实体类中定义字段,使用注解 @Version 标记乐观锁字段。在更新操作时,会自动判断版本号是否一致。 以上是一些关于 MyBatis Plus 的笔记,希望对你有帮助!如果有更多问题,可以继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值