MybatisPlus的各种查询方式!

前端之家收集整理的这篇文章主要介绍了MybatisPlus的各种查询方式!前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

注:本文代码样例及sql脚本均已上传至gitee:spring-boot-mybatis-plus学习

@H_301_34@基本查询
  1. /**
  2. * id=?
  3. */
  4. @Test
  5. void selectById() {
  6. User user = mapper.selectById(1087982257332887553L);
  7. System.out.println(user);
  8. }
  9. /**
  10. * id IN ( ?,?,? )
  11. */
  12. @Test
  13. void retrieveByIds() {
  14. List<User> users = mapper.selectBatchIds(Arrays.asList(8,9,10));
  15. users.forEach(System.out::println);
  16. }
  17. /**
  18. * 根据map查询,key为column,value为具体的值
  19. * name = ? AND age = ?
  20. */
  21. @Test
  22. void retrieveByMap() {
  23. Map<String,Object> map = new HashMap<>();
  24. map.put("name","大boss");
  25. map.put("age","40");
  26. List<User> users = mapper.selectByMap(map);
  27. users.forEach(System.out::println);
  28. }

条件构造器查询

地址: 条件构造器

  1. /**
  2. * 名字中包含雨并且年龄小于40
  3. * name like '%雨%' and age<40
  4. */
  5. @Test
  6. void selectByWrapper1() {
  7. QueryWrapper<User> wrapper = new QueryWrapper<>();
  8. wrapper.like("name","雨")
  9. .lt("age",40);
  10. List<User> users = mapper.selectList(wrapper);
  11. users.forEach(System.out::println);
  12. }
  13. /**
  14. * 名字中包含雨年并且龄大于等于20且小于等于40并且email不为空
  15. * name like '%雨%' and age between 20 and 40 and email is not null
  16. */
  17. @Test
  18. void selectByWrapper2() {
  19. QueryWrapper<User> wrapper = new QueryWrapper<>();
  20. wrapper.like("name","雨")
  21. .between("age",20,40)
  22. .isNotNull("email");
  23. List<User> users = mapper.selectList(wrapper);
  24. users.forEach(System.out::println);
  25. }
  26. /**
  27. * 名字为王姓或者年龄大于等于25,按照年龄降序排列,年龄相同按照id升序排列
  28. * name like '王%' or age>=25 order by age desc,id asc
  29. */
  30. @Test
  31. void selectByWrapper3() {
  32. QueryWrapper<User> wrapper = new QueryWrapper<>();
  33. wrapper.likeRight("name","王")
  34. .or().ge("age",25)
  35. .orderByDesc("age")
  36. .orderByAsc("id");
  37. List<User> users = mapper.selectList(wrapper);
  38. users.forEach(System.out::println);
  39. }
  40. /**
  41. * 创建日期为2019年2月14日并且直属上级为名字为王姓
  42. * date_format(create_time,'%Y-%m-%d')='2019-02-14' and
  43. * manager_id in (select id from user where name like '王%')
  44. */
  45. @Test
  46. void selectByWrapper4() {
  47. QueryWrapper<User> wrapper = new QueryWrapper<>();
  48. wrapper.apply("date_format(create_time,'%Y-%m-%d')={0}","2019-02-14")
  49. .insql("manager_id","select id from user where name like '王%'");
  50. List<User> users = mapper.selectList(wrapper);
  51. users.forEach(System.out::println);
  52. }
  53. /**
  54. * and中传入lambda
  55. * <p>
  56. * 名字为王姓并且(年龄小于40或邮箱不为空)
  57. * name like '王%' and (age<40 or email is not null)
  58. */
  59. @Test
  60. void selectByWrapper5() {
  61. QueryWrapper<User> wrapper = new QueryWrapper<>();
  62. wrapper.likeRight("name","王").
  63. and(wq -> wq.lt("age",40)
  64. .or().isNotNull("email"));
  65. List<User> users = mapper.selectList(wrapper);
  66. users.forEach(System.out::println);
  67. }
  68. /**
  69. * 名字为王姓或者(年龄小于40并且年龄大于20并且邮箱不为空)
  70. * name like '王%' or (age<40 and age>20 and email is not null)
  71. */
  72. @Test
  73. void selectByWrapper6() {
  74. QueryWrapper<User> wrapper = new QueryWrapper<>();
  75. wrapper.likeRight("name","王").
  76. or(wq -> wq.lt("age",40)
  77. .gt("age",20)
  78. .isNotNull("email"));
  79. List<User> users = mapper.selectList(wrapper);
  80. users.forEach(System.out::println);
  81. }
  82. /**
  83. * ( 年龄小于40或邮箱不为空)并且名字为王姓
  84. * (age<40 or email is not null) and name like '王%'
  85. */
  86. @Test
  87. void selectByWrapper7() {
  88. QueryWrapper<User> wrapper = new QueryWrapper<>();
  89. wrapper.nested(wq -> wq.lt("age",40)
  90. .or().isNotNull("email"))
  91. .likeRight("name","王");
  92. List<User> users = mapper.selectList(wrapper);
  93. users.forEach(System.out::println);
  94. }
  95. /**
  96. * 年龄为30、31、34、35
  97. */
  98. @Test
  99. void selectByWrapper8() {
  100. QueryWrapper<User> wrapper = new QueryWrapper<>();
  101. wrapper.in("age",Arrays.asList(30,31,34,35));
  102. List<User> users = mapper.selectList(wrapper);
  103. users.forEach(System.out::println);
  104. }
  105. /**
  106. * 只返回满足条件的其中一条语句即可 limit 1
  107. */
  108. @Test
  109. void selectByWrapper9() {
  110. QueryWrapper<User> wrapper = new QueryWrapper<>();
  111. wrapper.in("age",35)).last("limit 1");
  112. List<User> users = mapper.selectList(wrapper);
  113. users.forEach(System.out::println);
  114. }

