MyBatis中Mapper.xml文件编写及Wrapper使用

1.特殊字符转义

符号原符号替换符号
小于<&lt;
小于等于<=&lt;=
大于>&gt;
大于等于>=&gt;=
不等于<>&lt;&gt;
&&amp;
单引号'&apos;
双引号"&quot;
大于等于>=<![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());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值