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

参数说明

类型参数名描述
Serializableid主键ID
WrapperqueryWrapper实体对象封装操作类QueryWrapper
booleanthrowEx有多个result是否抛出异常
Tentity实体对象
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

参数说明

类型参数名描述
WrapperqueryWrapper实体对象封装操作类 QueryWrapper
Collection<? extends Serializable>idList主键ID列表
Map<String, Object>columnMap表字段 map 对象

第2节 查询实战(一)

1. 根据ID查询

1.1 IUserService.java

 

//根据ID查询用户信 User queryById(int id);

1.2 UserServiceImpl.java

 

@Override public User queryById(int id) User user = this.baseMapper.selectById(id); return user;

1.3 编写UserController.java

 

//根据id查询用户信息 @RequestMapping("/query/id") public String queryById(@PathVariable int id) //根据id查询对象 User user =userService.queryById(id); //返回json return JSON.toJSONString(user);

1.4 执行,观察效果

2. 实现账户登录

2.1 编写IUserService.java

 

//实现登录 User queryByAccount(String email,String pwd);

2.2 编写UserServiceImpl.java

 

@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;

2.3 编写UserController.java

 

//实现用户登录 @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);

2.4 执行,观察效果

开始实验

第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;

1.3 编写UserController.java

 

//多参数用户信息查询 @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);

1.4 执行,观察效果

2. 实现原生SQL查询

需求说明

  • 采用原生sql方式检索id号>2,年龄在【21,37】之间的用户信息

2.1 编写UserMapper.java

 

@Select("$sql") List<User> queryByCondition(@Param("sql") String sql);

2.2 编写IUserService.java

 

//原生SQL查询 List<User> queryByArgs(String sql);

2.3 编写UserServiceImpl.java

 

@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;

2.4 编写UserController.java

 

//多参数用户信息查询 @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);

2.5 执行,观察效果

开始实验

MybatisPlus使用Wrapper实现查询功能

Wrapper---条件查询器

  :使用它可以实现很多复杂的查询

 

几个案例

 

 环境:

  参照博客MybatisPlus入门程序

 

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 封装 自动填充

Spring和SpringBoot整合MybatisPlus配置分页查询

mybatis-plus分页查询

Mybatis分页对比MybatisPlus分页

SpringBoot+Mybatis+MybatisPlus整合实现基本的CRUD操作