欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報激活碼778899分享:MyBatis Plus

柚子快報激活碼778899分享:MyBatis Plus

http://yzkb.51969.com/

MyBatis-Plus (簡稱 MP)是一個 MyBatis 的增強(qiáng)工具,在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡化開發(fā)、提高效率而生。 MybatisPlus 可以節(jié)省大量時間,所有的 CRUD (增查改刪)代碼都可以自動化完成 如何使用? 1.先建一個表用來練習(xí)

????????2.引入依賴

//數(shù)據(jù)庫驅(qū)動

mysql

mysql-connector-java

//lombok,打印日志,通過注解簡化實體類的get/set等方法

org.projectlombok

lombok

//盡量不要同時導(dǎo)入mybatis和mybatis-plus,可能存在版本的差異

com.baomidou

mybatis-plus-boot-starter

3.0.5

????????3.在對應(yīng)的Mapper上面繼承基本的類 BaseMapper

@Mapper

public interface UserMapper extends BaseMapper {

// 所有的CRUD操作都已經(jīng)編寫完成了

// 不需要像以前的配置一大堆文件了!

}

????????BaseMapper里面提供了很多方法供我們使用

public interface BaseMapper {

int insert(T var1);

int deleteById(Serializable var1);

int updateById(@Param("et") T var1);

T selectById(Serializable var1);

}

????????4.創(chuàng)建User實體類

@Data

public class User {

private Long id;

private String name;

private Integer age;

private String email;

private Integer deleted;

private Integer version;

private LocalDateTime createTime;

private LocalDateTime updateTime;

}

5.在啟動類上加上注解 @MapperScan("com.example.mapper") 掃描mapper文件夾

通過以上步驟,mp配置基本完成。

時間自動填充

在常用業(yè)務(wù)中有些屬性需要配置一些默認(rèn)值,MyBatis-Plus 提供了實現(xiàn)此功能的插件,也就是自動填充功能。 比如創(chuàng)建時間、修改時間這些操作一般都是自動化完成的,是不用去手動更新的。這里本人整理了五種時間填充的方式,供各位參考。

①設(shè)置數(shù)據(jù)庫,update_time勾選根據(jù)當(dāng)前時間戳更新,create_time不勾選(不推薦)

②手動更新,不設(shè)置時間屬性,在sql語句中獲取時間

@Test

public void insert(){

User user=new User();

user.setEmail("23135545@qq.com");

user.setName("張三");

user.setAge(20);

userService.save(user);

}

insert into mybatis_plus.user

(name, age, email, create_time, update_time)

