【Spring Boot 快速入门】九、Spring Boot集成MyBatis-Plus

860

这是我参与8月更文挑战的第17天,活动详情查看:8月更文挑战

收录专栏

Spring Boot 快速入门

Java全栈架构师

前言

  Mybatis在持久层框架中还是比较火的,经常在项目中需要创建很多的Bean,并在Xml中书写大量的sql语句进行CRUD。很多简单而频繁的SQL可以直接使用MyBatis-Plus去解决,下面就开始了解MyBatis-Plus。

初始MyBatis-Plus

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

MyBatis-Plus特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 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 操作智能分析阻断,也可自定义拦截规则,预防误操作。

  来源于MyBatis-Plus官网,欢迎大家补充更多的特点。

快速开始

依赖

  好了, MyBatis-Plus大体介绍已经完成了,大家也明白了MyBatis-Plus是为了简化新生代的农民工的码量而有的产物。本文将结合目前常用的Spring Boot进行项目开发,快速搭建一套Spring Boot集成MyBatis-Plus的简单Demo。   因为是基于Maven搭建的Spring Boot集成MyBatis-Plus的项目。所以首先是添加依赖,主要包含两部分依赖,依赖信息如下:

 <!--    mybatis-plus    -->
     <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>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.0</version>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.3.0</version>
        </dependency>
        <!--    mybatis-plus    -->

设置application.yml

  在 application.yml配置文件中添加MySql 数据库的相关配置:其中主要包含数据库的链接、用户名、用户密码、数据源类型,数据源驱动类名等基础信息。   当然也可以加入MyBatis-Plus的相关配置信息,

  • db-type: 数据库的类型信息mysql
  • id-type: 主键id的创建方式AUTO
  • logic-delete-field: dataStatus #全局逻辑删除字段值 3.3.0开始支持,详情看下面。
  • logic-delete-value: 0 # 逻辑已删除值(默认为 99)
  • logic-not-delete-value: 1 # 逻辑未删除值(默认为 1)
  • mapper-locations: 自动配置并扫描本地mapper.xml所在的文件路径,例如:sclasspath*:mapper/**/*.xml
  • typeAliasesPackage:自动配置并扫描本地SQL实体对象所在的包信息,例如: java.zhan.entity
  • typeEnumsPackage: 自动配置并扫描项目中使用的枚举信息所在的包,例如:java.zhan.enums;java.zhan.test.enums
spring:
  datasource:
    url: jdbc:p6spy:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
    username: admin
    password: 123456
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.p6spy.engine.spy.P6SpyDriver
    
mybatis-plus:
  global-config:
    db-config:
      db-type: mysql
      id-type: AUTO
      logic-delete-field: dataState  
      logic-delete-value: 0
      logic-not-delete-value: 1 
    banner: false
  mapper-locations: classpath*:mapper/**/*.xml
  typeAliasesPackage: java.zhan.entity
  typeEnumsPackage: java.zhan.enums;java.zhan.test.enums

分页

Spring boot方式项目的分页方式需要设置MybatisPlusConfig,其中注解MapperScan扫描mapper文件所在的包

@EnableTransactionManagement
@Configuration
@MapperScan("java.zhan.**.mapper")
public class MybatisPlusConfig {

    // 旧版
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false
        // paginationInterceptor.setOverflow(false);
        // 设置最大单页限制数量,默认 500 条,-1 不受限制
        // paginationInterceptor.setLimit(500);
        // 开启 count 的 join 优化,只针对部分 left join
        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
        return paginationInterceptor;
    }
    
    // 最新版
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
    
}


DemoMybatisPlusApplication

启动类中需要特别注意的是@MapperScan(value = "com.example.demo.mapper"),需要制定启动扫描包的路径。

@SpringBootApplication
@MapperScan(value = "com.example.demo.mapper")
public class DemoMybatisPlusApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoMybatisPlusApplication.class, args);
    }

}

测试

本文基于以上搭建的简单的Spring Boot集成MyBatis-Plus进行单元测试,主要测试有新增用户,查询用户,查询所有用户等。更多测试需要根据业务需要进行测试。

    /**
     * @MethodName: insertUser
     * @Description: 新增
     * @param 
     * @Return: void
     * @Author: JavaZhan @公众号:Java全栈架构师
     * @Date: 2020/6/20
     **/
    @Test
    void insertUser(){
        User user = new User();
        user.setUsername("gust");
        user.setName("测试");
        user.setCreatetime(new Date());
        user.setSalt(1+"");
        user.setPassword("1233123");
        user.setState(0);
        userService.save(user);
    }
    
    
    /**
     * @MethodName: getUserByUserName
     * @Description: 获取单个对象
     * @param 
     * @Return: void
     * @Author: JavaZhan @公众号:Java全栈架构师
     * @Date: 2020/6/20
     **/
    @Test
    void getUserByUserName() {
        QueryWrapper<User> quserQueryWrapper = new QueryWrapper<>();
        quserQueryWrapper.lambda().eq(User::getUserName,"admin");
        User user = userService.getOne(quserQueryWrapper);
        System.out.println(user);
    }

    /**
     * @MethodName: getAllUser
     * @Description: 获取所有的用户
     * @param
     * @Return: void
     * @Author: JavaZhan @公众号:Java全栈架构师
     * @Date: 2020/6/20
     **/
    @Test
    void getAllUser(){
        List<User> userList = userService.list();
        userList.forEach(user -> System.out.println(user));
    }
    

结语

  这样MyBatis-Plus与Spring Boot集成成功啦。MyBatis-Plus具有强大的功能,代码生成器、CRUD 接口、条件构造器、分页插件、 Sequence主键、自定义ID生成器、逻辑删除、通用枚举、字段类型处理器、自动填充功能、SQL注入器、执行SQL分析打印、数据安全保护、多数据源等更多的功能。大家可以参考MyBatis-Plus官网查询了解更多。

  作者介绍:【小阿杰】一个爱鼓捣的程序猿,JAVA开发者和爱好者。公众号【Java全栈架构师】维护者,欢迎关注阅读交流。

  好了,感谢您的阅读,希望您喜欢,如对您有帮助,欢迎点赞收藏。如有不足之处,欢迎评论指正。下次见。

推荐阅读:

【Spring Boot 快速入门】一、我的第一个Spring Boot项目启动啦!

【Spring Boot 快速入门】二、周末建立了Spring Boot专栏,欢迎学习交流

【Spring Boot 快速入门】三、Spring Boot集成MyBatis,可以连接数据库啦!

【Spring Boot 快速入门】四、Spring Boot集成JUnit

【Spring Boot 快速入门】五、Spring Boot集成Swagger UI

【Spring Boot 快速入门】六、Spring Boot集成Lombok

【Spring Boot 快速入门】七、Spring Boot集成Redis

【Spring Boot 快速入门】八、Spring Boot集成RabbitMQ