mybatisplus多表查询 wrapper,mybatisplus删除 querywrapper

  mybatisplus多表查询 wrapper,mybatisplus删除 querywrapper

  

目录

gt、ge、lt、le、isNull、isNotNulleq、nebetween、nebetween、allEqlike、not like left、likeRightin、notIn、inSql、notinSql、exists、notExistsor、and嵌套或者,嵌套andorderBy、orderByDesc、orderByAsclast指定要查询的列set、setSql

 

  

gt、ge、lt、le、isNull、isNotNull

大于

 

  例: gt(年龄,18)18岁

  ge 大于等于 =

  例: ge(’年龄,18) 年龄=18

  lt 小于

  例: lt(年龄,18)18岁

  le 小于等于 =

  例:乐(’年龄,18) 年龄=18

  isNUll 字段 IS NULL

  例:为空(名称)名称为空

  isNotNull 字段 IS NOT NULL

  例: isNotNull(名称)名称不为空

  @ test public void query wrapper one(){ query wrapper查询包装器=新查询包装器();queryWrapper .isNull(name ).葛("年龄",23)。isNotNull( email );//逻辑删除int result=用户映射器。删除(查询包装);System.out.println(结果);//最终的语句为:更新用户集已删除=1,其中已删除=0,名称为空,年龄=?并且电子邮件不为空}

  

eq、ne

eq 等于 =

 

  例:当量(’名称,老王) name=老王

  ne 不等于

  例:东北(名称,老王)名称老王

  @ test public void queryWrapperTwo(){查询包装器用户查询包装器=新查询包装器();queryWrapper.eq(name , BNTang );//选择一个:返回的是一条记录,当出现多条时会报错用户用户=用户映射器。选择一个(查询包装器);System.out.println(用户);}

  

between、notBetween

BETWEEN 值1 AND 值2

 

  例:介于(年龄,18,30) 年龄介于18和30之间

  NOT BETWEEN 值1 AND 值2

  例:不在中间(年龄,18,30) 年龄不在18和30之间

  /p>

allEq

allEq 全部 eq(或个别 isNull)

 

  个别参数说明:

  

params: key 为数据库字段名, value 为字段值

 

  如果想表示 null isNull,则在 value 取值的时候传入一个 null, 为 null 时调用 isNull 方法, 为false时则忽略value为null的,也就是不拼接 value 为 null 的查询条件字段

  

例1: allEq({id:1,name:"老王",age:null})→id = 1 and name = '老王' and age is null

 

  例2: allEq({id:1,name:"老王",age:null}, false)→id = 1 and name = '老王'

  

@Testpublic void queryWrapperFour() {    QueryWrapper<User> queryWrapper = new QueryWrapper<>();    Map<String, Object> queryParamsMap = new HashMap<>();    queryParamsMap.put("id", 1373266771933462530L);    queryParamsMap.put("name", "BNTang");    queryParamsMap.put("age", 23);    queryWrapper.allEq(queryParamsMap);    List<User> users = userMapper.selectList(queryWrapper);    users.forEach(System.out::println);}

 

  个别参数说明

  

filter: 过滤函数, 是否允许字段传入比对条件中

 

  params 与 null、IsNull 同上

  

例1: allEq((k,v) -> k.indexOf("a") >= 0, {id:1,name:"老王",age:null})→name = '老王' and age is null

 

  例2: allEq((k,v) -> k.indexOf("a") >= 0, {id:1,name:"老王",age:null}, false)→name = '老王'

  

 

  如上图可看到,只添加了一个 id 查询的条件因为我写的过滤条件为要包含 i 这个字符串,所以只有第一个 key, value 包含了所以就只添加了 id

  

 

  

like、notLike、likeLeft、likeRight

LIKE '%值%'

 

  例: like("name", "王")→name like '%王%'

  NOT LIKE '%值%'

  例: notLike("name", "王")→name not like '%王%'

  LIKE '%值'

  例: likeLeft("name", "王")→name like '%王'

  LIKE '值%'

  例: likeRight("name", "王")→name like '王%'

  

@Testpublic void queryWrapperFive() {    QueryWrapper<User> queryWrapper = new QueryWrapper<>();    queryWrapper            .notLike("name", "BNTang")            .likeRight("email", "zq");    // 返回值是Map列表    List<Map<String, Object>> users = userMapper.selectMaps(queryWrapper);    users.forEach(System.out::println);}

 

  

 

  

in、notIn、inSql、notinSql、exists、notExists

字段 IN (value.get(0), value.get(1), ...)

 

  例: in("age",{1,2,3})→age in (1,2,3)

  字段 NOT IN (value.get(0), value.get(1), ...)

  例: notIn("age",{1,2,3})→age not in (1,2,3)

  字段 IN ( sql语句 )

  例: inSql("age", "1,2,3,4,5,6")→age in (1,2,3,4,5,6)

  例: inSql("id", "select id from table where id < 3")→id in (select id from table where id < 3)

  字段 NOT IN ( sql语句 )

  例: notInSql("age", "1,2,3,4,5,6")→age not in (1,2,3,4,5,6)

  例: notInSql("id", "select id from table where id < 3")→id not in (select id from table where id < 3)

  拼接 EXISTS ( sql语句 )

  例: exists("select id from table where age = 1")→exists (select id from table where age = 1)

  拼接 NOT EXISTS ( sql语句 )

  例: notExists("select id from table where age = 1")→not exists (select id from table where age = 1)

  

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

 

  

 

  

or、and

拼接 OR

 

  注意事项:

  

主动调用or表示紧接着下一个方法不是用and连接!(不调用or则默认为使用and连接)

 

  

例: eq("id",1).or().eq("name","老王")→id = 1 or name = '老王'

 

  OR 嵌套

  例: or(i -> i.eq("name", "李白").ne("status", "活着"))→or (name = '李白' and status <> '活着')

  AND 嵌套

  例: and(i -> i.eq("name", "李白").ne("status", "活着"))→and (name = '李白' and status <> '活着')

  

@Testpublic void queryWrapperSeven() {    // 修改值    User user = new User();    user.setAge(99);    user.setName("BNTang6666");    // 修改条件    UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();    userUpdateWrapper            .like("name", "BNTang")            .or()            .between("age", 20, 30);    int result = userMapper.update(user, userUpdateWrapper);    System.out.println(result);}

 

  

 

  

 

  

嵌套 or、嵌套 and

@Testpublic void queryWrapperEight() { // 修改值 User user = new User(); user.setAge(99); user.setName("BNTang6666"); // 修改条件 UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>(); userUpdateWrapper .like("name", "A") .or(i -> i.eq("name", "BNTang6666").ne("age", 20)); int result = userMapper.update(user, userUpdateWrapper); System.out.println(result);}

 

  

 

  

orderBy、orderByDesc、orderByAsc

排序:ORDER BY 字段, ...

 

  例: orderBy(true, true, "id", "name")→order by id ASC,name ASC

  排序:ORDER BY 字段, ... DESC

  例: orderByDesc("id", "name")→order by id DESC, name DESC

  排序:ORDER BY 字段, ... ASC

  例: orderByAsc("id", "name")→order by id ASC,name ASC

  

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

 

  

 

  

last

无视优化规则直接拼接到 sql 的最后

 

  注意事项:

  

只能调用一次, 多次调用以最后一次为准有 sql 注入的风险, 请谨慎使用

 

  

例: last("limit 1")

 

  

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

 

  

 

  

指定要查询的列

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

 

  

 

  

set、setSql

SQL SET 字段

 

  例: set("name", "老李头")

  例: set("name", "")→数据库字段值变为空字符串

  例: set("name", null)→据库字段值变为null

  设置 SET 部分 SQL

  例: setSql("name = '老李头'")

  

@Testpublic void queryWrapperTwelve() { // 修改值 User user = new User(); user.setAge(10); // 修改条件 UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>(); userUpdateWrapper .like("name", "A") // 除了可以查询还可以使用set设置修改的字段 .set("name", "BNTang") // 可以有子查询 .setSql(" email = 303158131@qq.com"); int result = userMapper.update(user, userUpdateWrapper); System.out.println(result);}

 

  以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行IT。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: