Mybatis-Plus之四種lambda方式
lambda四種表達(dá)形式
前言
使用了lambda表達(dá)式 可以通過方法引用的方式來使用實(shí)體字段名的操作,避免直接寫數(shù)據(jù)庫(kù)表字段名時(shí)的錯(cuò)寫名字;
一、LambdaQueryWrapper<>
/**
* lambda 條件構(gòu)造器
* 生成的sql語(yǔ)句 SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? AND age < ?
*/
@Test
public void selectLambda() {
//創(chuàng)建lambda 條件構(gòu)造器 的三種方法
// LambdaQueryWrapper<User> lambda2 = new LambdaQueryWrapper<>();
// LambdaQueryWrapper<User> lambda = new QueryWrapper<User>().lambda();
LambdaQueryWrapper<User> lambda3 = Wrappers.<User>lambdaQuery();
lambda3.like(User::getName, "雨").lt(User::getAge, 40);
List<User> users = userMapper.selectList(lambda3);
users.forEach(System.out::println);
}
二、QueryWrapper<實(shí)體>().lambda()
/**
* 名字為王姓并且(年齡小于40并且郵箱不為空)
* name like '王%' and (age <40 or email in not null)
* 生成的sql語(yǔ)句 SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? AND age < ?
*/
@Test
public void selectLambda2() {
LambdaQueryWrapper<User> lambda3 = Wrappers.<User>lambdaQuery();
lambda3.likeRight(User::getName, "王").and(qw -> qw.lt(User::getAge, 40).or().isNotNull(User::getEmail));
List<User> users = userMapper.selectList(lambda3);
users.forEach(System.out::println);
}
三、Wrappers.<實(shí)體>lambdaQuery(),Wrappers.lambdaQuery(實(shí)體.class)
Wrappers.<實(shí)體>lambdaQuery()
/**
* 自定義sql 使用
* Dao層 代碼:
*
* @Select("select * from ${ew.customSqlSegment}")
* List<User> selectAll(@Param(Constants.WRAPPER)Wrapper<User> wrapper);
*/
@Test
public void selectLambda4my() {
LambdaQueryWrapper<User> lambda3 = Wrappers.<User>lambdaQuery();
lambda3.likeRight(User::getName, "王").and(qw -> qw.lt(User::getAge, 40).or().isNotNull(User::getEmail));
List<User> users = userMapper.selectAll(lambda3);
users.forEach(System.out::println);
}
Wrappers.lambdaQuery(實(shí)體.class)
四、LambdaQueryChainWrapper<實(shí)體>(xxxxMapper)
/**
* lambda 條件構(gòu)造器第四種創(chuàng)建方式 MP 3.0.7 新增的方式
* 生成的sql語(yǔ)句 SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? AND age >= ?
* 這個(gè)例子可以看出 代碼更簡(jiǎn)潔了
* 生成的sql語(yǔ)句 SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE ? AND age >= ?
*/
@Test
public void selectLambda3() {
List<User> users = new LambdaQueryChainWrapper<User>(userMapper)
.like(User::getName, "雨").ge(User::getAge, 20).list();
users.forEach(System.out::println);
}
QueryWrapper、LambdaQueryWrapper以及LambdaQueryChainWrapper用法
一、QueryWrapper
.like("email", "24252") //email對(duì)應(yīng)數(shù)據(jù)庫(kù)中列名
/**
* 條件構(gòu)造器 查詢操作
*/
@Test
void TestQueryWrapperSelect() {
//1、條件用法
List<User> userList = userMapper.selectList(new QueryWrapper<User>()
.like("email", "24252")
.between("age", 20, 22)
.or()
.eq("name", "zcx")
);
System.out.println("userList:" + userList);
//2、排序用法
List<User> users = userMapper.selectList(new QueryWrapper<User>()
.eq("nick_name", "xx")
.orderByAsc("age") //升序
// .orderByDesc("age") //降序
.last("limit 0,3") //last用法:在sql末尾添加sql語(yǔ)句,有sql注入風(fēng)險(xiǎn)
);
System.out.println("users:"+users);
}
二、LambdaQueryWrapper
queryWrapper.eq(User::getName,"liangd1"); //可以通過Lambda獲取數(shù)據(jù)庫(kù)列名
@Test
void TestLambdaQueryWrapper() {
//1、查詢單條
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getName,"liangd1");
User selectOne = userMapper.selectOne(queryWrapper);
System.out.println(selectOne);
//2、查詢list以及統(tǒng)計(jì)條數(shù)
queryWrapper.eq(User::getName, "zcx");
List<User> userList = userMapper.selectList(queryWrapper);
System.out.println("userList:" + userList);
Integer result = userMapper.selectCount(queryWrapper);
System.out.println("result:" + result);
}
三、LambdaQueryChainWrapper
//鏈?zhǔn)讲樵兎绞?/span>
User one = new LambdaQueryChainWrapper<>(userMapper)
.eq(User::getName, "liangd1")
.one();
@Test
void TestLambdaQueryChainWrapper() {
//1、eq查詢單條
User one = new LambdaQueryChainWrapper<>(userMapper)
.eq(User::getName, "liangd1")
.one();
System.out.println("UserOne:" + one);
//2、查詢list
List<User> users = new LambdaQueryChainWrapper<>(userMapper)
.eq(User::getName, "zcx")
.list();
System.out.println("UserList:" + users);
//3、模糊查詢
List<User> LikeList = new LambdaQueryChainWrapper<>(userMapper)
.like(User::getEmail, "test")
.list();
System.out.println("LikeUser:" + LikeList);
}
QueryWrapper及LambdaQueryWrapper
實(shí)體類
@Data
public class BannerItem {
private Long id;
private String name;
private String img;
private String keyword;
private Integer type;
private Long bannerId;
}
QueryWrapper
最基礎(chǔ)的使用方式是這樣
// 查詢條件構(gòu)造器
QueryWrapper<BannerItem> wrapper = new QueryWrapper<>();
wrapper.eq("banner_id", id);
// 查詢操作
List<BannerItem> bannerItems = bannerItemMapper.selectList(wrapper);
然后我們可以引入lambda,避免我們?cè)诖a中寫類似的于banner_id
的硬編碼
QueryWrapper<BannerItem> wrapper = new QueryWrapper<>();
wrapper.lambda().eq(BannerItem::getBannerId, id);
List<BannerItem> bannerItems = bannerItemMapper.selectList(wrapper);
LambdaQueryWrapper
為了簡(jiǎn)化lambda的使用,我們可以改寫成LambdaQueryWrapper構(gòu)造器,語(yǔ)法如下:
兩種寫法
new QueryWrapper().lambda();
Wrappers.lambdaQuery();
LambdaQueryWrapper<BannerItem> wrapper = new QueryWrapper<BannerItem>().lambda();
// LambdaQueryWrapper<BannerItem> wrapper = Wrappers.lambdaQuery(); // 兩種寫法
wrapper.eq(BannerItem::getBannerId, id);
List<BannerItem> bannerItems = bannerItemMapper.selectList(wrapper);
我們可以再次將QueryWrapper.lambda()
簡(jiǎn)化,變成這個(gè)樣子
BannerItem bannerItem = new LambdaQueryChainWrapper<>(bannerItemMapper)
.eq(BannerItem::getId, id)
.one();
鏈?zhǔn)讲樵?/h3>
MyBatis-Plus還提供了一種鏈?zhǔn)讲樵兊姆绞?,和上面的代碼效果一樣。
但是這種寫法偏向于炫技,可讀性沒有上面的代碼強(qiáng),大家可以根據(jù)需要自行選擇方式。
List<BannerItem> bannerItems = new LambdaQueryChainWrapper<>(bannerItemMapper)
.eq(BannerItem::getBannerId, id)
.list();
如果只想查詢一條記錄,例如通過id查詢某條記錄的詳情,使用.one()
即可,例如文章來源:http://www.zghlxwxcb.cn/news/detail-410226.html
BannerItem bannerItem = new LambdaQueryChainWrapper<>(bannerItemMapper)
.eq(BannerItem::getId, id)
.one();
lambdaQueryWrapper中常用方法
文章來源地址http://www.zghlxwxcb.cn/news/detail-410226.html
到了這里,關(guān)于Mybatis-Plus之四種lambda方式LambdaQueryWrapper,QueryWrapper<實(shí)體>().lambda(),LambdaQueryChainWrapper<實(shí)體>的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!