指定列与排除列

  1. /**
  2. * 查询指定列
  3. * SELECT id,name FROM user WHERE (name LIKE ?)
  4. */
  5. @Test
  6. void selectPart1() {
  7. QueryWrapper<User> wrapper = new QueryWrapper<>();
  8. wrapper.select("id","name").like("name","雨");
  9. List<User> users = mapper.selectList(wrapper);
  10. users.forEach(System.out::println);
  11. }
  12. /**
  13. * 排除指定列
  14. * SELECT id,name,age,manager_id FROM user WHERE (name LIKE ?)
  15. */
  16. @Test
  17. void selectPart2() {
  18. QueryWrapper<User> wrapper = new QueryWrapper<>();
  19. wrapper.select(User.class,info -> !info.getColumn().equals("create_time") &&
  20. !info.getColumn().equals("email")
  21. ).like("name","雨");
  22. List<User> users = mapper.selectList(wrapper);
  23. users.forEach(System.out::println);
  24. }

Condition处理参数

  1. @Test
  2. void testCondition(){
  3. String name = "王";
  4. String email = "";
  5. //withOutCondition(name,email);
  6. withCondition(name,email);
  7. }
  8. private void withOutCondition(String name,String email){
  9. QueryWrapper<User> wrapper = new QueryWrapper<>();
  10. if(StringUtils.isNotBlank(name)){
  11. wrapper.like("name",name);
  12. }
  13. if(StringUtils.isNotBlank(email)){
  14. wrapper.like("email",email);
  15. }
  16. List<User> users = mapper.selectList(wrapper);
  17. users.forEach(System.out::println);
  18. }
  19. private void withCondition(String name,String email){
  20. QueryWrapper<User> wrapper = new QueryWrapper<>();
  21. wrapper.like(StringUtils.isNotBlank(name),"name",name)
  22. .like(StringUtils.isNotBlank(email),"email",email);
  23. List<User> users = mapper.selectList(wrapper);
  24. users.forEach(System.out::println);
  25. }

以实体作为参数

  1. /**
  2. * WHERE name=? AND age=?
  3. * 以实体为参数 和普通设置参数 互不干扰,都会存在,使用时需慎重
  4. * 以实体为参数,默认是等值的,需要使用@TableField注解,并注明sqlCondition
  5. */
  6. @Test
  7. void selectByWrapperEntity(){
  8. User user = new User();
  9. user.setName("天乔巴夏");
  10. user.setAge(20);
  11. QueryWrapper<User> wrapper = new QueryWrapper<>(user);
  12. List<User> users = mapper.selectList(wrapper);
  13. users.forEach(System.out::println);
  14. }
  15. @TableField(value = "name",condition = sqlCondition.LIKE) //指定字段名
  16. private String name;

