前言:
MyBatis-Plus(簡稱MP)是一個MyBatis的增強工具,在MyBatis的基礎上只做增強不做改變,爲簡化開發、提高效率而生。它的願景就是成爲 MyBatis 最好的搭檔,就像魂鬥羅中的 1P、2P,基友搭配,效率翻倍。
要說起mp就得先說 mybatis和hibernate,mybatis的衆所周知他的好處就是sql寫起來很靈活,hibernate的好處就是不用寫sql通過實體類的關係配置,只要操作類就可以啦,,拋棄了數據庫中心的思想,完全的面向對象思想。所以有人就想有沒有集兩者優點的框架呢,於是mp(mybatis-Plus)誕生啦。
這篇文章通過mybatis-plus整合springboot來講解mybatis-plus的一些基本操作!
正文:
一、整合springboot和mybatis-plus
1.新建一個springboot項目
這個我在之前的博客寫過,傳送門https://blog.csdn.net/jdk_wangtaida/article/details/86293548
2.我的pom文件
<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.dada</groupId>
<artifactId>springboot_jsp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot_jsp</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<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>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>RELEASE</version>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</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>
<!-- 數據庫 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--添加 代碼生成器 依賴-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3.我的application.yml文件
# 配置端口
server:
port: 9202
spring:
# 配置數據源
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/bendi?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull
username: root
password: root
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
configuration:
# 是否開啓自動駝峯命名規則映射:從數據庫列名到Java屬性駝峯命名的類似映射
map-underscore-to-camel-case: true
# 如果查詢結果中包含空值的列,則 MyBatis 在映射的時候,不會映射這個字段
call-setters-on-nulls: true
# 這個配置會將執行的sql打印出來,在開發或測試的時候可以用
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
4.我的逆向工程類CodeGenerator
package com.dada.springboot_jsp.until;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
public class CodeGenerator {
/**
* 數據庫 URL
*/
private static final String URL = "jdbc:mysql://localhost:3306/bendi?characterEncoding=utf8&useSSL=false";
/**
* 數據庫驅動
*/
private static final String DRIVER_NAME = "com.mysql.jdbc.Driver";
/**
* 數據庫用戶名
*/
private static final String USERNAME = "root";
/**
* 數據庫密碼
*/
private static final String PASSWORD = "root";
/**
* @author 值
*/
private static final String AUTHOR = "dada";
/**
* 需要生成的表名
*/
public static final String[] INCLUDE_TABLES = {"user"};
/**
* 代碼所在服務名
*/
public static final String SERVICE_NAME = "study";
/**
* 代碼生成的包名
*/
public static String PACKAGE_NAME = "com.dada.springboot_jsp";
/**
* 代碼生成路徑
*/
public static final String Output_Dir_NAME = "F:\\tower\\springboot_jsp\\src\\main\\java";
public static void main(String[] args) {
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir(Output_Dir_NAME);
gc.setFileOverride(true);
gc.setActiveRecord(true);
gc.setEnableCache(true);// XML 二級緩存
gc.setBaseResultMap(true);// XML ResultMap
gc.setBaseColumnList(true);// XML columList
gc.setAuthor(AUTHOR);
// 自定義文件命名,注意 %s 會自動填充表實體屬性!
gc.setMapperName("%sDao");
gc.setXmlName("%sMapper");
gc.setServiceName("%sService");
gc.setServiceImplName("%sServiceImpl");
gc.setControllerName("%sController");
mpg.setGlobalConfig(gc);
// 數據源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDbType(DbType.MYSQL);
/*dsc.setTypeConvert(new MySqlTypeConvert(){
// 自定義數據庫表字段類型轉換【可選】
@Override
public DbColumnType processTypeConvert(String fieldType) {
System.out.println("轉換類型:" + fieldType);
return super.processTypeConvert(fieldType);
}
});*/
dsc.setDriverName( DRIVER_NAME);
dsc.setUrl(URL);
dsc.setUsername(USERNAME);
dsc.setPassword(PASSWORD);
mpg.setDataSource(dsc);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
// strategy.setCapitalMode(true);// 全局大寫命名 ORACLE 注意
// strategy.setTablePrefix(new String[] { "tlog_", "tsys_" });// 此處可以修改爲您的表前綴
strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
strategy.setInclude(INCLUDE_TABLES); // 需要生成的表
// strategy.setExclude(new String[]{"test"}); // 排除生成的表
mpg.setStrategy(strategy);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent(PACKAGE_NAME);
pc.setModuleName(SERVICE_NAME);
mpg.setPackageInfo(pc);
// 執行生成
mpg.execute();
}
}
5.建表語句和插入數據的語句
CREATE TABLE `user` (
`id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`name` varchar(32) DEFAULT NULL COMMENT '姓名',
`age` int(11) DEFAULT NULL COMMENT '年齡',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4 COMMENT='用戶表';
INSERT INTO `user` VALUES (1, '阿達', 20);
INSERT INTO `user` VALUES (2, '小達', 19);
INSERT INTO `user` VALUES (3, '達達', 18);
6.執行逆向工程的類CodeGenerator,生成如下圖的目錄結構
二、我們先寫一個最簡單的demo
1.前端controller的代碼(記住這裏我也只寫了前端controller的代碼)
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
/**
* 獲取所有User
* @return
*/
@RequestMapping("/getAllUser")
public List<User> getAllUser(){
List<User> list = userService.list();
return list;
}
}
2.postman請求的例子
3.請求的結果
三、 MyBatis-Plus通用的CRUD
我們通過逆向工程生成的這一系列代碼,直接調用相應的service就可以幫我們完成基本增刪改查。(這裏就不對源碼進行解釋啦,主要講解使用的例子,感興趣的可以追一下代碼)
1.增
controller層代碼
/**
*新增User
*/
@RequestMapping("/save")
public Boolean save(@RequestBody User user){
boolean save = userService.save(user);
return save;
}
postman請求的例子:
請求結果:
2.改
controller層代碼
/**
*修改User
*/
@RequestMapping("/update")
public Boolean update(@RequestBody User user){
boolean save = userService.saveOrUpdate(user);
return save;
}
postman請求的例子:
請求結果:
3.查
controller層代碼
/**
*查詢detail
*/
@RequestMapping("/detail")
public User detail(@RequestBody User user){
User userout = userService.getById(user);
return userout;
}
postman請求的例子:
請求結果:
四、似乎上面的mybatis也可以做到,彆着急,MP 最好用的就是條件構造器QueryWrapper
1.這裏我舉個根據名字查詢用戶的信息的例子
controller層代碼:
/**
*根據name查詢用戶信息
*/
@RequestMapping("/selectByName")
public User selectByName(@RequestBody User user){
QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
userQueryWrapper.eq("name",user.getName());
User one = userService.getOne(userQueryWrapper);
return one;
}
postman請求的例子:
請求結果:
後臺打印的日誌:
這裏我就簡單舉這些例子,更豐富的查詢方法,可以參考官方文檔,傳送門:https://mp.baomidou.com/guide/
總結:
我是阿達,一名喜歡分享知識的程序員,時不時的也會荒腔走板的聊一聊電影、電視劇、音樂、漫畫,這裏已經有3255位小夥伴在等你們啦,感興趣的就趕緊來點擊關注我把,哪裏有不明白或有不同觀點的地方歡迎留言!