简介
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 操作智能分析阻断,也可自定义拦截规则,预防误操作
支持数据库
任何能使用 MyBatis 进行 CRUD, 并且支持标准 SQL 的数据库,具体支持情况如下,如果不在下列表查看分页部分教程 PR 您的支持。
MySQL,Oracle,DB2,H2,HSQL,SQLite,PostgreSQL,SQLServer,Phoenix,Gauss ,ClickHouse,Sybase,OceanBase,Firebird,Cubrid,Goldilocks,csiidb
达梦数据库,虚谷数据库,人大金仓数据库,南大通用(华库)数据库,南大通用数据库,神通数据库,瀚高数据库
支持文档
https://baomidou.com/pages/24112f/#
快速开始
#配置
maven
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-generator -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.0</version>
</dependency>
yml
spring:
profiles:
active: dev
datasource:
dynamic:
datasource:
url: jdbc:mysql://localhost:3306/cas?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: org.gjt.mm.mysql.Driver
druid:
test-on-borrow: false
test-while-idle: true
validation-query: SELECT 1
timeBetweenEvictionRunsMillis: 30000
stat-view-servlet:
# 是否启用StatViewServlet(监控页面)false为不启动
enabled: true
url-pattern: '/druid/*'
# IP白名单(没有配置或者为空,则允许所有访问)
# allow: 172.19.23.158
# IP黑名单 (存在共同时,deny优先于allow)
# deny: 192.168.0.0
# 禁用HTML页面上的“Reset All”功能
reset-enable: false
# 登录名
login-username: admin
# 登录密码
login-password: admin
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
logic-delete-value: 1
logic-not-delete-value: 0
mapperLocations: classpath:mapper/*.xml
server:
port: 8080
logging:
level:
com.baomidou.mybatisplus.samples: debug
handler 插入时的填充修改策略
@Slf4j
@Component
public class MyDataHandler implements MetaObjectHandler {
//插入时的填充策略
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insertFill");
this.setFieldValByName("createTime",new Date(),metaObject);
this.setFieldValByName("updateTime",new Date(),metaObject);
}
//修改时的策略
@Override
public void updateFill(MetaObject metaObject) {
log.info("start updateFill");
this.setFieldValByName("updateTime",new Date(),metaObject);
}
}
mybatispuls config 插件
@MapperScan("com.mybatisplus.demo.blog.mapper")
@EnableTransactionManagement
@Configuration
public class MyBatisPlusConfig {
//事务乐观锁插件
@Bean
public MybatisPlusInterceptor mybatisPlusTransactionInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return interceptor;
}
//分页插件
@Bean
public MybatisPlusInterceptor mybatisPlusPageInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
interceptor.addInnerInterceptor(paginationInnerInterceptor);
return interceptor;
}
//逻辑删除插件
@Bean
public MybatisPlusInterceptor mybatisPlusDeleteInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
return interceptor;
}
}
mybatispuls 逆向工程 自动生成代码 controller,servicer,xml,dao,entity
public class FastAutoGeneratorTest {
/**
* 执行 run
*/
public static void main(String[] args) throws SQLException {
FastAutoGenerator.create("jdbc:mysql://localhost:3306/cas?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true", "root", "123456")
.globalConfig(builder -> {
builder.author("drm") // 设置作者
.enableSwagger() // 开启 swagger 模式
.fileOverride() // 覆盖已生成文件
.dateType(DateType.TIME_PACK)
.commentDate("yyyy-MM-dd")
.outputDir("D:\\JetBrains\\ideaTest\\JavaTest\\mybatis-plus-demo\\src\\main\\java\\"); // 指定输出目录
})
.packageConfig(builder -> {
builder.parent("com.mybatisplus.demo") // 设置父包名
.moduleName("blog") // 设置父包模块名
.entity("entity")
.service("service")
.mapper("mapper")
.controller("controller")
.serviceImpl("service.impl")
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D:\\JetBrains\\ideaTest\\JavaTest\\mybatis-plus-demo\\src\\main\\resources\\mapper")); // 设置mapperXml生成路径
})
.strategyConfig(builder -> {
builder.addInclude("sys_user") // 设置需要生成的表名
.addTablePrefix("t_", "c_")// 设置过滤表前缀
.entityBuilder()
.enableLombok()
.enableTableFieldAnnotation()
.versionColumnName("version")
.versionPropertyName("version")
.logicDeleteColumnName("status")
.logicDeletePropertyName("status")
.addTableFills(new Column("create_time", FieldFill.INSERT))
.addTableFills(new Column("update_time",FieldFill.INSERT_UPDATE))
.idType(IdType.AUTO).formatFileName("%sEntity")
.controllerBuilder().enableRestStyle().enableRestStyle().formatFileName("%sController")
.serviceBuilder().formatServiceFileName("%sService").formatServiceImplFileName("%sServiceImpl")
.mapperBuilder().superClass(BaseMapper.class).formatMapperFileName("%sDao").enableMapperAnnotation().formatXmlFileName("%sXml")
;
})
.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
.execute();
}
}