springboot集成mybatisPlus

1、入门教程

1.1、引入依赖

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.3</version>
        <relativePath/>
    </parent>


    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>11</java.version>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <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.4.3</version>
        </dependency>

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

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

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

1.2、编写实体类

@Data
@TableName("userinfo")
public class UserInfo {
    private  int id;
    private  String username;
    private  String password;

}

1.3、编写mapper接口

@Component
public interface UserMapper extends BaseMapper<UserInfo> {

}
//mapper接口需要集成BaseMapper<T>接口,集成后,我们不用再写增删改查改查接口,BaseMapper接口里面提供了基本的增删改查接口

1.4、添加配置文件

//配置文件的里需要配数据库的连接信息,由于没有mapper.xml,所有不用配加载配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/platform?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=*******
spring.datasource.password=*****

#mybatis日志,运行时可以打印执行的sql
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

2、mp主键生成

2.1、主键自动生成使用

2.1、实体类属性添加注解(不添加默认使用雪花算法)
       //@TableId(type = IdType.ID_WORKER) //mp自带策略,生成19位值,数字类型使用这种策略,比如long
       //@TableId(type = IdType.ID_WORKER_STR) //mp自带策略,生成19位值,字符串类型使用这种策略
       private Long id; //

2.2、属性的类型:
      实体类:Long
      数据库:bigint

2.2、mp主键生成策略

在这里插入图片描述

2.3、其他主键生成策略

在这里插入图片描述

3、mp时间自动填充

 3.1、首先在实体类增加TableField注解
       @TableField(fill = FieldFill.INSERT)
        private Date createTime;//java.util.Date

       @TableField(fill = FieldFill.INSERT_UPDATE)
       private Date updateTime;//java.util.Date
   
 3.2、数据库中字段名(需要写成下面的形式,不然mp无法识别)
       create_time
       update_time
 
 3.3、编写一个类,实现MetaObjectHandler接口

@Component
public class UserHandler implements MetaObjectHandler {

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

    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
}

4、mp实现乐观锁

4.1、乐观锁的实现方式:
     通过版本号实现,从数据库获取的数据的时候,同时获取版本号,在提交数据的时候,对比数据现在的版本号和最开始获取的版本号是否一致,如果一直则提交成功,不一致提交失败。

4.2、乐观锁解决的问题:
     数据丢失更新问题,AB同时从数据库获取数据进行修改,A先提交,B后提交,B的数据会覆盖A的数据,正确的操作步骤是,A提交以后,B应该在A的数据上做修改之后再提交,而不是在最开始获取的数据上修改提交。

4.3、mp乐观锁的用法

  4.3.1、在数据中增加version字段
  
  4.3.2、在实体类中增加version,并加上@Version注解
          @Version
          private Integer version;
          
  4.3.3、增加配置类(数据库包扫描,也可以配置在配置类上)
       
         @Configuration
         public class MpConfig {
              //乐观锁插件
         @Bean(新版3.4.3,jdk11)
         public MybatisPlusInterceptor mybatisPlusInterceptor(){
         MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
         mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
         return mybatisPlusInterceptor;

        
        // 乐观锁插件(旧版3.0.5,jdk8)
         @Bean
         public OptimisticLockerInterceptor optimisticLockerInterceptor () {
         return new OptimisticLockerInterceptor();
    }
 
}

 4.3.4、测试乐观锁
          @Test
    public void  testUser(){
        UserInfo userInfo=userMapper.selectById(1);
        userInfo.setPassword("123");
        userMapper.updateById(userInfo);
    }
     //先查询再修改

在这里插入图片描述
MySQL数据库隔离级别
在这里插入图片描述

5、mp的查询

5.1、简单查询(根据id查询)

     
     //根据id查询
     UserInfo userInfo=userMapper.selectById(1)  

5.2、分页查询

5.2.1、添加配置类

      @Bean
       public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
    
5.2.2、测试分页查询

      @Test
    public void testPage() {
        //1 创建page对象
        //传入两个参数:当前页 和 每页显示记录数
        Page<UserInfo> page = new Page<>(1,2);
        //调用mp分页查询的方法
        //调用mp分页查询过程中,底层封装
        //把分页所有数据封装到page对象里面
        //selectPage(page,null)方法,第一个参数是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()); //下一页,返回值是boolen,有下一页就是ture
        System.out.println(page.hasPrevious()); //上一页

    }

6、删除

6.1、物理删除(根据id删除、根据id进行批量删除)

        userMapper.deleteById(1); 
        userMapper.deleteBatchIds(new ArrayList<>());//根据id批量删除

6.2、逻辑删除(回收站)

   6.2.1、数据库中增加逻辑删除字段
           deleted

   6.2.2、实体类
           @TableLogic //0表示不删除,1表示删除
           private Integer deleted
           
   6.2.3、添加配置(高版本无需添加配置)
     @Bean
     public ISqlInjector sqlInjector() {
     return new LogicSqlInjector();
   
   6.2.4、 执行逻辑删除
        userMapper.deleteById(1);

   6.2.5、执行了逻辑删除后,再次查询时,mp只查没有删除的
}

7、多条件复杂查询

在这里插入图片描述

        //创建QueryWrapper对象
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        
        //指定要查询的列
        wrapper.select("id","name");
        List<User> users = userMapper.selectList(wrapper);

8、sql性能分析插件

8.1、添加配置类(低版本可以用)

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

     #环境设置:dev、test、prod
     spring.profiles.active=dev

9、mp对service层的封装

//9.1、首先写一个service接口

public interface EduTeacherService extends IService<EduTeacher> {

}


//9.2、写接口的实现类同时,实现类继承ServiceImpl
//继承ServiceImpl,需要传入mapper对象和操作的实体类对象

public class EduTeacherServiceImpl extends ServiceImpl<EduTeacherMapper, EduTeacher> implements EduTeacherService {

}


//9.3、mp提供的service层接口

     //查询所有
      List<T> list(Wrapper<T> queryWrapper) 
     

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值