values(#{name},#{age},#{email},now(),now())//或者換成LOCALTIMESTAMP、LOCALTIMESTAMP()

//LOCALTIMESTAMP and LOCALTIMESTAMP() are synonyms for NOW().

③手動更新,先設(shè)置時間屬性

@Test

public void insert(){

User user=new User();

user.setEmail("23135545@qq.com");

user.setName("張三");

user.setAge(20);

user.setCreateTime(LocalDateTime.now());

user.setUpdateTime(LocalDateTime.now());

userService.save(user);

}

insert into mybatis_plus.user

(name, age, email, create_time, update_time)

values(#{name},#{age},#{email},#{createTime},#{updateTime})

④自動更新,使用MybatisPlus注解

1.實體類字段屬性上需要增加注解

//字段添加填充內(nèi)容

@TableField(fill = FieldFill.INSERT)

private LocalDateTime createTime;

@TableField(fill = FieldFill.INSERT_UPDATE)

private LocalDateTime updateTime;

2、編寫處理器來處理這個注解

@Slf4j

@Component//一定不要把處理器加到IOC容器中

public class MyMetaObjectHandler implements MetaObjectHandler {

//插入時的填充策略

@Override

public void insertFill(MetaObject metaObject) {

log.info("start insert fill");

this.setFieldValByName("createTime", LocalDateTime.now(),metaObject);

this.setFieldValByName("updateTime",LocalDateTime.now(),metaObject);

}

//更新時的填充策略

@Override

public void updateFill(MetaObject metaObject) {

log.info("start update fill");

this.setFieldValByName("updateTime",LocalDateTime.now(),metaObject);

}

}

3.代碼測試

@Test

void testInsert(){

User user =new User();

user.setName("張三");

user.setAge(3);

user.setEmail("231256486@qq.com");

userMapper.insert(user);

}

4.測試結(jié)果

⑤使用AOP切面編程,來完成公共字段自動填充功能。

代碼后續(xù)補(bǔ)上

樂觀鎖

樂觀鎖是一種并發(fā)控制策略,用于解決并發(fā)情況下的數(shù)據(jù)一致性問題,操作數(shù)據(jù)時不會對操作的數(shù)據(jù)進(jìn)行加鎖(這使得多個任務(wù)可以并行的對數(shù)據(jù)進(jìn)行操作),只有到數(shù)據(jù)提交的時候才通過一種機(jī)制來驗證數(shù)據(jù)是否存在沖突(一般實現(xiàn)方式是通過加版本號然后進(jìn)行版本號的對比方式實現(xiàn));

1.編寫配置類注冊樂觀鎖插件

@Configuration//配置類

public class MyBatisPlusConfig {

//注冊樂觀鎖插件

@Bean

public OptimisticLockerInterceptor optimisticLockerInterceptor(){

return new OptimisticLockerInterceptor();

}

}

2.在User實體類的versoion屬性添加注解

@Version//樂觀鎖Version注解

private Integer version;

3.代碼測試

@Test

public void testOptimisticLocker2(){

//線程1

User user = userMapper.selectById(1L);

user.setName("hyc111");

user.setEmail("11111111@qq.com");

//線程2

User user2 = userMapper.selectById(1L);

user2.setName("hyc222");

user2.setEmail("22222222@qq.com");

userMapper.updateById(user);

userMapper.updateById(user2);//如果沒有樂觀鎖,就會覆蓋第一個線程的值

}

4.測試結(jié)果:線程一執(zhí)行成功,線程二執(zhí)行失敗

5.查看sql語句

//取出記錄時,獲取當(dāng)前 version

//更新時,帶上這個version

//執(zhí)行更新時, set version = version+1 where version = oldVersion

//如果version不對,就更新失敗

//線程一sql語句,率先完成,這時version=2,會導(dǎo)致線程二修改失敗

UPDATE

user

SET

name='hyc111',

age=18,

email='11111111@qq.com',

version=2,

create_time='2024-01-04 10:46:36.0',

update_time='2024-01-24 13:06:20.338226'

WHERE

id=1

AND version=1

//線程二sql語句

UPDATE

user

SET

name='hyc222',

age=18,

email='22222222@qq.com',

version=2,

create_time='2024-01-04 10:46:36.0',

update_time='2024-01-24 13:06:20.3472'

WHERE

id=1

AND version=1

這里要注意,要先從數(shù)據(jù)庫查詢記錄,再去更新這條記錄的屬性,不能先設(shè)置屬性再去更新

邏輯刪除

物理刪除 :從數(shù)據(jù)庫中直接移除這條記錄

邏輯刪除 :在數(shù)據(jù)庫中沒有被移除,而是通過一個變量來讓他失效,deleted = 0 變成 deleted = 1

1.編寫配置類邏輯刪除插件

public class MyBatisPlusConfig {

//注冊樂觀鎖插件

@Bean

public OptimisticLockerInterceptor optimisticLockerInterceptor(){

return new OptimisticLockerInterceptor();

}

//邏輯刪除組件

@Bean

public ISqlInjector sqlInjector(){

return new LogicSqlInjector();

}

}

2.在application.properties文件中添加配置屬性

//邏輯刪除配置

mybatis-plus.global-config.db-config.logic-delete-value=1

mybatis-plus.global-config.db-config.logic-not-delete-value=0

3.在User實體類的deleted屬性添加注解

@TableLogic //邏輯刪除注解

private Integer deleted;

4.代碼測試

//測試刪除

@Test

public void testDeleteById(){

userMapper.deleteById(4L);

}

5.測試結(jié)果

6.查看sql語句,可以看到執(zhí)行的是update語句,而不是delete語句

UPDATE ? ? ? ? user? ? ? SET ? ? ? ? deleted=1? ? ? WHERE ? ? ? ? id=4? ? ? ? ? AND deleted=0

7.去查看所有用戶

@Test

void selectAll() {

//參數(shù)是一個wrapper,條件構(gòu)造器,這里我們先不用 null

//查詢?nèi)坑脩?/p>

List users = userMapper.selectList(null);

users.forEach(System.out::println);

}

可以看到控制臺輸出三條用戶記錄

8.查看執(zhí)行的sql語句,發(fā)現(xiàn)查詢的時候會自動增加一個條件delete=0

SELECT ? ? id, ? ? name, ? ? age, ? ? email, ? ? deleted, ? ? version, ? ? create_time, ? ? update_time? FROM ? ? user? WHERE ? ? deleted=0

總結(jié)

使用MybatisPlus非常方便, 可以節(jié)省大量時間,個人感覺可以配合自定義mapper方法,編寫mapper.xml文件一起開發(fā)使用。

柚子快報激活碼778899分享:MyBatis Plus

http://yzkb.51969.com/

精彩內(nèi)容

評論可見,查看隱藏內(nèi)容
大家都在看:

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/18880233.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