SpringBoot有多火,是有目共睹的,约定优于配置。不用写那么多配置,确实是爽多了。
Mybatis,半自动ORM框架,可以方便的自定义sql语句。但是要写的sql语句其实也挺多了(虽然有通用mapper),Mybatis-plus就为此诞生了,在Mybatis基础上加强并进一步封装有用的功能。
Mybatis-Plus文档
SpringBoot 加上 Mybatis-Plus ,双份的快乐……
官方的快速开始demo是h2数据库,还是比较复杂的。这里就写个简单的Demo
创建一个SpringBoot项目,这里就不累赘了,放一下关键的依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.examplegroupId>
<artifactId>pmtestartifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>jarpackaging>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>1.5.13.RELEASEversion>
parent>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
<java.version>1.8java.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<scope>runtimescope>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>2.2.0version>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
project>
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/pm?useSSL=false
driver-class-name: com.mysql.jdbc.Driver
username: root
password: 1234
mybatis-plus:
global-config:
#主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
id-type: 0
这样就可以了,应该是最简单的配置了
Mybatis-plus 提供了强大的代码生成器,可以快速生成各类代码,配置也不算复杂。
这里演示一下。
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(50) NOT NULL COMMENT '用户名称',
`age` int(2) NOT NULL COMMENT '用户年龄',
PRIMARY KEY (`id`)
)
很简单的一张表…方便演示。
引入依赖
<dependency>
<groupId>org.apache.velocitygroupId>
<artifactId>velocity-engine-coreartifactId>
<version>2.0version>
dependency>
<dependency>
<groupId>org.freemarkergroupId>
<artifactId>freemarkerartifactId>
<version>2.3.23version>
dependency>
具体Java代码
可以在/src/main/resources中加入Mybatis-Plus.properties配置文件
不过我觉得代码配置也不麻烦
public class MpGenerator {
public static void main(String[] args) {
GlobalConfig config = new GlobalConfig();
String dbUrl = "jdbc:mysql://localhost:3306/pm?useSSL=false";
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setDbType(DbType.MYSQL)
.setUrl(dbUrl)
.setUsername("root")
.setPassword("1234")
.setDriverName("com.mysql.jdbc.Driver");
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig
.setCapitalMode(true)
.setEntityLombokModel(false)
.setDbColumnUnderline(true)
.setNaming(NamingStrategy.underline_to_camel);
config.setActiveRecord(false)
.setEnableCache(false)
.setAuthor("admin")
// 这里就直接输出到项目里面,不用再复制进来
.setOutputDir("pmtest\\src\\main\\java")
.setFileOverride(true)
.setServiceName("%sService");
new AutoGenerator().setGlobalConfig(config)
.setDataSource(dataSourceConfig)
.setStrategy(strategyConfig)
.setPackageInfo(
new PackageConfig()
.setParent("com.example.pmtest")
.setController("controller")
.setEntity("entity")
).execute();
}
}
具体的配置 代码生成器
使用注解的话,不要忘记加上 @MapperScan 注解
MyBatis-Plus已经把常用的CRUD封装好了的,这里可以直接用刚刚生成的代码。
完善一下 UserController类
@RestController
@RequestMapping("/user")
public class UserController {
@Resource
private MPUserService userService;
@GetMapping("save/name={name}&age={age}")
public String save(@PathVariable String name, @PathVariable int age) {
User user = new User();
user.setName(name);
user.setAge(age);
userService.insert(user);
return "succ";
}
@GetMapping("get/name={name}")
public User get(@PathVariable String name) {
// sql 条件构造器
EntityWrapper ew = new EntityWrapper<>();
ew.eq("name", name);
User user = userService.selectOne(ew);
return user;
}
}
顺利运行,直接用新版idea自带的HTTP Client测试一下
熟练的话,感觉不比jpa慢,而且简单很多。
可以看到我用了个EntityWrapper 类 , 这是封装好的sql条件构造器,可以很方便的自定义sql语句。
具体详细用法看文档,也是很方便又强大的。 条件构造器
这里就基本完成demo了。
Mybatis 虽然没有Hibernate 和 jpa 那样的商业支持,发展速度比较慢。jpa的NamedNativeQueries的出现,也可以直接写sql 。性能也不再是瓶颈。Mybatis的优势几乎全无了。不过只要是单表操作,加上丰富的plugins,Mybatis 还是不错的选择。