??????? 都說程序員的終極目標就是偷懶,雖然mybatis已經給開發帶來很大便利,example類也有很多強大的功能,但是還是滿足不了"勤勞"的程序員們。因此國內程序員在 Mybatis 的基礎上開發了Mybatis Plus,只做增強不做改變,只為簡化開發、提高效率而生。
有頭有尾,我們就從新建項目開始吧:
Default和Customer按照網絡情況,哪個進得去進哪個。點擊Next
上下紅框內名字一般保持一致 ,next
選擇需要添加的依賴:
DevTools 熱部署工具。Lombok:在實體類添加注解可自動生成set get tostring等代碼
web項目必選
Thymeleaf一個模板引擎,類似jsp
開啟自動導入
等待下載依賴。。。
項目初始化創建完成。
1、pom文件導入jar包
<dependency>
? ?? <groupId>mysql</groupId>
? ?? <artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
? ?? <groupId>com.baomidou</groupId>
? ?? <artifactId>mybatis-plus-boot-starter</artifactId>
? ?? <version>3.4.0</version>
</dependency>
2、編寫配置文件(數據庫配置)
3、entity包下新建一個user類,使用@Data注解自動添加set get方法
4、創建mapper接口,繼承BaseMapper,傳入一個需要操作的泛型。
開啟mapper包的掃描,注入到spring中
創建一個測試類
簡單測試一個查詢
如果需要在控制臺查看執行的sql語句,配置文件添加:
常用注解:
1、@TableName 映射數據庫的表名
該demo中如果實體類不叫User是UserInfo,則改為
2、@TableField 映射數據表非主鍵字段名,
exist表示是否為數據表字段 false,true
select表示是否查詢該字段
fill表示是否自動填充,將對象存入數據庫的時候,由Mybatis Plus自動給某些字段賦值。
(如時間create_time,update_time)
1、數據庫添加該字段
2、實體類添加fill注解
3、編寫Handler類,聲明@Component
3、@TableId 設置主鍵映射,value映射主鍵字段名
type 設置主鍵類型(主鍵的生成策略,自增?某種算法生成?)默認NONE(雪花算法實現)
Input 如果開發人員沒有賦值,則采用數據庫自增的方式賦值
4、@Version 標記樂觀鎖(處理并發,防止數據被兩個線程修改):通過version字段,當數據修改時,會以version作為條件 當條件成立才會成功
version=1? (如下兩線程互斥)
線程1:update ...set version = 2 where version = 1
線程2:update .. set version = 2 where version = 1
1.數據庫添加version字段:默認為1
2.實體類添加version成員變量,并且添加Version注解
3.編寫并注冊配置類
4.測試
此時樂觀鎖version將會修改
5、@EnumValue 通用枚舉類注解,將數據庫字段映射成實體類的枚舉類型成員變量
方法一使用注解,
方法二 實現接口 implement IEnum<Integer> 返回Integer code
1.User表添加status字段,設置默認值為1
2.編寫枚舉類,使用該注解
3.UserInfo類中添加該枚舉
4.application.yml中添加
5.查詢所有測試
6、@TableLogic 映射邏輯刪除(假的刪掉,如用戶注銷,并不是真正從數據庫刪除,而是設定一個標志字段)
1.User數據表添加deleted字段,默認為0 為沒有刪除
2.實體類添加注解
3.application.yml添加配置:
4.測試刪除
再次執行查詢將不再被顯示deleted=1的信息
增刪改查
條件查詢
模糊查詢
聯合查詢
排序
分頁查詢
1.添加配置
2.測試 current 當前頁,size 每頁數
注:邏輯刪除deleted字段標記為1的依然不會被查到
查詢一條數據:
自定義sql(注解版)多表關聯查詢
sql語句如下:
1.創建一個VO類
2.mapper文件添加方法
3.測試
自定義sql(xml) + 分頁查詢
1.Test
2.mapper里添加方法,注意?@Param(Constants.WRAPPER)
3.編寫xml文件
4.測試查詢
自定義sql(xml) + 分頁查詢 + 多表查詢(一對多)
SELECT q.id, q.title,u.id uid , u.name from question q, user u
WHERE
q.creator = 220 AND u.id = 220
1.定義個VO類存儲查詢結果
2.Test
3.mapper里添加方法,注意?@Param(Constants.WRAPPER)
4.xml文件
5.測試
插入
刪除
修改
自動生成
根據數據表自動生成實體類、Mapper,Service,ServiceImpl,Controller(比mybatis逆向工程強大?)
1、pom文件導入Mybatis Plus Generator和velocity(根據velocity模板生成,還有freemarker、Beetl)
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
2、啟動類
package com.example.demo;
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 Main {
public static void main(String[] args) {
//創建generator對象
AutoGenerator autoGenerator =new AutoGenerator();
//數據源
DataSourceConfig dataSourceConfig =new DataSourceConfig();
dataSourceConfig.setDbType(DbType.MYSQL);
dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/wlbnew?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false");
dataSourceConfig.setUsername("root");
dataSourceConfig.setPassword("root");
dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
autoGenerator.setDataSource(dataSourceConfig);
//全局配置
GlobalConfig globalConfig =new GlobalConfig();
globalConfig.setOutputDir(System.getProperty("user.dir")+"/src/main/java");
//創建好之后打開文件
globalConfig.setOpen(false);
globalConfig.setAuthor("Jesse");
globalConfig.setServiceName("%sService");
autoGenerator.setGlobalConfig(globalConfig);
//包信息
PackageConfig packageConfig =new PackageConfig();
packageConfig.setParent("com.example.demo");
packageConfig.setModuleName("generator");
packageConfig.setController("controller");
packageConfig.setService("service");
packageConfig.setServiceImpl("service.impl");
packageConfig.setEntity("entity");
packageConfig.setMapper("mapper");
autoGenerator.setPackageInfo(packageConfig);
//配置策略
StrategyConfig strategyConfig =new StrategyConfig();
strategyConfig.setEntityLombokModel(true);
????????? //開啟字段駝峰命名
strategyConfig.setNaming(NamingStrategy.underline_to_camel);
strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
autoGenerator.setStrategy(strategyConfig);
autoGenerator.execute();
}?? }
運行main方法生成。
最后別忘記在DemoApplication添加MapperScan("com.example.demo.generator.mapper")掃描mapper,根據實際包名修改。
如果沒有開啟駝峰命名,再加
strategyConfig.setNaming(NamingStrategy.underline_to_camel);
這種生成方式會在Service名前加字母"I",如果想去掉,全局配置加:
globalConfig.setServiceName("%sService");
測試:
1、controller添加一個方法
2、application.yml配置thymeleaf
3、templates下新建一個index.html
按條件查詢