欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatisPlus項(xiàng)目的創(chuàng)建和使用

 更新時(shí)間:2024年11月24日 09:35:15   作者:2的n次方_  
本文介紹了MyBatis-Plus的基本使用方法,包括項(xiàng)目的創(chuàng)建和配置、增刪查改操作、日志打印以及條件構(gòu)造器的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

本文主要介紹了 MyBatisPlus項(xiàng)目的創(chuàng)建和使用,具體如下:

1. 快速上手

1.1. 項(xiàng)目的創(chuàng)建和配置

首先,創(chuàng)建一個(gè) Spring Boot 工程,添加 MyBatis Plus 和 MySQL 對(duì)應(yīng)的依賴,然后,和 MyBatis 一樣,需要在 yml 文件中配置數(shù)據(jù)庫(kù)連接信息

<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
  <version>3.5.9</version>
</dependency>

創(chuàng)建好項(xiàng)目之后,需要根據(jù)數(shù)據(jù)庫(kù)中的字段來寫相應(yīng)的實(shí)體類

@Data
public class UserInfo {
    private Integer id;
    private String userName;
    private String password;
    private Integer deleteFlag;
    private Date createTime;
    private Date updateTime;
}

MybatisPlus 提供了一個(gè)基礎(chǔ)的 BaseMapper 接口,已經(jīng)實(shí)現(xiàn)了單表的增刪查改操作,自定義的 Mapper 只需要繼承這個(gè) BaseMapper,就不用自己實(shí)現(xiàn)相應(yīng)的單表增刪查改操作了

為了讓 Spring 掃描到這個(gè)類,也是需要加上 @Mapper注解的,或者在啟動(dòng)類上加上@MapperScan注解,參數(shù)就寫包的路徑

@Mapper
public interface UserInfoMapper extends BaseMapper<UserInfo> {
}

1.2. 增刪查改的簡(jiǎn)單演示

之后就可以進(jìn)行增刪查改的單元測(cè)試了

查詢:

@SpringBootTest
class UserInfoMapperTest {
    @Autowired
    private UserInfoMapper userInfoMapper;

    //查詢
    @Test
    void testSelect(){
        System.out.println(userInfoMapper.selectById(1));
    }
}

和使用 Mybatis 時(shí)的結(jié)果是一樣的

那么就有一個(gè)問題,Mapper 中不寫 sql 語句是怎么知道要操作哪張表的,其實(shí)就是繼承的BaseMapper<UserInfo>中傳入的泛型參數(shù),會(huì)將 Java 中類的命名規(guī)范改為數(shù)據(jù)庫(kù)中的命名規(guī)范,類中的屬性也是按照規(guī)范映射到數(shù)據(jù)庫(kù)中表的字段的,那么就會(huì)有一個(gè)問題,如果說類名或者屬性名沒有按照規(guī)范來定義,還能知道操作的是哪張表嗎

把類名修改以后就報(bào)錯(cuò)了,報(bào)錯(cuò)信息為數(shù)據(jù)庫(kù)中找不到這個(gè)表,如果命名規(guī)范的話是可以把UserInfo轉(zhuǎn)化為表名user_info

這時(shí)候使用 @TableName來指定一下具體要操作哪張表就可以了

同理,屬性名如果命名不規(guī)范也是不能自動(dòng)轉(zhuǎn)化成功的

把規(guī)范的駝峰命名方式修改一下就又報(bào)錯(cuò)了,這時(shí)候,就要使用@TableField注解來指定對(duì)應(yīng)的表的字段

然后來看 insert 方法

@Test
void testInsert(){
    UserInfo userinfo = new UserInfo();
    userinfo.setUserName("java");
    userinfo.setPassword("java");
    userInfoMapper.insert(userinfo);
}

雖然說插入成功了,但是數(shù)據(jù)好像不太對(duì),這里的 id 并沒有按照自增的方式來增加,而且設(shè)置為了一個(gè)新的 id,原因就是沒有指定數(shù)據(jù)庫(kù)中的主鍵

通過@TableId注解可以設(shè)置 id 的一些屬性,這里傳入?yún)?shù)(type = IdType.AUTO)表示自增

再來看修改和刪除操作

