1.特殊字符转义
符号 | 原符号 | 替换符号 |
---|---|---|
小于 | < | < |
小于等于 | <= | <= |
大于 | > | > |
大于等于 | >= | >= |
不等于 | <> | <> |
与 | & | & |
单引号 | ' | ' |
双引号 | " | " |
大于等于 | >= | <![CDATA[ >= ]]> |
小于等于 | <= | <![CDATA[ <= ]]> |
不等于 | <> | <![CDATA[ <> ]]> |
2.QueryWrapper使用
QueryWrapper<User> queryWrapper = new QueryWrapper<>(); //eq:等于= queryWrapper.eq(User.COL_AGE,30); //ne:不等于<> queryWrapper.ne(User.COL_AGE,30); //gt:大于>,lt:小于< queryWrapper.gt(User.COL_AGE,21); queryWrapper.lt(User.COL_AGE,28); //ge:大于等于>=,le:小于等于<= queryWrapper.ge(User.COL_AGE,21); queryWrapper.le(User.COL_AGE,28); //like:模糊查询,like queryWrapper.like(User.COL_EMAIL,"1833296"); //likeLeft:已知字段信息结尾部分的模糊查询,如%dou.com;likeRight:已知字段信息开头部分的模糊查询,如test%; queryWrapper.likeLeft(User.COL_EMAIL,"dou.com"); queryWrapper.likeRight(User.COL_EMAIL,"test"); //notLike:模糊查询 NOT LIKE queryWrapper.notLike(User.COL_EMAIL,"baomidou"); //in:IN查询;notIn:NOT IN查询 queryWrapper.in(User.COL_AGE,30); queryWrapper.notIn(User.COL_AGE,30); //isNull:NULL值查询:如下边sql条件:email IS NULL OR email = ''; queryWrapper.isNull(User.COL_EMAIL).or().eq(User.COL_EMAIL,""); //isNotNull:IS NOT NULL;如下边sql条件:email IS NOT NULL AND email <> '' queryWrapper.isNotNull(User.COL_EMAIL).ne(User.COL_EMAIL,"");
UserDto userDto = new UserDto(); userDto.setName("haibo"); if(StringUtils.isNotBlank(userDto.getName())){ queryWrapper.eq(User.COL_NAME,userDto.getName()); } //不再用if去做判断,queryWrapper里有相关作为判断条件的参数。 queryWrapper.eq(StringUtils.isNotBlank(userDto.getName()),User.COL_NAME,userDto.getName());
QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.eq(User.COL_IS_DELETE, BaseConstants.ConstantNumber.CONSTANT_NUMBER_0); //groupBy的使用 wrapper.groupBy(User.COL_AGE); //having的使用 wrapper.groupBy(User.COL_DEPT_CODE) .select("dept_code,count(distinct name) as number_count") .having("number_count >= 2"); //orderByAsc:升序 orderByDesc:降序 wrapper.orderByAsc(User.COL_AGE); wrapper.orderByDesc(User.COL_AGE,User.COL_DEPT_CODE);
//组装查询条件:实际执行条件:SELECT id,name,age,email,dept_code,is_delete FROM user WHERE (is_delete = ? AND EXISTS (select id from user where age = 18)) //EXISTS:条件语句:如果查询的sql有结果,则EXISTS()则为TRUE,只是存在或不存在,存在,则条件成立,再按其他where条件查找记录,不存在则条件不成立,整个sql查不到东西。 /** * 一般使用方法:举例 *注意:实际应用中,我们希望查询 user 表中的 user_id 在 user_contact 表中存在,说明用户存在联系方式。如下: SELECT user_id,name,sex,age,face,salary,borthday FROM `user` u WHERE (EXISTS (select id from user_contact where user_id=u.user_id)); *上面 SQL 语句只返回 user 表的 user_id 在 user_contact 表中存在的 user 记录。 */ wrapper.exists("select id from user where age = 18"); wrapper.notExists("select id from user where age = 30");
//between:包含边界范围,如下边的18和24. wrapper.between(User.COL_AGE,18,24); //wrapper.notBetween():不包含边界范围 wrapper.notBetween(User.COL_AGE,18,20).notBetween(User.COL_AGE,28,30); //last:sql尾部加sql语句 wrapper.last("limit 0,3"); //wrapper.select():设置查询的字段信息 wrapper.select(User.COL_NAME,User.COL_AGE,User.COL_DEPT_CODE);
/and or 的使用:前后关联的时候直接加xxx.and().xxx、xxx.or().xxx,条件隔开的时候直接把条件放到and(xxx)、or(xxx)括号里。 SELECT id,name,age,email,dept_code,is_delete FROM user WHERE (is_delete = ? AND email LIKE ? AND (age >= ? OR age = ? OR (name = ? AND dept_code = ?))) wrapper.like(User.COL_EMAIL,"test") .and(w->{ w.ge(User.COL_AGE,20).or().eq(User.COL_AGE,12).or(w1->{ w1.eq(User.COL_NAME,"test_test").eq(User.COL_DEPT_CODE,107); }); });
//apply:1.可用于数据库函数,如:query.apply("date_format(create_time,'%Y-%m-%d') = {0}", "2020-08-08");2.可用于条件sql拼接; //wrapper.apply("name like {0}","haibo"); //过于复杂的sql自己写
wrapper分页:
Page<User> page = new Page<>(); page.setCurrent(2); page.setSize(3); LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); Page<User> userPage = userMapper.selectPage(page, wrapper); System.out.println(userPage.getRecords());