亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

前言

本章主要介紹MyBatis-Plus的條件構(gòu)造器,條件構(gòu)造器是MyBatis-Plus的核心,可以使用面向?qū)ο蟮姆绞絹?lái)實(shí)現(xiàn)查詢,本文內(nèi)容涵蓋開(kāi)發(fā)的90%以上查詢場(chǎng)景,我們慢慢往下看


一、條件構(gòu)造器

1.1、官網(wǎng)的弊端

MyBatis-plus官網(wǎng) 一上來(lái)對(duì)條件構(gòu)造器的介紹比較模糊,看不懂,不信您看一下

 


并且下方的案例中也沒(méi)有創(chuàng)建WrApper對(duì)象的步驟,初學(xué)者在剛接觸時(shí)比較抽象,看完這篇文章之后再去看官網(wǎng)就會(huì)比較清晰了。

 

1.2、條件構(gòu)造器到底是什么

條件構(gòu)造器就是可以幫助我們使用面向?qū)ο蟮姆绞綄?shí)現(xiàn)數(shù)據(jù)庫(kù)操作的where條件,在MyBatis-Plus中將它封裝成了一個(gè)Wrapper對(duì)象,在使用時(shí)我們創(chuàng)建條件構(gòu)造器對(duì)象。Wrapper對(duì)象的體系的結(jié)構(gòu)大致如下:

 


其中 Wrapper 和 AbstractWrapper是兩個(gè)抽象類(lèi)不能直接實(shí)例化,我們?cè)谑褂脮r(shí)常用的具體實(shí)現(xiàn)是QueryWrapper 和 UpdateWrapper,看名字好像是QueryWapper是查詢時(shí)使用而UpdateWrapper是修改時(shí)使用,其實(shí)我在使用過(guò)程中無(wú)論修改還是查詢用的都是QueryWrapper。它們還是有些許不同的,并不是很重要本文就先不介紹了。反正直接用QueryWrapper就完事

注意:如果您JDK1.8中的Lambda玩的比較溜,也可以使用 LambdaQueryWrapper 和 LambdaUpdateWrapper

 

二、代碼實(shí)現(xiàn)

在操作sql時(shí)條件包含 等于,不等于,大于,小于,區(qū)間,模糊查詢,limit等等,接下來(lái)我會(huì)演示一些常用的,基本上包含了工作中的99.99%場(chǎng)景。

2.1、創(chuàng)建構(gòu)造器語(yǔ)法

// 其中泛型填充要操作的Entity
QueryWrapper<User> queryWrapper = new QueryWrapper<>();

2.2、ge、gt、le、lt、isNull、isNotNull

@Test
public void testDelete() {
	// 創(chuàng)建QueryWrapper對(duì)象
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    // 直接.即可其中isNull = where name IS NULL,查詢名字部位空的
    queryWrapper
        .isNull("name")
        // 如果繼續(xù).說(shuō)明條件使用 AND 連接,ge為大于等于的意思sql為:and age >= 12
        .ge("age", 12)
        // isNotNull就和isNull相反啦
        .isNotNull("email");
        // 調(diào)用delete方法說(shuō)明要根據(jù)條件進(jìn)行數(shù)據(jù)刪除
    int result = userMapper.delete(queryWrapper);
    System.out.println("delete return count = " + result);
}

以上語(yǔ)法sql 如下

DELETE FROM tb_user WHERE name IS NULL AND age >= 12 AND email IS NOT NULL;

你品,你細(xì)品,很簡(jiǎn)單吧,其他的操作都一樣,無(wú)非就是不同的方法有不同的功能,這里您可以自己寫(xiě)一寫(xiě)思考一下,我繼續(xù)往下碼字。

2.3、eq、ne

  • eq:相等
  • ne:不相等
  • selectOne:調(diào)用selecteOne是查詢一條數(shù)據(jù),如果根據(jù)該條件獲取到多條則會(huì)報(bào)錯(cuò)。
@Test
public void testSelectOne() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("name", "Tom");
    User user = userMapper.selectOne(queryWrapper);
    System.out.println(user);
}

2.4、between、notBetween

根據(jù)邊界查詢,包含邊界大小

@Test
public void testSelectCount() { 
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.between("age", 20, 30);
    Long count = userMapper.selectCount(queryWrapper);
    System.out.println(count);
}

2.5、allEq

傳入map,多個(gè)條件都必須成立,與無(wú)限eq效果相同

