简介
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 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 操作智能分析阻断,也可自定义拦截规则,预防误操作
SpringBoot整合
该部分主要针对通过SpringBoot来构建MybatisPlus的环境搭建,以方便于日后的使用。
-
新建SpringBoot项目,添加需要的依赖:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!-- mybatisPlus 核心库 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.1.0</version> </dependency> <!-- 阿里数据库连接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.6</version> </dependency> <!-- MybatisPlus 代码生成器 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.2.0</version> </dependency> <!-- 模板引擎 --> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.0</version> </dependency>
-
添加配置文件application.yml
# 配置端口 server: port: 8088 spring: # 配置数据源 datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/stu?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true username: root password: 305118 type: com.alibaba.druid.pool.DruidDataSource # mybatis-plus相关配置 mybatis-plus: # xml扫描,多个目录用逗号或者分号分隔(告诉 Mapper 所对应的 XML 文件位置) mapper-locations: classpath*:/mapper/**/*.xml global-config: db-config: #主键类型 AUTO:"数据库ID自增" INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID"; id-type: auto #字段策略 IGNORED:"忽略判断" NOT_NULL:"非 NULL 判断") NOT_EMPTY:"非空判断" field-strategy: NOT_EMPTY #数据库类型 db-type: MYSQL #驼峰下划线转换 column-underline: true logic-delete-value: -1 logic-not-delete-value: 0 configuration: # 是否开启自动驼峰命名规则映射:从数据库列名到Java属性驼峰命名的类似映射 map-underscore-to-camel-case: true # 如果查询结果中包含空值的列,则 MyBatis 在映射的时候,不会映射这个字段 call-setters-on-nulls: true # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
-
mybatisplus分页插件MybatisPlusConfig.java:
/** * 配置分页插件 */ @Configuration public class MybatisPlusConfig { /** * 分页插件 */ @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } }
-
mybatisplus自动生成代码GeneratorCodeConfig.java:
/** * mybatisplus 自动生产代码 */ public class GeneratorCodeConfig { public static void main(String[] args) { // 1、创建代码生成器 AutoGenerator mpg = new AutoGenerator(); // 2、全局配置 GlobalConfig gc = new GlobalConfig(); String projectPath = System.getProperty("user.dir"); gc.setOutputDir(projectPath + "/src/main/java"); gc.setAuthor("twy"); //生成后是否打开资源管理器 gc.setOpen(false); //重新生成时文件是否覆盖 gc.setFileOverride(false); //去掉Service接口的首字母I gc.setServiceName("%sService"); //主键策略 gc.setIdType(IdType.ID_WORKER_STR); //定义生成的实体类中日期类型 gc.setDateType(DateType.ONLY_DATE); //实体开启Swagger2注解 gc.setSwagger2(false); mpg.setGlobalConfig(gc); // 3、数据源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setUrl("jdbc:mysql://localhost:3306/stu?serverTimezone=GMT%2B8"); dsc.setDriverName("com.mysql.cj.jdbc.Driver"); dsc.setUsername("root"); dsc.setPassword("305118"); dsc.setDbType(DbType.MYSQL); mpg.setDataSource(dsc); // 4、包配置 PackageConfig pc = new PackageConfig(); pc.setModuleName("mybatisplus"); //模块名 //包 com.twy.mybatisplus pc.setParent("com.twy"); //包 com.twy.mybatisplus.controller pc.setController("controller"); pc.setEntity("entity"); pc.setService("service"); pc.setMapper("dao"); mpg.setPackageInfo(pc); // 5、策略配置 StrategyConfig strategy = new StrategyConfig(); //表名 strategy.setInclude("student_info"); //数据库表映射到实体的命名策略 strategy.setNaming(NamingStrategy.underline_to_camel); //生成实体时去掉表前缀 strategy.setTablePrefix(pc.getModuleName() + "_"); //数据库表字段映射到实体的命名策略 strategy.setColumnNaming(NamingStrategy.underline_to_camel); // lombok 模型 @Accessors(chain = true) setter链式操作 strategy.setEntityLombokModel(true); //restful api风格控制器 strategy.setRestControllerStyle(true); //url中驼峰转连字符 strategy.setControllerMappingHyphenStyle(true); mpg.setStrategy(strategy); // 6、执行 mpg.execute(); } }
这里代码生成器也可以参考官网的:代码生成器
- 使用代码自动生成器生成后的目录结构:
- 我们可以在controller写一个接口简单的测试一下:
@RestController @RequestMapping("/mybatisplus/studentinfo") public class StudentInfoController { @Autowired private StudentInfoService studentInfoService; @GetMapping("/getInfo") public List<StudentInfo> getInfo(){ List<StudentInfo> studentInfos = studentInfoService.list(); return studentInfos; } }
在这里我们就使用了MybatisPlus在Service CRUD 封装的IService接口:
以上关于MybatisPlus的基本环境搭建就到这里,如果还是不怎么明白可以去官网看看学学
CRUD接口
我们在使用这个框架的使用可以直接去官网查看文档:CRUD接口
条件构造器
这一块,在日常的开发中我们写一些查询用的很多,如果记不住的不清楚的可以直接去官网查看:条件构造器
结束
以上这些在我们日常开发中用的比较多,但是框架里还有一些其它的知识这里就不一一阐述了,可以直接去官网学习一下文档。