在昨天的交流会上,进行交流的架构师展示了他开发的 CURD 代码生成工具,随即被同事问,为啥不用 Mybatis-Plus ,好奇之下来学习一波。
在平时开发中,有很多 CURD 代码要写,MP(Mybatis-Plus)大大简化了这个工作,官网列举了 15 种特性,先从第三个特性,也是最关注的特性——强大的 CRUD 操作,开始学习。
使用框架:SpringBoot,Mybatis-Plus
根据 MP 官网完成测试
首先创建该项目库,并创建表User
CREATE TABLE USER(
id VARCHAR(20),
NAME VARCHAR(10)
);
插入几条数据
INSERT INTO USER (id,NAME) VALUES("1","一号");
INSERT INTO USER (id,NAME) VALUES("2","二号");
INSERT INTO USER (id,NAME) VALUES("3","三号");
SpringBoot项目的基本使用不再赘述,网上许多 demo
该项目使用 IDEA 开发工具完成,然后配置pom.xml,项目使用 Mysql 数据库,注意添加 Mysql 的驱动
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-thymeleaf
com.baomidou
mybatis-plus-boot-starter
3.1.0
mysql
mysql-connector-java
runtime
com.alibaba
druid
1.1.12
org.springframework.boot
spring-boot-devtools
provided
true
com.alibaba
fastjson
1.2.47
然后配置application.properties连接数据库及设置项目属性,使用 alibaba 的 Druid 连接池,基本配置如下
server.port=8081
#使用Mysql
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/olresume?useSSL=false&characterEncoding=utf-8
spring.datasource.username=damionew
spring.datasource.password=2018$mysql
spring.datasource.driverClassName=com.mysql.jdbc.Driver
#连接池的配置信息
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
spring.datasource.maxWait=60000
spring.datasource.timeBetweenEvictionRunsMillis=60000
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
spring.datasource.filters=stat,wall,log4j
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
基本配置完成后添加 entity、Controller 、Mapper ,项目结构如下
首先为了使用 Mybatis ,需要在项目启动类添加注解 @MapperScan
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
// 此处应指定具体 Mapper 包的路径
@MapperScan("com.olresume.admin.mapper")
public class AdminApplication {
public static void main(String[] args) {
SpringApplication.run(AdminApplication.class, args);
}
}
然后添加 User实体类
/**
* User 实体类
*/
public class User {
String id;
String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
接下来是 mapper 类,注意使用 Mybatis-Plus 需要继承BaseMapper,同时泛型设置为单表的实体类
import com.olresume.admin.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface UserMapper extends BaseMapper{
}
然后就可以通过 Controller 进行测试了,以官网的 selectList 为第一例:
import com.alibaba.fastjson.JSONObject;
import com.olresume.admin.entity.User;
import com.olresume.admin.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@Controller
public class UserController {
@Autowired
UserMapper userMapper;
@ResponseBody
@RequestMapping("/selectList")
public String selectList(){
System.out.println("queryNameById");
List userList = userMapper.selectList(null);
JSONObject object = new JSONObject();
object.put("userList",userList);
return object.toJSONString();
}
}
查看封装的源码,如下,另外此处使用 alibaba 的 fastjson 进行格式转换
/**
* 根据 entity 条件,查询全部记录
*
* @param queryWrapper 实体对象封装操作类(可以为 null)
*/
List selectList(@Param(Constants.WRAPPER) Wrapper queryWrapper);
网页展示结果如图
以上所有步骤完成并没有写一句 SQL ,全部使用Mybatis-Plus内置接口完成。
下篇文章将记录其他接口的使用,比如根据 ID 查询等
问题1:
项目启动时,控制台报错:java.lang.annotation.AnnotationFormatError: Invalid default: public abstract java.lang.Class org.mybatis.spring.annotation.MapperScan.factoryBean()
解决方法:引入 Maven 依赖错误,原为
com.baomidou
mybatis-plus
3.1.0
修改为
com.baomidou
mybatis-plus-boot-starter
3.1.0