@Test
public void testSelectList() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    Map<String, Object> map = new HashMap<>();
    map.put("id", 2);
    map.put("name", "Jack");
    map.put("age", 20);
    queryWrapper.allEq(map);
    List<User> users = userMapper.selectList(queryWrapper);
    users.forEach(System.out::println);
}

// 等同于
@Test
public void testSelectList() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("id", 2).eq("name", "Jack").eq("age", 20);
    List<User> users = userMapper.selectList(queryWrapper);
    users.forEach(System.out::println);
}

2.6、like、notLike、likeLeft、likeRight

selectMaps返回Map集合列表,此處當(dāng)然也可以使用selectList()來(lái)返回List集合

@Test
public void testSelectMaps() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper
        .notLike("name", "e")
        .likeRight("email", "t");
    List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);
    // 返回值是Map列表
    maps.forEach(System.out::println);
}

2.7、in、notIn、inSql、notinSql、exists、notExists

這里可以通過(guò) inSql 來(lái)實(shí)現(xiàn)子查詢

@Test
public void testSelectObjs() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    //queryWrapper.in("id", 1, 2, 3);
    queryWrapper.inSql("id", "select id from user where id < 3");
    List<Object> objects = userMapper.selectObjs(queryWrapper);
    //返回值 是 Object 列表
    objects.forEach(System.out::println);
}

2.8、or、and

注意:這里使用的是UpdateWrapper不調(diào)用or則默認(rèn)為使用and連,QueryWrapper也是同理

@Test
public void testUpdate1() {
    //修改值
    User user = new User();
    user.setAge(99);
    user.setName("Andy");
    //修改條件
    UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
    userUpdateWrapper
        .like("name", "h")
        .or()
        .between("age", 20, 30);
    int result = userMapper.update(user, userUpdateWrapper);
    System.out.println(result);
}

2.9、嵌套o(hù)r、嵌套and

這里使用了lambda表達(dá)式,or中的表達(dá)式最后翻譯成sql時(shí)會(huì)被加上圓括號(hào)

@Test
public void testUpdate2() {
    //修改值
    User user = new User();
    user.setAge(99);
    user.setName("Andy");
    //修改條件
    UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
    userUpdateWrapper
        .like("name", "h")
        .or(i -> i.eq("name", " 李白 ").ne("age", 20));
    int result = userMapper.update(user, userUpdateWrapper);
    System.out.println(result);
}

2.10、orderBy、orderByDesc、orderByAsc

排序嘛

@Test
public void testSelectListOrderBy() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.orderByDesc("id");
    List<User> users = userMapper.selectList(queryWrapper);
    users.forEach(System.out::println);
}

2.11、last

直接拼接到sql的最后,MySQL中實(shí)現(xiàn)查詢指定條數(shù)數(shù)據(jù)時(shí)頻繁使用

注意:只能調(diào)用一次,多次調(diào)用以最后一次為準(zhǔn),有sql注入的風(fēng)險(xiǎn),請(qǐng)謹(jǐn)慎使用

@Test
public void testSelectListLast() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.last("limit 1");
    List<User> users = userMapper.selectList(queryWrapper);
    users.forEach(System.out::println);
}

2.12、指定要查詢的列

@Test
public void testSelectListColumn() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.select("id", "name", "age");
    List<User> users = userMapper.selectList(queryWrapper);
    users.forEach(System.out::println);
}

2.13、set、setSql

這兩個(gè)是UpdateWrapper特有的,最終的sql會(huì)合并user.setAge(),以及userUpdateWrapper.set()和setSql()中的字段

@Test
public void testUpdateSet() {
    //修改值
    User user = new User();
    user.setAge(99);
    //修改條件
    UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
    userUpdateWrapper
        .like("name", "h")
        .set("name", " 老李頭 ")
        // 除了可以查詢還可以使用set設(shè)置修改的字段
        .setSql(" email = '[email protected]'");
    // 可以有子查詢
    int result = userMapper.update(user, userUpdateWrapper);
}

總結(jié)

以上就是本文介紹的MyBatis-Plus所有內(nèi)容,主要是條件構(gòu)造器的體系和使用,其中案例部分幾乎涵蓋了所有的應(yīng)用場(chǎng)景,大家可以根據(jù)具體的需求靈活組合,單表脫離xml文件豈不是爽。接下來(lái)還會(huì)繼續(xù)帶來(lái)MyBatis-Plus系列文章,敬請(qǐng)期待!

分享到:
標(biāo)簽:MyBatis
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定