日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MybatisPlus学习〖三〗crud接口实现

發布時間:2024/3/13 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MybatisPlus学习〖三〗crud接口实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MybatisPlus學習〖三〗

我們繼續學習mp的增刪改查接口

代碼具體的實現

條件構造器實現

1. 查詢user表中user_name字段模糊查詢’張’,或者user_age年齡大于20歲,按照user_age降序排列,年齡相同的就按照id升序排列

@Testpublic void select_1_ByWrapper(){QueryWrapper<UserDO> queryWrapper=new QueryWrapper<>();queryWrapper.like("user_name","張").or().ge("user_age",20).orderByDesc("user_age").orderByAsc("id");List<UserDO> userDOList=userDOMapper.selectList(queryWrapper);}

利用條件構造器來拼接SQL語句

  • like() : SQL里的like字段
  • or() : 實現拼接一個簡單的or字段在SQL語句里面
  • ge() : 實現拼接一個">=",第一個字段指定數據庫字段名稱,第二個代表值
  • orderByDesc/orderByAsc() : 在語句中拼接orderbyDesc/orderByAsc語句

查詢結果如下
mp已經自動幫我們拼接好了SQL語句并查詢出記錄


2.查詢user表中姓名有張,或者年齡小于30大于18且email不為空的用戶

@Testpublic void select_2_ByWrapper(){QueryWrapper<UserDO> queryWrapper=new QueryWrapper<>();queryWrapper.likeRight("user_name","張").or(wq->wq.lt("user_age",30).gt("user_age",18).isNotNull("user_email"));List<UserDO> userDOList=userDOMapper.selectList(queryWrapper);}

相同的方法就不再一一列舉,這里只列舉未出現的方法的意思

  • likeRight : 相當于like 'xx%'在右邊拼接%,likeLeft就是在參數左邊拼接%
  • gt : 實現拼接>符號,第一個參數為數據庫字段,第二個為>參數
  • isNotNull : 實現拼接xx參數is not null語句

輸出目錄,果然已經拼接上去,這里的or()實現了把后面字段加進括號內的Lambda表達式來實現

DEBUG==> Preparing: SELECT id,user_phone,user_email,user_name,user_age FROM user WHERE (user_name LIKE ? OR ( (user_age < ? AND user_age > ? AND user_email IS NOT NULL) )) DEBUG==> Parameters: 張%(String), 30(Integer), 18(Integer) TRACE<== Columns: id, user_phone, user_email, user_name, user_age TRACE<== Row: 2, 15336155900, dsadas@qq.com, 喬佳, 20 TRACE<== Row: 3, 1312312312312, aiqianqian1@qq.com, 張倩, 27 TRACE<== Row: 4, 1312312312312, aikaikai@qq.com, 張倩, 25 TRACE<== Row: 5, 1312312312312, , 張倩111, 18 DEBUG<== Total: 4

3.查詢(年齡小于30或者email不為空)且名字有張的用戶信息

@Testpublic void select_3_ByWrapper(){QueryWrapper<UserDO> queryWrapper=new QueryWrapper<>();queryWrapper.nested(qw->qw.lt("user_age",30).or().isNotNull("user_email")).likeRight("user_name","張");List<UserDO> userDOList=userDOMapper.selectList(queryWrapper);}
  • lt : 拼接小于符號
  • nested : 實現一開始拼接()里面使用Lambda表達式來實現

輸出目錄如下,SQL語句實現了先拼接()在拼接AND user_name LIKE…

DEBUG==> Preparing: SELECT id,user_phone,user_email,user_name,user_age FROM user WHERE (( (user_age < ? OR user_email IS NOT NULL) ) AND user_name LIKE ?) DEBUG==> Parameters: 30(Integer),%(String) TRACE<== Columns: id, user_phone, user_email, user_name, user_age TRACE<== Row: 3, 1312312312312, aiqianqian1@qq.com, 張倩, 27 TRACE<== Row: 4, 1312312312312, aikaikai@qq.com, 張倩, 25 TRACE<== Row: 5, 1312312312312, , 張倩111, 18 DEBUG<== Total: 3

4.查詢指定字段并且用戶年齡在指定年齡中

