一、springboot整合mybatis-plus
1.1 springboot在整合mybatis-plus時(shí),pom文件中的坐標(biāo)
一般同時(shí)會(huì)引入Druid。
<!-- springboot整合mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<!-- springboot整合mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- springboot整合druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.6</version>
</dependency>
1.2 application.yml配置文件
spring:
application:
name: springboot_mysql
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
username: root
password: root
mybatis-plus:
configuration:
#執(zhí)行的sql語句,會(huì)打印在控制臺(tái)上
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
#id增長策略
id-type: assign_id
#數(shù)據(jù)庫表與模型的關(guān)系
table-prefix: tbl_
1.3 數(shù)據(jù)庫表與模型關(guān)系的映射關(guān)系
MP會(huì)默認(rèn)將模型類的類名首字母小寫作為表名使用,假如數(shù)據(jù)庫名稱都以tbl_開頭,那么我們就需要將所有的模型類上添加@TableName,配置起來還是比較繁瑣,簡化方式可以在配置文件中配置如下內(nèi)容:
mybatis-plus:?
? ? global-config:?
? ? ? ? db-config:?
? ? ? ? ? ? table-prefix: tbl_
設(shè)置前綴的內(nèi)容,這樣MP就會(huì)拿tbl_加上模型類的首字母小寫,就剛好組裝成數(shù)據(jù)庫的表名。
二、新增
2.1、@TableId(type = IdType.策略)注解,主鍵的生成策略
在向數(shù)據(jù)庫表中新增數(shù)據(jù)時(shí),往往Id都是自動(dòng)生成的的,而不是手動(dòng)維護(hù)的。所以可以在實(shí)體類中的Id字段上加上注解@TableId(type = IdType.策略),表示字段的生成策略。
2.2、IdType.策略有ASSIGN_ID策略、ASSIGN_UUID策略、INPUT策略、AUTO策略
2.2.1?ASSIGN_ID策略
可以在分布式的情況下使用,生成的是Long類型的數(shù)字,可以排序性能也高,但是生成的策略和服務(wù)器時(shí)間有關(guān),如果修改了系統(tǒng)時(shí)間就有可能導(dǎo)致出現(xiàn)重復(fù)主鍵。所以實(shí)體類的字段類型是Long類型的,否則會(huì)拋異常。
2.2.2?ASSIGN_UUID策略
可以在分布式的情況下使用,而且能夠保證唯一,但是生成的主鍵是32位的字符串,長度過長占用空間而且還不能排序,查詢性能也慢。
2.2.3?AUTO策略
數(shù)據(jù)庫ID自增,這種策略適合在數(shù)據(jù)庫服務(wù)器只有1臺(tái)的情況下使用,不可作為分布式ID使用
2.2.4?INPUT
不設(shè)置id生成策略,MP不自動(dòng)生成,約等于NONE,所以這兩種方式都需要用戶手動(dòng)設(shè)置,但是手動(dòng)設(shè)置第一個(gè)問題是容易出現(xiàn)相同的ID造成主鍵沖突,為了保證主鍵不沖突就需要做很多判定,實(shí)現(xiàn)起來比較復(fù)雜
2.3、主鍵生成策略統(tǒng)一配置
如果要在項(xiàng)目中的每一個(gè)模型類上都需要使用相同的生成策略,稍微比較繁瑣,我們可以在配置文件中添加內(nèi)容來使用統(tǒng)一的配置:
mybatis-plus:?
? ? global-config:?
? ? ? ? db-config:
? ? ? ? ? ? id-type: assign_id
配置完成之后,每個(gè)模型的注解ID策略都將成為assign_id
2.4 新增
Employee employee = new Employee();
employee.setLastName("zhangsan");
employee.setGender(1);
employee.setEmail("zhangsan@qq.com");
employeeMapper.insert(employee);
三、修改
Employee employee = new Employee();
employee.setId(13L);
employee.setLastName("王五");
employee.setEmail("wangwu@qq.com");
employee.setGender(1);
employeeMapper.updateById(employee);
四、自動(dòng)填充功能
比如創(chuàng)建時(shí)間,修改時(shí)間等字段,都和當(dāng)前時(shí)間有關(guān)系,可以通過set方法設(shè)置字段的值。但是也可以通過mybatis-plus提供的自動(dòng)填充的功能設(shè)置字段的值。其步驟如下:
第一步:在實(shí)體類需要填充的字段上加注解@TableField(fill=)
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
第二步:實(shí)現(xiàn)mybatis-plus提供的MetaObjectHandler接口
1. 新建handler包,在handler包下創(chuàng)建類MyMetaObjectHandler implements??MetaObjectHandler,并由spring管理,添加@Component注解文章來源:http://www.zghlxwxcb.cn/news/detail-432507.html
2. 類中重載insertFill,updateFill方法。新增的時(shí)候會(huì)執(zhí)行insertFill()方法,修改時(shí)會(huì)執(zhí)行updateFill()方法。文章來源地址http://www.zghlxwxcb.cn/news/detail-432507.html
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
//setFieldValByName:參數(shù)1:字段名,參數(shù)2:賦值,參數(shù)3: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);
}
}
到了這里,關(guān)于Mybatis-plus的操作(新增,修改)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!