《MyBatis-Plus》和springboot集成及新版笔记和旧版差别(简化版本)

简介:MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

 

 

 特性

  •  
  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

支持数据库 

  •  
  • MySQL,Oracle,DB2,H2,HSQL,SQLite,PostgreSQL,SQLServer,Phoenix,Gauss ,ClickHouse,Sybase,OceanBase,Firebird,Cubrid,Goldilocks,csiidb

  • 达梦数据库,虚谷数据库,人大金仓数据库,南大通用(华库)数据库,南大通用数据库,神通数据库,瀚高数据库

快速开始 

 1.安装

全新的 MyBatis-Plus 3.0 版本基于 JDK8,提供了 lambda 形式的调用,所以安装集成 MP3.0 要求如下:

  • mysql 5.7
  • JDK 8+
  • Maven 
  • springboot

maven: 

<!--mybatis-plus-->
    <dependency>
         <groupId>com.baomidou</groupId>
         <artifactId>mybatis-plus-boot-starter</artifactId>
         <version>3.5.0</version>
    </dependency>
<!--mysql-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<!--lombok-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

2. 建表:根据官网具体用表(如图)

 

3.使用idea创建springboot的项目(版本搞得mysql需要添加时区)

  1. application.properties中添加mysql连接的基本配置 
    #数据库的基本连接
    spring.datasource.name= root
    spring.datasource.password=123456
    spring.datasource.url=jdbc:mysql://localhost:3306/数据库名?userSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    #mybatis-plus日志输出 输出台输出日志StdOutImpl 其他日志导入依赖
    mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
  2. 编写对应的实体类pojo

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class User {
        private Long id;
        private String name;
        private Integer age;
        private String email;
    
  3.  编写mapper接口并继承BaseMapper<实体类>

    @Component
    public interface userMapper extends BaseMapper<user> {
    
    }

    BaseMapper<user>中封装了多种数据库操作的方法,所以mapper中不需要编写方法简单的crud等不需要xml配置文件

  4. 在主启动类上加上注解

    @MapperScan("mapper包的具体路径")
    @SpringBootApplication
    public class MybatisPlusApplication {
        public static void main(String[] args) {
            SpringApplication.run(MybatisPlusApplication.class, args);
        }
    
    }
    
  5. 测试类测试成果

 

@SpringBootTest
class MybatisPlusApplicationTests {

    //继承了BaseMapper, 所有的方法都来自己父类
    //我们也可以编写自己的扩展方法
    @Autowired
    private UserMapper userMapper;

    @Test
    void contextLoads() {
        //参数是一个Wrapper , 条件构造器,这里我们先不用 --null
        //查询全部用户
        List<User> users = userMapper.selectList(null);
        users.forEach(System.out::println);
    }
}

 

 就此简单的环境已经搭载好了

配置日志方便观察sql语

#mybatis-plus日志输出 输出台输出日志StdOutImpl 其他日志导入依赖
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

简单的crud可以通过官网上的方法了解使用 

 高级用法

  1. 字段填充 

创建时间 . 修改时间! 这些个操作都是自动化完成的,我们不希望手动更新!

阿里巴巴开发手册:所有的数据库表:gmt_create .gmt_modified几乎所有的表都要配置上!而且需要自动化!

1.在表中新增字段 create_time , update_time

 2.添加对应字段和注解

//    自动填充字段(插入时填充)同样有删除等。编写处理器来处理注解
//    (修改时填充)
//    DEFAULT,
//    INSERT,
//    UPDATE,
//    INSERT_UPDATE;
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)

 3.编写处理器来处理这个注解

@Slf4j
@Component
public class myHandler implements MetaObjectHandler {
    @Override
    //插入时的注解跟新策略
    public void insertFill(MetaObject metaObject) {
        log.info("插入策略");
        // 设置字段的值
        /** 三个参数
         * String fieldName :需要处理的字段名
         * Object fieldVal : 想要插入的字段值
         * MetaObject metaObject :给哪个数据处理
         */
        this.setFieldValByName("createTime",new Date(),metaObject);
        
    }
    @Override
    //修改时的注解跟新策略
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTimes",new Date(),metaObject);
    }

在insert和update时就会添加相应的时间

 

 2.乐观锁

  1.    乐观锁的实现         
  • 取出记录时,获取当前 version
  • 更新时,带上这个version
  • 执行更新时, set version = newVersion where version = oldVersion
  • 如果version不对,就更新失败

    2.给数据库中增加version字段

   设置默认值为1

   3.添加注解

@Version //乐观锁Version注解 
private Integer version;

 4.配置组件

   新建MPconfig类

   新版

@EnableTransactionManagement//开启事务
@Configuration
public class MPconfig {
    // 分页插件
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //乐观锁插件
        return interceptor;
    }



}

 旧版

@Configuration
public class MyBatisPlusConfig {
    // 注册乐观锁插件
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor(){
        return new OptimisticLockerInterceptor();
    }
}

 当使用新版MP时,旧版的类已经被封装过时了

增加过配置组件后就可以使用了

备注:查询时要触发乐观锁注意点

@Test
    public void versionsuccess(){
        //1、查询用户信息
        user user1 = userMapper.selectById(3);
        //2.修改用户信息
        user1.setAge(50);
        user1.setEmail("2689244@qq.com");
        userMapper.updateById(user1);
        //使用乐观锁要先查出要施加乐观所的用户,然后在查询到的user对象上进行修改,从而改变version的值
    }

3.逻辑删除:

  1. 物理删除 :从数据库中直接移除
    逻辑删除 :再数据库中没有被移除,而是通过一个变量来让他失效!deleted = 0 => deleted = 1
  2. 数据库新建deleted字段数据库默认为0
  3. 实体类增加字段和注解
    @TableLogic //逻辑删除 
    private Integer deleted;
  4. 在yaml中添加配置

    mybatis-plus:
      global-config:
        db-config:
          logic-delete-value: 1 # 逻辑已删除值(默认为 1)
          logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
    

  5. 旧版:需要在MPconfig中添加组件

 

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

    6.新版:不需要添加

 备注:逻辑删除实则是update操作:把deleted=0改为1,当select是拼接deleted=0,修改后的查不到

4.分页

  1. MPconfig添加配置 

  新版:在原来的bean中添加相应的配置类

@EnableTransactionManagement//开启事务
@Configuration
public class MPconfig {
    // 分页插件
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //乐观锁插件
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        // 添加分页插件
        PaginationInnerInterceptor pageInterceptor = new PaginationInnerInterceptor();
        // 设置请求的页面大于最大页后操作,true调回到首页,false继续请求。默认false
        pageInterceptor.setOverflow(false);
        // 单页分页条数限制,默认无限制
        pageInterceptor.setMaxLimit(500L);
        // 设置数据库类型
        pageInterceptor.setDbType(DbType.MYSQL);
        interceptor.addInnerInterceptor(pageInterceptor);
        return interceptor;
    }
    
}

 

 旧版:

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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值