@Test
void testUpdate(){
    UserInfo userinfo = new UserInfo();
    userinfo.setId(3);
    userinfo.setPassword("00000");
    userInfoMapper.updateById(userinfo);
}
@Test
void testDelete(){
    userInfoMapper.deleteById(3);
}

這里演示的都是通過 id 來進(jìn)行操作的,這里的 id 必須是對(duì)應(yīng)實(shí)體類所映射表的主鍵

1.3. 日志打印

和 Mybatis 一樣,也可以進(jìn)行配置打印日志,來觀察對(duì)應(yīng)的 sql 語句

mybatis-plus:
  configuration: # 配置打印 MyBatis日志
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

2. 條件構(gòu)造器

MyBatis-Plus 提供了一套強(qiáng)大的條件構(gòu)造器(Wrapper),用于構(gòu)建復(fù)雜的數(shù)據(jù)庫(kù)查詢條件。

  • AbstractWrapper:這是一個(gè)抽象基類,提供了所有 Wrapper 類共有的方法和屬性。
  • QueryWrapper:專門用于構(gòu)造查詢條件,支持基本的等于、不等于、大于、小于等各種常見操作。它允許你以鏈?zhǔn)秸{(diào)用的方式添加多個(gè)查詢條件,并且可以組合使用 and 和 or 邏輯。
  • UpdateWrapper:用于構(gòu)造更新條件,可以在更新數(shù)據(jù)時(shí)指定條件。與 QueryWrapper 類似,它也支持鏈?zhǔn)秸{(diào)用和邏輯組合。使用 UpdateWrapper 可以在不創(chuàng)建實(shí)體對(duì)象的情況下,直接設(shè)置更新字段和條件。
  • LambdaQueryWrapper:這是一個(gè)基于 Lambda 表達(dá)式的查詢條件構(gòu)造器,它通過 Lambda 表達(dá)式來引用實(shí)體類的屬性,從而避免了硬編碼字段名。這種方式提高了代碼的可讀性和可維護(hù)性,尤其是在字段名可能發(fā)生變化的情況下。
  • LambdaUpdateWrapper:類似于 LambdaQueryWrapper,LambdaUpdateWrapper 是基于 Lambda 表達(dá)式的更新條件構(gòu)造器。它允許你使用 Lambda 表達(dá)式來指定更新字段和條件,同樣避免了硬編碼字段名的問題。

2.1. QueryWrapper

@Test
void testQueryWrapper() {
    QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<>();
    queryWrapper.select("user_name", "password")
    .eq("delete_flag", 0)
    .like("user_name", "min");
    userInfoMapper.selectList(queryWrapper).forEach(System.out::println);
}

eq 就構(gòu)造了一個(gè)相等條件,like 構(gòu)造了一個(gè)模糊查詢的條件,除此之外還有其他的一些模糊查詢的構(gòu)造

這就相當(dāng)于下面的這條 sql 語句

部分方法名的表示含義:

方法名

表示

lt

"less than"的縮寫,表示小于.

le

"less than or equal to"的縮寫,表示小于等于

ge

"greater than or equal to"的縮寫,表示大于等于.

gt

"greater than"的縮寫,表示大于.

eq

"equals"的縮寫,表示等于.

ne

"not equals"的縮寫,表示不等于

如果要使用 delete 的話也是可以使用 QueryWrapper 來構(gòu)造一個(gè)判斷條件,然后再調(diào)用 delete 方法

2.2. UpdateWrapper

來看一下還用 QueryWrapper 來構(gòu)造條件進(jìn)行更新:

@Test
void testQueryWrapper2() {
    QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<>();
    queryWrapper.lt("id", 2);
    UserInfo userInfo = new UserInfo();
    userInfo.setDeleteFlag(1);
    userInfoMapper.update(userInfo, queryWrapper);
}

還是先用 QueryWrapper 構(gòu)造出判斷條件,然后和要更新的對(duì)象傳入 update 方法中,這樣就有些麻煩了,來看使用 UpdateWrapper 來進(jìn)行簡(jiǎn)化

@Test
void testUpdateWrapper() {
    UpdateWrapper<UserInfo> updateWrapper = new UpdateWrapper<>();
    updateWrapper.set("delete_flag", 0)
    .lt("id", 2);
    userInfoMapper.update(updateWrapper);
}

這里直接就可以構(gòu)造出要更新的內(nèi)容和判斷條件,然后直接傳入 update 方法中

再來看批量修改的方式:

@Test
void testUpdateWrapper1() {
    UpdateWrapper<UserInfo> updateWrapper = new UpdateWrapper<>();
    updateWrapper.set("delete_flag", 1)
    .in("id", List.of(1, 2, 3));
    userInfoMapper.update(updateWrapper);
}

這里通過 in 方法來構(gòu)造 sql 語句中的 in

再來看涉及到表達(dá)式的 sql 語句怎么構(gòu)造

@Test
void testUpdateWrapper2(){
    UpdateWrapper<UserInfo> updateWrapper = new UpdateWrapper<>();
    updateWrapper.setSql("age = age + 10")
    .in("id",List.of(1,2,3));
    userInfoMapper.update(updateWrapper);
}

可以直接通過 setSql 方法來設(shè)置 sql 語句

2.3. LambdaQueryWrapper

在上面的示例中,傳入的參數(shù)都是字符串,也就是硬編碼字段名,如果發(fā)生修改的話,不方便維護(hù),寫起來容易出錯(cuò),就可以使用 LambdaQueryWrapper 來通過 lambda 表達(dá)式的方式來引用類的屬性

@Test
void testLambdaQueryWrapper(){
    QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<>();
    queryWrapper.lambda()
    .select(UserInfo :: getId,UserInfo :: getUserName,UserInfo :: getPassword)
    .eq(UserInfo::getId ,2);
    System.out.println(userInfoMapper.selectOne(queryWrapper));
}

直接使用就不用調(diào)用 lambda 方法了

@Test
void testLambdaQueryWrapper() {
    LambdaQueryWrapper<UserInfo> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    lambdaQueryWrapper
    .select(UserInfo::getId, UserInfo::getUserName, UserInfo::getPassword)
    .eq(UserInfo::getId, 2);
    System.out.println(userInfoMapper.selectOne(lambdaQueryWrapper));
}

通過這樣的方式就避免了字符串容易寫錯(cuò)的問題

2.4. LambdaUpdateWrapper

與之對(duì)應(yīng)的,還有 LambdaUpdateWrapper,使用方法也是類似的

@Test
void testLambdaUpdateWrapper(){
    UpdateWrapper<UserInfo> updateWrapper = new UpdateWrapper<>();
    updateWrapper.lambda()
    .set(UserInfo::getDeleteFlag, 0)
    .in(UserInfo::getId, List.of(1, 2, 3));
    userInfoMapper.update(updateWrapper);
}

也是直接使用,就不用調(diào)用 lambda 方法了

@Test
void testLambdaUpdateWrapper() {
    LambdaUpdateWrapper<UserInfo> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
    lambdaUpdateWrapper
    .set(UserInfo::getDeleteFlag, 1)
    .in(UserInfo::getId, List.of(1, 2, 3));
    userInfoMapper.update(lambdaUpdateWrapper);
}

3. 自定義 sql

Mybatis plus 提供的方法可能不能滿足一些其他需求,這是就可以自定義 sql,第一種實(shí)現(xiàn)方式還是之前 Mybatis 的寫法,直接把 sql 語句寫在注解里,或者是使用 XML 的方式

除此之外,Mybatis plus 也提供了另一種構(gòu)造自定義 sql 的方式,來看官方文檔中的介紹

@Mapper
public interface UserInfoMapper extends BaseMapper<UserInfo> {
    @Select("select * from user_info ${ew.customSqlSegment}")
    List<UserInfo> selectByCustom(@Param(Constants.WRAPPER) Wrapper<UserInfo> wrapper);
}

通過 ${ew.customSqlSegment} 引入了 Wrapper 對(duì)象生成的 SQL 片段,來實(shí)現(xiàn)自定義 sql,然后調(diào)用方法,傳入一個(gè) Wrapper 對(duì)象

XML 方式也是一樣的,把注解中的 sql 語句寫到 XML 中就可以了

再來看上面 sql 表達(dá)式的例子

來自定義一下上面的 sql 語句

@Update("update user_info set age = age + #{age} ${ew.customSqlSegment}")
Integer updateByCustom(@Param("age") Integer age,@Param(Constants.WRAPPER) Wrapper<UserInfo> wrapper);
@Test
void updateByCustom() {
    QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<>();
    queryWrapper.in("in",List.of(1,2,3));
    userInfoMapper.updateByCustom(10,queryWrapper);
}

到此這篇關(guān)于MyBatisPlus項(xiàng)目的創(chuàng)建和使用的文章就介紹到這了,更多相關(guān)MyBatisPlus項(xiàng)目創(chuàng)建內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Java8 接口默認(rèn)方法和靜態(tài)方法

    Java8 接口默認(rèn)方法和靜態(tài)方法

    這篇文章主要介紹了Java8 接口默認(rèn)方法和靜態(tài)方法,在默認(rèn)接口中使用關(guān)鍵字default聲明并提供具體實(shí)現(xiàn),而且該方法不需要添加public關(guān)鍵字就可以公開調(diào)用,甚至你可以在其實(shí)現(xiàn)類中覆寫,帶著對(duì)默認(rèn)接口的方法和小編一起探索下面文章內(nèi)容的靜態(tài)方法吧
    2021-10-10
  • java使用FuncGPT慧函數(shù)對(duì)Mybatis進(jìn)行一對(duì)一查詢映射處理

    java使用FuncGPT慧函數(shù)對(duì)Mybatis進(jìn)行一對(duì)一查詢映射處理

    這篇文章主要介紹了java使用FuncGPT慧函數(shù)對(duì)Mybatis進(jìn)行一對(duì)一查詢映射處理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • java+selenium爬取圖片簽名的方法

    java+selenium爬取圖片簽名的方法

    這篇文章主要為大家詳細(xì)介紹了java+selenium爬取圖片簽名的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Java利用Jackson序列化實(shí)現(xiàn)數(shù)據(jù)脫敏

    Java利用Jackson序列化實(shí)現(xiàn)數(shù)據(jù)脫敏

    這篇文章主要介紹了利用Jackson序列化實(shí)現(xiàn)數(shù)據(jù)脫敏,首先在需要進(jìn)行脫敏的VO字段上面標(biāo)注相關(guān)脫敏注解,具體實(shí)例代碼文中給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-10-10
  • Mybatis查不到數(shù)據(jù)查詢返回Null問題

    Mybatis查不到數(shù)據(jù)查詢返回Null問題

    mybatis突然查不到數(shù)據(jù),查詢返回的都是Null,但是 select count(*) from xxx查詢數(shù)量,返回卻是正常的。好多朋友遇到這樣的問題不知所措,下面小編通過本教程簡(jiǎn)單給大家說明下
    2016-08-08
  • java中Unsafe的使用講解

    java中Unsafe的使用講解

    這篇文章主要介紹了java中Unsafe的使用講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java實(shí)現(xiàn)小型圖書館管理系統(tǒng)

    Java實(shí)現(xiàn)小型圖書館管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)小型圖書館管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • Spring Cache優(yōu)化數(shù)據(jù)庫(kù)訪問的項(xiàng)目實(shí)踐

    Spring Cache優(yōu)化數(shù)據(jù)庫(kù)訪問的項(xiàng)目實(shí)踐

    本文主要介紹了Spring Cache優(yōu)化數(shù)據(jù)庫(kù)訪問的項(xiàng)目實(shí)踐,將創(chuàng)建一個(gè)簡(jiǎn)單的圖書管理應(yīng)用作為示例,并演示如何通過緩存減少對(duì)數(shù)據(jù)庫(kù)的頻繁查詢,感興趣的可以了解一下
    2024-01-01
  • Spring注解配置IOC,DI的方法詳解

    Spring注解配置IOC,DI的方法詳解

    這篇文章主要為大家介紹了vue組件通信的幾種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • 五分鐘解鎖springboot admin監(jiān)控新技巧

    五分鐘解鎖springboot admin監(jiān)控新技巧

    本文不會(huì)講如何搭建企業(yè)的運(yùn)維監(jiān)控系統(tǒng),有興趣的可以去找找成熟的比如Zabbix、Prometheus,甚至比較簡(jiǎn)單的Wgcloud都能滿足一定的需求,不在此贅述。本文講解如何使用Springboot admin對(duì)spring boot項(xiàng)目進(jìn)行應(yīng)用監(jiān)控,感興趣的朋友一起看看吧
    2021-06-06

最新評(píng)論