MyBatisPlus
gt、ge、lt、le、isNull、isNotNull
大于 > 例: gt("age", 18) → age > 18 ge 大于等于 >= 例: ge("age", 18) → age >= 18 lt 小于 < 例: lt("age", 18) → age < 18 le 小于等于 <= 例: le("age", 18) → age <= 18 isNUll 字段 IS NULL 例: isNull("name") → name is null isNotNull 字段 IS NOT NULL 例: isNotNull("name") → name is not nulljava
@Test public void queryWrapperOne() { QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper. isNull("name") .ge("age", 23) .isNotNull("email");
eq、ne
eq 等于 = 例: eq("name", "老王") → name = '老王' ne 不等于 <> 例: ne("name", "老王") → name <> '老王'java
@Test public void queryWrapperTwo() { QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("name", "BNTang");
between、notBetween
BETWEEN 值1 AND 值2 例: between("age", 18, 30) → age between 18 and 30 NOT BETWEEN 值1 AND 值2 例: notBetween("age", 18, 30) → age not between 18 and 30java
@Test public void queryWrapperThree() { QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.between("age", 20, 30); Integer count = userMapper.selectCount(queryWrapper); System.out.println(count); }
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 = '老王'java
@Test public 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 同上
如上图可看到,只添加了一个 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 '王%'java
@Test public void queryWrapperFive() { QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper .notLike("name", "BNTang") .likeRight("email", "zq");
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)java
@Test public void queryWrapperSix() { QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.in("id", 1, 2, 3); queryWrapper.inSql("id", "select id from user where id < 3");
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 <> '活着')java
@Test public void queryWrapperSeven() {
嵌套 or、嵌套 and
java
@Test public void queryWrapperEight() {
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 ASCjava
@Test public 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")java
@Test public void queryWrapperTen() { QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.last("limit 1"); List<User> users = userMapper.selectList(queryWrapper); users.forEach(System.out::println); }
指定要查询的列
java
@Test public 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 = '老李头'")java
@Test public void queryWrapperTwelve() {
网址:MyBatisPlus https://www.yuejiaxmz.com/news/view/138492