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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【Spring Boot 快速入门】九、Spring Boot集成MyBatis-Plus

前言


  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官网查询了解更多。


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
7
分享
相关文章
SpringBoot 通过集成 Flink CDC 来实时追踪 MySql 数据变动
通过详细的步骤和示例代码,您可以在 SpringBoot 项目中成功集成 Flink CDC,并实时追踪 MySQL 数据库的变动。
216 43
springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析
通过本文,我们详细介绍了如何在 Spring Cloud 和 Spring Boot 中集成 Nacos 进行服务注册和配置管理,并对 Nacos 的源码进行了初步分析。Nacos 作为一个强大的服务注册和配置管理平台,为微服务架构提供
237 14
springBoot集成websocket实时消息推送
本文介绍了如何在Spring Boot项目中集成WebSocket实现实时消息推送。首先,通过引入`spring-boot-starter-websocket`依赖,配置`WebSocketConfig`类来启用WebSocket支持。接着,创建`WebSocketTest`服务器类,处理连接、消息收发及错误等事件,并使用`ConcurrentHashMap`管理用户连接。最后,前端通过JavaScript建立WebSocket连接,监听消息并进行相应处理。此方案适用于需要实时通信的应用场景,如聊天室、通知系统等。
SpringBoot集成Tomcat、DispatcherServlet
通过这些配置,您可以充分利用 Spring Boot 内置的功能,快速构建和优化您的 Web 应用。
68 21
SpringBoot是如何简化Spring开发的,以及SpringBoot的特性以及源码分析
Spring Boot 通过简化配置、自动配置和嵌入式服务器等特性,大大简化了 Spring 应用的开发过程。它通过提供一系列 `starter` 依赖和开箱即用的默认配置,使开发者能够更专注于业务逻辑而非繁琐的配置。Spring Boot 的自动配置机制和强大的 Actuator 功能进一步提升了开发效率和应用的可维护性。通过对其源码的分析,可以更深入地理解其内部工作机制,从而更好地利用其特性进行开发。
56 6
详细介绍SpringBoot启动流程及配置类解析原理
通过对 Spring Boot 启动流程及配置类解析原理的深入分析,我们可以看到 Spring Boot 在启动时的灵活性和可扩展性。理解这些机制不仅有助于开发者更好地使用 Spring Boot 进行应用开发,还能够在面对问题时,迅速定位和解决问题。希望本文能为您在 Spring Boot 开发过程中提供有效的指导和帮助。
66 12
SpringBoot项目打包成war包
通过上述步骤,我们成功地将一个Spring Boot应用打包成WAR文件,并部署到外部的Tomcat服务器中。这种方式适用于需要与传统Servlet容器集成的场景。
36 8
Spring Boot 两种部署到服务器的方式
本文介绍了Spring Boot项目的两种部署方式:jar包和war包。Jar包方式使用内置Tomcat,只需配置JDK 1.8及以上环境,通过`nohup java -jar`命令后台运行,并开放服务器端口即可访问。War包则需将项目打包后放入外部Tomcat的webapps目录,修改启动类继承`SpringBootServletInitializer`并调整pom.xml中的打包类型为war,最后启动Tomcat访问应用。两者各有优劣,jar包更简单便捷,而war包适合传统部署场景。需要注意的是,war包部署时,内置Tomcat的端口配置不会生效。
449 17
Spring Boot 两种部署到服务器的方式
springboot自动配置原理
Spring Boot 自动配置原理:通过 `@EnableAutoConfiguration` 开启自动配置,扫描 `META-INF/spring.factories` 下的配置类,省去手动编写配置文件。使用 `@ConditionalXXX` 注解判断配置类是否生效,导入对应的 starter 后自动配置生效。通过 `@EnableConfigurationProperties` 加载配置属性,默认值与配置文件中的值结合使用。总结来说,Spring Boot 通过这些机制简化了开发配置流程,提升了开发效率。
87 17
springboot自动配置原理
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等