序言
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); }
开始实验