@Testpublic void select_4_ByWrapper(){QueryWrapper<UserDO> queryWrapper=new QueryWrapper<>();queryWrapper.select("user_name","user_age","user_email").in("user_age", Arrays.asList(20,6,30,15));List<UserDO> userDOList=userDOMapper.selectList(queryWrapper);}
  • select : 實現查詢指定字段的記錄,參數為數據庫字段名
  • in : 實現了拼接in(x,x,x…),第一個參數為數據庫字段名,第二個參數為一個list包含in里面的內容

輸出目錄如下,SQL語句實現了查詢指定字段并且in(x,x,x…)的記錄

DEBUG==> Preparing: SELECT user_name,user_age,user_email FROM user WHERE (user_age IN (?,?,?,?)) DEBUG==> Parameters: 20(Integer), 6(Integer), 30(Integer), 15(Integer) TRACE<== Columns: user_name, user_age, user_email TRACE<== Row: 喬佳, 20, dsadas@qq.com DEBUG<== Total: 1

5.查詢不為空的字段加進查詢子句中

@Testpublic void select_5_ByWrapper(){String name="王";String age="";QueryWrapper<UserDO> queryWrapper=new QueryWrapper<>();queryWrapper.like(StringUtils.isNotEmpty(name),"user_name",name).like(StringUtils.isNotEmpty(age),"user_age",age);List<UserDO> userDOList=userDOMapper.selectList(queryWrapper);}
  • like : 可以實現帶三個參數的方法,第一個參數若為false就不加指定字段的內容

輸出目錄如下,SQL語句實現了將不為空的字段加進like語句里面

DEBUG==> Preparing: SELECT id,user_phone,user_email,user_name,user_age FROM user WHERE (user_name LIKE ?) DEBUG==> Parameters: %%(String) TRACE<== Columns: id, user_phone, user_email, user_name, user_age TRACE<== Row: 1, 17729020601, 155019@qq.com, 王凱藝, 10 DEBUG<== Total: 1

6.通過實體類查詢實體類有的字段的信息

@Testpublic void select_6_ByWrapper(){UserDO userDO=new UserDO();userDO.setUserAge(20);userDO.setUserName("張倩");QueryWrapper<UserDO> queryWrapper=new QueryWrapper<>(userDO);List<UserDO> userDOList=userDOMapper.selectList(queryWrapper);}
  • 這里我們直接構造了一個對象,將對象傳進去,拼接里面不為空的字段到where中,實現查詢
DEBUG==> Preparing: SELECT id,user_phone,user_email,user_name,user_age FROM user WHERE user_name=? AND user_age=? DEBUG==> Parameters: 張倩(String), 20(Integer) DEBUG<== Total: 0

7.通過selectMap的方式返回一個map查詢你想要的字段信息

@Testpublic void select_7_ByWrapperByMaps(){QueryWrapper<UserDO> queryWrapper=new QueryWrapper<>();queryWrapper.select("user_name","user_phone").like("user_name","張").eq("user_age",18);List<Map<String,Object>> userDOList=userDOMapper.selectMaps(queryWrapper);}
  • eq : 拼接=符號,第一個參數為數據庫字段,第二個參數為拼接=后的內容
  • selectMaps : 這里使用了map來傳遞查詢指定字段記錄,其余字段并不顯示

輸出日志如下,結果為Map的兩個字段的內容

DEBUG==> Preparing: SELECT user_name,user_phone FROM user WHERE (user_name LIKE ? AND user_age = ?) DEBUG==> Parameters: %%(String), 18(Integer) TRACE<== Columns: user_name, user_phone TRACE<== Row: 張倩111, 1312312312312 DEBUG<== Total: 1

8.查詢在查詢條件下的返回記錄數

@Testpublic void select_8_ByWrapperCount(){QueryWrapper<UserDO> queryWrapper=new QueryWrapper<>();queryWrapper.like("user_name","張").le("user_age",30);Integer count=userDOMapper.selectCount(queryWrapper);System.out.println("總記錄數: "+count);}
  • le : 拼接<=符號,數據庫字段+參數內容
  • selectCount : 使用查詢記錄的方法,返回一個查詢的記錄數

輸出日志如下,返回一個記錄數

DEBUG==> Preparing: SELECT COUNT( 1 ) FROM user WHERE (user_name LIKE ? AND user_age <= ?) DEBUG==> Parameters: %%(String), 30(Integer) TRACE<== Columns: COUNT( 1 ) TRACE<== Row: 3 DEBUG<== Total: 1 總記錄數: 3

9.lambda表達式拼接語句防誤寫

