MyBatisPlus实现查询功能
Posted 撸码的xiao摩羯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatisPlus实现查询功能相关的知识,希望对你有一定的参考价值。
序言
1.内容介绍
本章介绍了查询API的核心语法实现,分别针对于单条以及多条信息的查询进行了一 一语法描述,同时采用实战演练的方式依次演示了根据ID查询用户信息、实现账户登录操作以及多参数查询等实战案例。
2.理论目标
- 掌握基于Get方式查询的常用API
- 掌握基于List方式查询的常用API
- 掌握原生SQL方式查询的常用API
3.实践目标
- 能熟练使用Get方式完成单条记录的检索业务
- 能熟练使用List方式完成多条记录的检索业务
- 能熟练使用原生sql方式,进行复杂业务的检索
4.实践案例
- 根据ID查询单个用户信息
- 账户登录授权操作
- 多参数查询操作
5.内容目录
- 1.查询API概述
- 2.查询实战(一)
- 3.查询实战(二)
第1节 查询API概述
1. 单条信息查询API
描述 | 方法 | 返回类型 |
---|---|---|
根据ID查询 | getById(Serializable id); | T |
根据 Wrapper,查询一条记录。 结果集,如果是多个会抛出异常, 随机取一条加上限制条件 wrapper.last(“LIMIT 1”) | getOne(Wrapper queryWrapper); | T |
根据 Wrapper,查询一条记录 | getOne(Wrapper queryWrapper, boolean throwEx); | T |
根据 Wrapper,查询一条记录 | getMap(Wrapper queryWrapper); | Map<String, Object> |
根据 Wrapper,查询一条记录 | getObj(Wrapper queryWrapper, Function<? super Object, V> mapper); | V |
类型 | 参数名 | 描述 |
---|---|---|
Serializable | id | 主键ID |
Wrapper | queryWrapper | 实体对象封装操作类QueryWrapper |
boolean | throwEx | 有多个result是否抛出异常 |
T | entity | 实体对象 |
Functin<? super Object,V> | mapper | 转换函数 |
2. 多条信息查询API
描述 | 方法 | 返回类型 |
---|---|---|
查询所有 | list(); | List |
查询列表 | list(Wrapper queryWrapper); | List |
查询(根据ID 批量查询) | listByIds(Collection<? extends Serializable> idList); | Collection |
查询(根据 columnMap 条件) | listByMap(Map<String, Object> columnMap); | Collection |
查询所有列表 | listMaps(); | List<Map<String, Object>> |
查询列表 | listMaps(Wrapper queryWrapper); | List<Map<String, Object>> |
查询全部记录 | listObjs(); | List |
根据 Wrapper 条件,查询全部记录 | listObjs(Wrapper queryWrapper); | List |
类型 | 参数名 | 描述 |
---|---|---|
Wrapper | queryWrapper | 实体对象封装操作类 QueryWrapper |
Collection<? extends Serializable> | idList | 主键ID列表 |
Map<String, Object> | columnMap | 表字段 map 对象 |
第2节 查询实战(一)
1. 根据ID查询
//根据ID查询用户信 User queryById(int id);
@Override public User queryById(int id) User user = this.baseMapper.selectById(id); return user;
//根据id查询用户信息 @RequestMapping("/query/id") public String queryById(@PathVariable int id) //根据id查询对象 User user =userService.queryById(id); //返回json return JSON.toJSONString(user);
2. 实现账户登录
//实现登录 User queryByAccount(String email,String pwd);
@Override public User queryByAccount(String email, String pwd) //封装查询参数 QueryWrapper<User> wrapper = new QueryWrapper<User>(); wrapper.eq("email",email); wrapper.eq("pwd",pwd); //执行查询 User user =getOne(wrapper); return user;
//实现用户登录 @RequestMapping(value="/login",method = RequestMethod.POST) public String login(String email,String pwd) //执行的返回结果 Map<String,Object> map = new HashMap<String,Object>(); try User user =userService.queryByAccount(email,pwd); if(user!=null) map.put("status",200); map.put("data",user); else map.put("status",-1); map.put("message","账号或密码错误!"); catch (Exception ex) map.put("status","500");//执行出现异常 map.put("message","异常信息:"+ex.getMessage()); return JSON.toJSONString(map);
开始实验
第3节 查询实战(二)
1. 实现多参数查询
1.1 编写IUserService.java
//多参数查询 List<User> queryByArgs(int minAge,int maxAge,int beginId);
1.2 编写UserServiceImpl.java
/** * 查询 > beginId,且 年龄在[minAge,maxAge] 区间的用户 * @param minAge * @param maxAge * @param beginId * @return */ @Override public List<User> queryByArgs(int minAge, int maxAge, int beginId) //封装查询参数 QueryWrapper<User> wrapper = new QueryWrapper<User>(); wrapper.gt("id",beginId); wrapper.between("age",minAge,maxAge); //执行查询 List<User> userList = list(wrapper); return userList;
//多参数用户信息查询 @RequestMapping(value="/query",method = RequestMethod.GET) public String queryUsers() //执行的返回结果 Map<String,Object> map = new HashMap<String,Object>(); try List<User> userList =userService.queryByArgs(21,37,4); if(userList!=null&&userList.size()>0) map.put("status",200); map.put("data",userList); else map.put("status",-1); map.put("message","没有检索到相关数据!"); catch (Exception ex) map.put("status","500");//执行出现异常 map.put("message","异常信息:"+ex.getMessage()); return JSON.toJSONString(map);
2. 实现原生SQL查询
- 采用原生sql方式检索id号>2,年龄在【21,37】之间的用户信息
@Select("$sql") List<User> queryByCondition(@Param("sql") String sql);
//原生SQL查询 List<User> queryByArgs(String sql);
@Override public List<User> queryByArgs2(int minAge, int maxAge, int beginId) //封装查询参数 String sql="select id,name,age,email,pwd from user where id>"+beginId+" and age between "+minAge+" and "+maxAge; //执行查询 List<User> userList=this.userMapper.queryByCondition(sql); return userList;
//多参数用户信息查询 @RequestMapping(value="/query",method = RequestMethod.GET) public String queryUsers() //执行的返回结果 Map<String,Object> map = new HashMap<String,Object>(); try List<User> userList =userService.queryByArgs2(21,37,4); if(userList!=null&&userList.size()>0) map.put("status",200); map.put("data",userList); else map.put("status",-1); map.put("message","没有检索到相关数据!"); catch (Exception ex) map.put("status","500");//执行出现异常 map.put("message","异常信息:"+ex.getMessage()); return JSON.toJSONString(map);
开始实验
MybatisPlus使用Wrapper实现查询功能
Wrapper---条件查询器
:使用它可以实现很多复杂的查询
几个案例
环境:
1.条件查询
1.1 查询name不为空的用户,并且邮箱不为空的用户,年龄大于等于12的用户
//查询name不为空的用户,并且邮箱不为空的用户,年龄大于等于12 @Test void selectBy01(){ QueryWrapper<User> wrapper=new QueryWrapper<>(); wrapper .isNotNull("name") //name不为空的用户 .isNotNull("email") //邮箱不为空的用户 .ge("age",12); //年龄大于等于12 userMapper.selectList(wrapper).forEach(System.out::println); }
结果
1.2 查询 name 为 "Jone" 的用户
//查询name为 "Jone" 的用户 @Test void selectBy02(){ QueryWrapper<User> wrapper=new QueryWrapper<>(); wrapper.eq("name","Jone"); //name为 "Jone" 的用户 //查询一个数据,为多个用 selectList 或者 selectByMap User user = userMapper.selectOne(wrapper); System.out.println(user); }
结果
1.3 查询 10 到 20 岁的用户数
//查询 10 到 20 岁的用户数 @Test void selectBy03(){ QueryWrapper<User> wrapper=new QueryWrapper<>(); wrapper.between("age",10,20); Integer count = userMapper.selectCount(wrapper); //查询 10 到 20 岁的用户的结果数 System.out.println(count); }
结果
2.模糊查询
2.1 使用 like + notLike + likeRight
@Test void selectLike01(){ QueryWrapper<User> wrapper=new QueryWrapper<>(); wrapper .notLike("name","To") //名字不包含 To .like("name","o") //名字包含 o 的 //左和右 左:%e 右:e% 两边:%e% //右查询 .likeRight("email","test"); List<Map<String, Object>> users = userMapper.selectMaps(wrapper); users.forEach(System.out::println); }
结果
2.2 子查询
@Test void selectLike02(){ QueryWrapper<User> wrapper=new QueryWrapper<>(); wrapper //一个SQL语句写的子查询 .inSql("id","select id from user where age<20"); List<Object> users = userMapper.selectObjs(wrapper); users.forEach(System.out::println); }
结果
2.3 降序排序
@Test void selectLike03(){ QueryWrapper<User> wrapper=new QueryWrapper<>(); //降序排序 wrapper.orderByDesc("id"); //升序排序 //wrapper.orderByAsc("id"); List<User> users = userMapper.selectList(wrapper); users.forEach(System.out::println); }
结果
以上是关于MyBatisPlus实现查询功能的主要内容,如果未能解决你的问题,请参考以下文章
MybatisPlus 快速构建MybatisPlus 原生mybatis(分页查询) 通用枚举 service 封装 自动填充
MybatisPlus 快速构建MybatisPlus 原生mybatis(分页查询) 通用枚举 service 封装 自动填充