这是我参与8月更文挑战的第17天,活动详情查看:8月更文挑战
收录专栏
前言
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全栈架构师】维护者,欢迎关注阅读交流。
好了,感谢您的阅读,希望您喜欢,如对您有帮助,欢迎点赞收藏。如有不足之处,欢迎评论指正。下次见。