AllEq的使用

  1. @Test
  2. void selectByWrapperAllEq(){
  3. QueryWrapper<User> wrapper = new QueryWrapper<>();
  4. Map<String,Object> params = new HashMap<>();
  5. params.put("name","天乔巴夏");
  6. params.put("age",null); // age is null,可以通过 下面这句设置 false
  7. wrapper.allEq(params,false);
  8. List<User> users = mapper.selectList(wrapper);
  9. users.forEach(System.out::println);
  10. }
  11. @Test
  12. void selectByWrapperAllEq2() {
  13. QueryWrapper<User> wrapper = new QueryWrapper<>();
  14. Map<String,可以通过 下面这句设置 false
  15. wrapper.allEq((k,v) -> !k.equals("name"),params,false);
  16. List<User> users = mapper.selectList(wrapper);
  17. users.forEach(System.out::println);
  18. }

自定义查询

注解形式

  1. public interface UserMapper extends BaseMapper<User> {
  2. @Select("select * from user ${ew.customsqlSegment}")
  3. List<User> selectAll(@Param(Constants.WRAPPER)Wrapper<User> wrapper);
  4. }
  5. /**
  6. * 测试自定义方法 注解
  7. */
  8. @Test
  9. void selectByCustomAnno(){
  10. QueryWrapper<User> wrapper = new QueryWrapper<>();
  11. wrapper.eq("name","天乔巴夏");
  12. List<User> users = mapper.selectAll(wrapper);
  13. users.forEach(System.out::println);
  14. }

xml形式

  1. public interface UserMapper extends BaseMapper<User> {
  2. List<User> selectAll2(@Param(Constants.WRAPPER)Wrapper<User> wrapper);
  3. }
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.hyh.mybatisplus.mapper.UserMapper">
  4. <select id="selectAll2" resultType="com.hyh.mybatisplus.entity.User">
  5. select * from user ${ew.customsqlSegment}
  6. </select>
  7. </mapper>

其他的查询

  1. /**
  2. * 优雅返回指定字段的结果
  3. */
  4. @Test
  5. void selectByWrapperMaps1() {
  6. QueryWrapper<User> wrapper = new QueryWrapper<>();
  7. wrapper.like("name",40)
  8. .select("id","name");
  9. List<Map<String,Object>> mapList = mapper.selectMaps(wrapper);
  10. mapList.forEach(System.out::println);
  11. }
  12. /**
  13. * 按照直属上级分组,查询每组的平均年龄、最大年龄、最小年龄。
  14. * 并且只取年龄总和小于500的组。
  15. *
  16. * select avg(age) avg_age,min(age) min_age,max(age) max_age
  17. * from user
  18. * group by manager_id
  19. * having sum(age) <500
  20. */
  21. @Test
  22. void selectByWrapperMaps2() {
  23. QueryWrapper<User> wrapper = new QueryWrapper<>();
  24. wrapper.select("avg(age) avg_age","min(age) min_age","max(age) max_age")
  25. .groupBy("manager_id").having("sum(age)<{0}",500);
  26. List<Map<String,Object>> mapList = mapper.selectMaps(wrapper);
  27. mapList.forEach(System.out::println);
  28. }
  29. /**
  30. * 只返回一列
  31. */
  32. @Test
  33. void selectByWrapperObjs() {
  34. QueryWrapper<User> wrapper = new QueryWrapper<>();
  35. wrapper.select("avg(age) avg_age",500);
  36. List<Object> objects = mapper.selectObjs(wrapper);
  37. objects.forEach(System.out::println);
  38. }
  39. /**
  40. * 查个数
  41. */
  42. @Test
  43. void selectCount() {
  44. QueryWrapper<User> wrapper = new QueryWrapper<>();
  45. wrapper.like("name","雨");
  46. Integer cnt = mapper.selectCount(wrapper);
  47. System.out.println(cnt);
  48. }
  49. /**
  50. * 查一个实体
  51. */
  52. @Test
  53. void selectOne(){
  54. QueryWrapper<User> wrapper = new QueryWrapper<>();
  55. wrapper.eq("name","天乔巴夏");
  56. User user = mapper.selectOne(wrapper);
  57. System.out.println(user);
  58. }
  59. /**
  60. * lambda构造,编译时检查字段信息,防止误写
  61. */
  62. @Test
  63. void selectLambda(){
  64. //LambdaQueryWrapper<User> lambda = new QueryWrapper<User>().lambda();
  65. //LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  66. LambdaQueryWrapper<User> lambdaQuery = Wrappers.<User>lambdaQuery();
  67. lambdaQuery.like(User::getName,"雨").lt(User::getAge,40);
  68. // where name like '%雨%'
  69. List<User> users = mapper.selectList(lambdaQuery);
  70. users.forEach(System.out::println);
  71. }

猜你在找的Mybatis相关文章