@Testpublic void select_9_Lambda(){LambdaQueryWrapper<UserDO> queryWrapper = new QueryWrapper<UserDO>().lambda();queryWrapper.select(UserDO::getId).like(UserDO::getUserName,"張").le(UserDO::getUserAge,30);List<UserDO> list=userDOMapper.selectList(queryWrapper);}
  • new QueryWrapper().lambda() : 這里使用lambda()方法來實現lambda表達式
  • select : (類名:: 參數)來實現 select(“數據庫的字段名”)一樣的方法

輸出日志如下,這里使用lambda表達式來防誤寫數據庫字段

DEBUG==> Preparing: SELECT id FROM user WHERE (user_name LIKE ? AND user_age <= ?) DEBUG==> Parameters: %%(String), 30(Integer) TRACE<== Columns: id TRACE<== Row: 3 TRACE<== Row: 4 TRACE<== Row: 5 DEBUG<== Total: 3

10.實現分頁查詢查詢在條件下若每頁顯示2條記錄,顯示第一頁的記錄

分頁查詢

@Testpublic void select_10_Page(){QueryWrapper<UserDO> queryWrapper=new QueryWrapper<>();queryWrapper.le("user_age",30);Page<UserDO> page=new Page<>(1,2);IPage<UserDO> iPage=userDOMapper.selectPage(page,queryWrapper);System.out.println("總頁數: "+iPage.getPages());System.out.println("總記錄數: "+iPage.getTotal());List<UserDO> records = iPage.getRecords(); // 引用輸出 records.forEach(System.out::println);records.forEach(l-> System.out.println(l));}
  • new Page<>(1,2) : 第一個參數為第幾頁,第二個參數為一頁顯示的數量
  • selectPage : 實現分頁查詢,第一個參數為設置好的page對象,第二個參數為構造器內容

輸出日志如下,這里我們輸出了總頁數與總記錄

DEBUG==> Preparing: SELECT COUNT(1) FROM user WHERE (user_age <= ?) DEBUG==> Parameters: 30(Integer) TRACE<== Columns: COUNT(1) TRACE<== Row: 5 DEBUG==> Preparing: SELECT id,user_phone,user_email,user_name,user_age FROM user WHERE (user_age <= ?) LIMIT ?,? DEBUG==> Parameters: 30(Integer), 0(Long), 2(Long) TRACE<== Columns: id, user_phone, user_email, user_name, user_age TRACE<== Row: 1, 17729020601, 155019@qq.com, 王凱藝, 10 TRACE<== Row: 2, 15336155900, dsadas@qq.com, 喬佳, 20 DEBUG<== Total: 2 總頁數: 3 總記錄數: 5 UserDO(id=1, userName=王凱藝, userPhone=17729020601, userAge=10, userEmail=155019@qq.com) UserDO(id=2, userName=喬佳, userPhone=15336155900, userAge=20, userEmail=dsadas@qq.com)

11.根據id更新用戶信息

@Testpublic void select_11_updateById(){UserDO userDO=new UserDO();userDO.setId(4);userDO.setUserAge(25);userDO.setUserEmail("aikaikai@qq.com");int rows=userDOMapper.updateById(userDO);System.out.println("影響了: "+rows+" 行");}
  • updateById : 這里我們傳入一個實體類對象,根據id來更新實體類里存在的字段名稱,返回一個影響的記錄數
DEBUG==> Preparing: UPDATE user SET user_email=?, user_age=? WHERE id=? DEBUG==> Parameters: aikaikai@qq.com(String), 25(Integer), 4(Integer) DEBUG<== Updates: 1 影響了: 1

12.更新用戶年齡和郵箱被更新用戶信息為張倩,郵箱為qianqian@qq.com

@Testpublic void select_12_update(){UpdateWrapper<UserDO> userDOUpdateWrapper=new UpdateWrapper<>();userDOUpdateWrapper.eq("user_name","張倩").eq("user_email","qianqian@qq.com");UserDO userDO=new UserDO();userDO.setUserAge(26);userDO.setUserEmail("aiqianqian@qq.com");int rows=userDOMapper.update(userDO,userDOUpdateWrapper);System.out.println("影響記錄數: "+rows);}
  • new UpdateWrapper<>() : 這里使用這個構造方法來拼接where后的sql語句
  • update() : 這個方法有兩個參數,第一個參數傳入一個實體類,包含實體類里有的字段都會更新,第二個參數使用構造器來拼接where后的字段

輸出日志如下,這里我們輸出了update方法

DEBUG==> Preparing: UPDATE user SET user_email=?, user_age=? WHERE (user_name = ? AND user_email = ?) DEBUG==> Parameters: aiqianqian@qq.com(String), 26(Integer), 張倩(String), qianqian@qq.com(String) DEBUG<== Updates: 0 影響記錄數: 0

13.當更新少數字段的時候可以用set方法

@Testpublic void select_13_update(){UpdateWrapper<UserDO> userDOUpdateWrapper=new UpdateWrapper<>();userDOUpdateWrapper.eq("user_name","張倩").eq("user_email","aiqianqian@qq.com").set("user_age",27);int rows=userDOMapper.update(null,userDOUpdateWrapper);System.out.println("影響記錄數: "+rows);}
  • set : 使用這個方法可以使更新少數字段更為簡便,數據庫字段名+參數

輸出日志如下,這里我們我們的update跟的第一個參數實體類我們要設置為空才可以

DEBUG==> Preparing: UPDATE user SET user_age=? WHERE (user_name = ? AND user_email = ?) DEBUG==> Parameters: 27(Integer), 張倩(String), aiqianqian@qq.com(String) DEBUG<== Updates: 0 影響記錄數: 0

14.Lambda表達式更新用戶信息

@Testpublic void select_14_updateLambda(){LambdaUpdateWrapper<UserDO> updateWrapper = new UpdateWrapper<UserDO>().lambda();updateWrapper.eq(UserDO::getUserName,"張倩").eq(UserDO::getUserAge,27).set(UserDO::getUserEmail,"aiqianqian1@qq.com");int rows=userDOMapper.update(null,updateWrapper);System.out.println("影響記錄數: "+rows);}

這里我們跟之前lambda表達式一樣,引用(類名::方法名)就可以指定數據庫字段

DEBUG==> Preparing: UPDATE user SET user_email=? WHERE (user_name = ? AND user_age = ?) DEBUG==> Parameters: aiqianqian1@qq.com(String), 張倩(String), 27(Integer) DEBUG<== Updates: 1 影響記錄數: 1

15.根據id刪除信息返回刪除條數

@Testpublic void select_15_deleteById(){`在這里插入代碼片`int rows=userDOMapper.deleteById(6);System.out.println("刪除條數 :"+rows+" 條");}
  • deleteById : 刪除指定id記錄,返回刪除的記錄數
DEBUG==> Preparing: DELETE FROM user WHERE id=? DEBUG==> Parameters: 6(Integer) DEBUG<== Updates: 0 刪除條數 :0

16.根據map設置進去的參數刪除符合條件的記錄

@Testpublic void select_16_deleteByMap(){Map<String,Object> map=new HashMap<>();map.put("user_name","測試");map.put("user_age",25);int rows=userDOMapper.deleteByMap(map);System.out.println("刪除條數 :"+rows+" 條");// 下一個方法是批量刪除id為list里的記錄,返回刪除記錄數// int row=userDOMapper.deleteBatchIds(Arrays.asList(7));}
  • deleteByMap : 根據map里面的字段來刪除指定記錄,返回了一個刪除記錄數

輸出日志如下,這里輸出了刪除語句

DEBUG==> Preparing: DELETE FROM user WHERE user_name = ? AND user_age = ? DEBUG==> Parameters: 測試(String), 25(Integer) DEBUG<== Updates: 0 刪除條數 :0

17.Lambda表達式拼接刪除語句

@Testpublic void select_17_deleteLambda(){LambdaQueryWrapper<UserDO> queryWrapper = new QueryWrapper<UserDO>().lambda();queryWrapper.eq(UserDO::getUserName,"測試").eq(UserDO::getUserAge,15);int rows=userDOMapper.delete(queryWrapper);System.out.println("刪除條數 :"+rows+" 條");}

輸出日志如下,這里運用了lambda表達式拼接SQL語句,返回一個刪除記錄數

DEBUG==> Preparing: DELETE FROM user WHERE (user_name = ? AND user_age = ?) DEBUG==> Parameters: 測試(String), 15(Integer) DEBUG<== Updates: 0 刪除條數 :0

制作不易,轉載請標注~

總結

以上是生活随笔為你收集整理的MybatisPlus学习〖三〗crud接口实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。