1笨忌、MyBatais Plus安裝(只能手動(dòng)安裝
在java文件目錄下找到pom.xml,配置如下字段
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1.tmp</version>
</dependency>
然后刷新Maven
2、MyBatis Plus數(shù)據(jù)庫(kù)配置文件
server:
port: 8888//端口號(hào)
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver//數(shù)據(jù)庫(kù)類型
url: jdbc:mysql://127.0.0.1:3306/springboot?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC//數(shù)據(jù)庫(kù)鏈接地址
username: root//數(shù)據(jù)庫(kù)賬號(hào)
password: password//數(shù)據(jù)庫(kù)密碼
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl//打印Sql語(yǔ)句
3、創(chuàng)建對(duì)象文件,此時(shí)需要跟數(shù)據(jù)庫(kù)表明保持一致牲阁,即首字母大寫
image.png
package com.ybwork.mybitsplus.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
public class User {
private Integer id;
private String name;
private String address;
private String password;
}
4、創(chuàng)建Mapper接口文件,繼承BaseMapper
package com.ybwork.mybitsplus.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ybwork.mybitsplus.entity.User;
public interface UserMapper extends BaseMapper<User> {
}
并在Application中添加掃描MapperScan壤躲,將下圖紅色框內(nèi)字符串拼接起來(lái)即Mapper文件夾的路徑
image.png
@MapperScan("com.xxx.xxx.mapper")
5城菊、編寫測(cè)試用例
package com.xxx.xxx.mapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
class AccountMapperTest {
@Autowired
private UserMapper mapper;
@Test
void test(){
mapper.selectList(null).forEach(System.out::println);
}
}
6、MyBatis Plus注解
@TabbleName
用法
@TableName(value = "user")
作用:
修改映射表名
package com.ybwork.mybitsplus.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName(value = "user")
public class Account {
private Integer id;
private String name;
private String address;
private String password;
}
@TableId
用法
修改主鍵字段映射
value設(shè)置字段名
type設(shè)置主鍵類型碉克,type值為IdType(枚舉)
public enum IdType {
AUTO(0),
NONE(1),
INPUT(2),
ASSIGN_ID(3),
ASSIGN_UUID(4),
//已下三種已棄用凌唬,無(wú)需處理
/** @deprecated */
@Deprecated
ID_WORKER(3),
/** @deprecated */
@Deprecated
ID_WORKER_STR(3),
/** @deprecated */
@Deprecated
UUID(4);
private final int key;
private IdType(int key) {
this.key = key;
}
public int getKey() {
return this.key;
}
}
值 | 描述 |
---|---|
AUTO | 主鍵自增,無(wú)需開發(fā)者處理 |
NONE | MP根據(jù)雪花算法自動(dòng)生成漏麦,無(wú)需開發(fā)者處理(默認(rèn)) |
INPUT | 開發(fā)者手動(dòng)賦值客税,沒有賦值的情況下等同默認(rèn)效果 |
ASSIGN_ID | MP自動(dòng)賦值,類型為L(zhǎng)ong,String |
ASSIGN_UUID | MP自動(dòng)賦值撕贞,類型只能為String |
public class User {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
@TableField(value = "name",select = false)
private String userName;
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
@TableField
用法
@TableField(value = "name",select = false)
作用
修改非主鍵字段映射
value設(shè)置字段名
select設(shè)置是否查詢
exist是否是數(shù)據(jù)庫(kù)字段
fill是否字段填充數(shù)據(jù)(create_time,update_time)
fill使用
- 生成實(shí)體類屬性
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
- 數(shù)據(jù)庫(kù)添加對(duì)應(yīng)字段
- 重寫自動(dòng)填充方法
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime",new Date(),metaObject);
this.setFieldValByName("updateTime",new Date(),metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime",new Date(),metaObject);
}
}
- 測(cè)試
@Test
void save(){
User user = new User();
user.setUserName("TableFill");
mapper.insert(user);
}
@Test
void updateById(){
User user = mapper.selectById(1);
user.setUserName("C羅");
mapper.updateById(user);
}
@Version
用法
- 在數(shù)據(jù)庫(kù)添加version字段
- 在實(shí)體類中添加version字段并且添加@version注解
public class User {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
@TableField(value = "name",select = false)
private String userName;
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
@Version
private Integer version;
}
@Configuration
public class MyBatisPlusConfig {
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor(){
return new OptimisticLockerInterceptor();
}
}
作用
保證同一時(shí)間內(nèi)該數(shù)據(jù)只能被修改一次
@EnumValue
用法
- 創(chuàng)建枚舉類更耻,并添加注釋
public enum UserStatusEnums {
WAIT_CHECK(1,"待審核"),
CHECK_YES(2,"已通過(guò)"),
CHECY_NO(3,"已拒絕");
UserStatusEnums(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
@EnumValue
private Integer code;
private String msg;
}
- 在實(shí)體類中添加枚舉字段
public class User {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
@TableField(value = "name",select = false)
private String userName;
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
@Version
private Integer version;
private UserStatusEnums userStatus;
}
- 在YML文件中配置enums路徑
type-enums-package:
com.xxx.xxx.enums
作用
通過(guò)枚舉類注解,將數(shù)據(jù)庫(kù)字段映射成實(shí)體類的枚舉類型成員變量
枚舉也可以通過(guò)實(shí)現(xiàn)接口的方式使用枚舉
public enum UserStatusEnums implements IEnum<Integer> {
WAIT_CHECK(1,"待審核"),
CHECK_YES(2,"已通過(guò)"),
CHECY_NO(3,"已拒絕");
UserStatusEnums(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
private Integer code;
private String msg;
@Override
public Integer getValue() {
return this.code;
}
}
@TableLogic
用法
- 數(shù)據(jù)表添加刪除字段
- 實(shí)體類添加字段以及注解
- 在YML文件文件中添加配置
global-config:
db-config:
logic-not-delete-value: 0
logic-delete-value: 1
作用
映射邏輯刪除
7捏膨、數(shù)據(jù)庫(kù)操作
查詢
- 不添加任何條件查詢
//不添加任何條件查詢
mapper.selectList(null).forEach(System.out::println);
- 單條件查詢
QueryWrapper wrapper = new QueryWrapper();
wrapper.eq("name","333");
mapper.selectList(wrapper).forEach(System.out::println);
- 多條件查詢
//多條件查詢
QueryWrapper wrapper = new QueryWrapper();
Map<String,Object> map = new HashMap<>();
map.put("name","333");
map.put("phone","11111111111");
wrapper.allEq(map);
mapper.selectList(wrapper).forEach(System.out::println);
- wraper部分屬性
值 | 描述 |
---|---|
gt | 大于篩選條件 |
lt | 小于篩選條件 |
ne | 不等于篩選條件 |
ge | 大于等于篩選條件 |
le | 小于等于篩選條件 |
orderByAsc | 升序 |
orderByDesc | 降序 |
like | 模糊查詢 |
likeLeft | 以查詢參數(shù)結(jié)尾的 |
likeRight | 以查詢參數(shù)開頭的 |
- 聯(lián)合查詢
QueryWrapper wrapper = new QueryWrapper();
wrapper.inSql("id","select id from user where id > 2");
wrapper.inSql("name","select name from user where name = '333'");
mapper.selectList(wrapper).forEach(System.out::println);
- 分頁(yè)查詢
//分頁(yè)查詢
Page<User> page = new Page<>(1,2);
Page<User> result = mapper.selectPage(page,null);
System.out.println(result.getSize());
System.out.println(result.getTotal());
result.getRecords().forEach(System.out::println);
添加
User user = new User();
user.setUserName("TableFill");
mapper.insert(user);
刪除
//通過(guò)id刪除
mapper.deleteById(5);
//通過(guò)wrapper刪除秧均,選擇器跟查詢一致
QueryWrapper wrapper = new QueryWrapper<>();
wrapper.gt("id",2);
mapper.delete(wrapper);
//通過(guò)map刪除
Map<String,Object> map = new HashMap<>();
map.put("id",1);
mapper.deleteByMap(map);
//多個(gè)ID刪除
mapper.deleteBatchIds(Arrays.asList(1,2));
修改
User user = new User();
user.setId(3);
user.setUserName("updata");
mapper.updateById(user);
自定義SQL、多表關(guān)聯(lián)
@Select("SELECT d.*,u.name user_name FROM device d,user u WHERE d.user_id = u.id and u.id = #{id}")
List<DeviceVO> deviceList(Integer id);
8脊奋、MyBatis Plus自動(dòng)生成
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.1.tmp</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
//數(shù)據(jù)源
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setUrl("jdbc:mysql://127.0.0.1:3306/springboot?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC");
dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
dataSourceConfig.setUsername("root");
dataSourceConfig.setPassword("wyb123456");
//全局配置
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setOutputDir(System.getProperty("user.dir") + "/src/main/java");//獲取工程路徑
globalConfig.setOpen(false);//是否打開創(chuàng)建好的文件
globalConfig.setAuthor("wyb");//作者
//包信息
PackageConfig packageConfig = new PackageConfig();
packageConfig.setParent("com.ybwork.mybitsplus");//設(shè)置軟件包路徑
packageConfig.setModuleName("generator");//設(shè)置generator 存放位置
packageConfig.setController("contorller");//設(shè)置contorller存放位置
packageConfig.setService("service");//接口存放位置
packageConfig.setServiceImpl("service.impl");//impl路徑
packageConfig.setEntity("entity");//實(shí)體類存放位置
packageConfig.setMapper("mapper");//mapper存放位置
//配置策略
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig.setEntityLombokModel(true);//自動(dòng)生成Lombok注解
strategyConfig.setNaming(NamingStrategy.underline_to_camel);//設(shè)置字段名 下劃線轉(zhuǎn)駝峰
strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);//設(shè)置字段名 下劃線轉(zhuǎn)駝峰
//創(chuàng)建generator對(duì)象
AutoGenerator generator = new AutoGenerator();
generator.setDataSource(dataSourceConfig);//配置數(shù)據(jù)源
generator.setGlobalConfig(globalConfig);//設(shè)置全局配置
generator.setPackageInfo(packageConfig);//配置包信息
generator.setStrategy(strategyConfig);//配置策略
generator.execute();//執(zhí)行