目录
想学习架构师构建流程请跳转:Java架构师系统架构设计
1 mybatis-plus select查询语句默认是查全部字段,有两种方法可以指定要查询的字段
CREATE TABLE `user` (
`id` bigint(20) NOT NULL COMMENT '主键',
`name` varchar(30) DEFAULT NULL COMMENT '姓名',
`age` int(11) DEFAULT NULL COMMENT '年龄',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
`manager_id` bigint(20) DEFAULT NULL COMMENT '直属上级id',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `manager_fk` (`manager_id`),
CONSTRAINT `manager_fk` FOREIGN KEY (`manager_id`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1、user表只需要查询出name和age两个字段的数据,可以使用queryWrapper的select()方法指定要查询的字段
@Test
public void selectByWrapper10() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.select("name", "age").like("name", "雨");
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
日志输出sql:
DEBUG==> Preparing: SELECT name,age FROM user WHERE name LIKE ?
DEBUG==> Parameters: %雨%(String)
TRACE<== Columns: name, age
TRACE<== Row: 张雨琪, 31
TRACE<== Row: 刘红雨, 31
DEBUG<== Total: 2
2、user表要查询出除manager_id和create_time外其它所有字段的数据,同样也是使用queryWrapper的select()方法
@Test
public void selectByWrapper11() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.select(User.class, info -> !info.getColumn().equals("manager_id")
&& !info.getColumn().equals("create_time"));
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
日志输出sql:
DEBUG==> Preparing: SELECT id,name,age,email FROM user
DEBUG==> Parameters:
TRACE<== Columns: id, name, age, email
TRACE<== Row: 1087982257332887553, 大boss, 40, [email protected]
TRACE<== Row: 1088248166370832385, 王天风, 25, [email protected]
TRACE<== Row: 1088250446457389058, 李艺伟, 28, [email protected]
TRACE<== Row: 1094590409767661570, 张雨琪, 31, [email protected]
TRACE<== Row: 1094592041087729666, 刘红雨, 31, [email protected]
DEBUG<== Total: 5
2 Mybatis plus实现Distinct去重功能
可以使用mybatis自带的语法,去重的话也可以进行分组查询,或者让java处理的set方法
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.select("DISTINCT no,type").orderByAsc("oldlu");
return mapper.selectList(queryWrapper);
查询出后的结果输出类型,可以参考如下:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.select("DISTINCT no,type").orderByAsc("oldlu");
return mapper.selectList(queryWrapper);
3 Mybatis plus实现in操作
如果是List类型的String,例如:List这种类型的,就直接放值就可以了,本文讲的是当你查询到的是一个list集合如何遍历取值,否则要写sql和接口就显得很麻烦。
步骤如下:
//查询到list集合
List<User> userList = userService.selectById(id);
//结果集
List<String> resultList = new ArrayList<>();
//遍历集合取值
userList .forEach(item->{
resultList.add(item.getYouNeedId());
});
//条件构造器in上手使用
QueryWrapper<User> qw = new QueryWrapper<>();
qw.in("you_need_id", resultList);
//这里有个分页的查询,你也可以不用分页,用mybatisplus里面封装的其他方法
IPage<User> userIPage = userMapper.selectPage(page, qw);
//返回查询结果,getRecords也是mybatisplus里面封装的方法
return contractRecordIPage.getRecords();
4 mybatis 转义对照表
这种问题在xml处理sql的程序中经常需要我们来进行特殊处理。
其实很简单,我们只需作如下替换即可避免上述的错误:
< | <= | > | >= | & | ’ | " |
---|---|---|---|---|---|---|
< | <= | > | >= | & | ' | " |
不多说话,代码表示。
<!-- 分页查询-->
<select id="getKaoShiPageList" resultMap="kaoShiBean" parameterType="com.example.demo.kaoshi.beans.kaoShiBean">
select * from tb_pxks_kaoshi
<where>
<if test="zy !=null and zy!= ''">
and zy='${zy}'
</if>
<if test="ksrqFrom !=null and ksrqFrom!= ''">
and ksrq >='${ksrqFrom}'
</if>
<if test="ksrqTo !=null and ksrqTo!= ''">
and ksrq <='${ksrqTo}'
</if>
</where>
order by ksrq desc