SpringBoot集成mybatis plus强大的条件构造器queryWrapper、updateWrapper

桃扇骨 2023-10-05 11:36 31阅读 0赞

先安利一波官方文档的链接位置,官方文档说的很详细。

条件构造器关系介绍

70

介绍 :

  1. 上图绿色框为抽象类abstract
  2. 蓝色框为正常class类,可new对象
  3. 黄色箭头指向为父子类关系,箭头指向为父类

wapper介绍 :

  1. Wrapper : 条件构造抽象类,最顶端父类,抽象类中提供4个方法西面贴源码展示
  2. AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
  3. AbstractLambdaWrapper : Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。
  4. LambdaQueryWrapper :看名称也能明白就是用于Lambda语法使用的查询Wrapper
  5. LambdaUpdateWrapper : Lambda 更新封装Wrapper
  6. QueryWrapper : Entity 对象封装操作类,不是用lambda语法
  7. UpdateWrapper : Update 条件封装,用于Entity对象更新操

说明清单列表:

70 1

  1. package com.aspire.demo;
  2. import com.baomidou.mybatisplus.core.conditions.Wrapper;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  6. import com.baomidou.mybatisplus.core.metadata.IPage;
  7. import com.baomidou.mybatisplus.core.toolkit.Constants;
  8. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  9. import com.lqf.crud.bean.crm.User;
  10. import com.lqf.crud.dao.crm.UserMapper;
  11. import com.sun.org.apache.xerces.internal.util.EntityResolverWrapper;
  12. import org.apache.ibatis.annotations.Param;
  13. import org.apache.ibatis.session.RowBounds;
  14. import org.junit.Test;
  15. import org.junit.runner.RunWith;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.boot.test.context.SpringBootTest;
  18. import org.springframework.test.context.junit4.SpringRunner;
  19. import org.springframework.web.jsf.el.WebApplicationContextFacesELResolver;
  20. import javax.naming.Name;
  21. import java.util.ArrayList;
  22. import java.util.HashMap;
  23. import java.util.List;
  24. import java.util.Map;
  25. @RunWith(SpringRunner.class)
  26. @SpringBootTest
  27. public class QueryWrapperTests {
  28. @Autowired
  29. private UserMapper mapper;
  30. /**
  31. * <p>
  32. * 根据根据 entity 条件,删除记录,QueryWrapper实体对象封装操作类(可以为 null)
  33. * 下方获取到queryWrapper后删除的查询条件为name字段为null的and年龄大于等于12的and email字段不为null的
  34. * 同理写法条件添加的方式就不做过多介绍了。
  35. * </p>
  36. */
  37. @Test
  38. public void delete() {
  39. QueryWrapper<User> queryWrapper = new QueryWrapper<>();
  40. queryWrapper
  41. .isNull("name")
  42. .ge("age", 12)
  43. .isNotNull("email");
  44. int delete = mapper.delete(queryWrapper);
  45. System.out.println("delete return count = " + delete);
  46. }
  47. /**
  48. * <p>
  49. * 根据 entity 条件,查询一条记录,
  50. * 这里和上方删除构造条件一样,只是seletOne返回的是一条实体记录,当出现多条时会报错
  51. * </p>
  52. */
  53. @Test
  54. public void selectOne() {
  55. QueryWrapper<User> queryWrapper = new QueryWrapper<>();
  56. queryWrapper.eq("name", "lqf");
  57. User user = mapper.selectOne(queryWrapper);
  58. System.out.println(user);
  59. }
  60. /**
  61. * <p>
  62. * 根据 Wrapper 条件,查询总记录数
  63. * </p>
  64. *
  65. * @param queryWrapper 实体对象
  66. */
  67. @Test
  68. public void selectCount() {
  69. QueryWrapper<User> queryWrapper = new QueryWrapper<>();
  70. queryWrapper.eq("name", "lqf");
  71. Integer count = mapper.selectCount(queryWrapper);
  72. System.out.println(count);
  73. }
  74. /**
  75. * <p>
  76. * 根据 entity 条件,查询全部记录
  77. * </p>
  78. *
  79. * @param queryWrapper 实体对象封装操作类(可以为 null)为null查询全部
  80. */
  81. @Test
  82. public void selectList() {
  83. List<User> list = mapper.selectList(null);
  84. System.out.println(list);
  85. }
  86. /**
  87. * <p>
  88. * 根据 Wrapper 条件,查询全部记录
  89. * </p>
  90. *
  91. * @param queryWrapper 实体对象封装操作类(可以为 null)
  92. */
  93. @Test
  94. public void selectMaps() {
  95. QueryWrapper<User> queryWrapper = new QueryWrapper<>();
  96. queryWrapper.isNotNull("name");
  97. List<Map<String, Object>> maps = mapper.selectMaps(queryWrapper);
  98. for (Map<String, Object> map : maps) {
  99. System.out.println(map);
  100. }
  101. }
  102. /**
  103. * 打印结果
  104. * {name=lqf, id=1046282328366391406, age=12, email=lqf@163.com, status=false}
  105. * {name=lqf, id=1046282328366391407, age=12, email=lqf@163.com, status=false}
  106. * {name=lqf, id=1046282328366391408, age=12, email=lqf@163.com, status=false}
  107. * {name=lqf, id=1046282328366391409, age=12, email=lqf@163.com, status=false}
  108. * {name=lqf, id=1046282328366391410, age=12, email=lqf@163.com, status=false}
  109. * {name=lqf, id=1046282328366391411, age=12, email=lqf@163.com, status=false}
  110. * {name=lqf, id=1046282328366391412, age=12, email=lqf@163.com, status=false}
  111. * {name=lqf, id=1046282328366391413, age=12, email=lqf@163.com, status=false}
  112. * {name=lqf, id=1046282328366391414, age=12, email=lqf@163.com, status=false}
  113. * {name=lqf, id=1046282328366391415, age=12, email=lqf@163.com, status=false}
  114. * {name=lqf, id=1046282328366391416, age=12, email=lqf@163.com, status=false}
  115. * {name=lqf, id=1046282328366391417, age=12, email=lqf@163.com, status=false}
  116. * {name=lqf, id=1046282328366391418, age=12, email=lqf@163.com, status=false}
  117. * json类型的键值对模式
  118. */
  119. /**
  120. * <p>
  121. * 根据 entity 条件,查询全部记录(并翻页)
  122. * </p>
  123. *
  124. * @param page 分页查询条件(可以为 RowBounds.DEFAULT)
  125. * @param queryWrapper 实体对象封装操作类(可以为 null)
  126. */
  127. @Test
  128. public void selectPage() {
  129. Page<User> page = new Page<>(1, 5);
  130. QueryWrapper<User> queryWrapper = new QueryWrapper<>();
  131. IPage<User> userIPage = mapper.selectPage(page, queryWrapper);
  132. System.out.println(userIPage);
  133. }
  134. /**
  135. * 打印结果
  136. * ==> Preparing: SELECT COUNT(1) FROM user
  137. * ==> Parameters:
  138. * <== Columns: COUNT(1)
  139. * <== Row: 100
  140. * ==> Preparing: SELECT id,name,age,email,status FROM user LIMIT 0,5
  141. * ==> Parameters:
  142. * <== Columns: id, name, age, email, status
  143. * <== Row: 1046282328366391319, lqf, 12, lqf@163.com, 0
  144. * <== Row: 1046282328366391320, lqf, 12, lqf@163.com, 0
  145. * <== Row: 1046282328366391321, lqf, 12, lqf@163.com, 0
  146. * <== Row: 1046282328366391322, lqf, 12, lqf@163.com, 0
  147. * <== Row: 1046282328366391323, lqf, 12, lqf@163.com, 0
  148. * <== Total: 5
  149. *
  150. *
  151. * 这里需要在项目中加入分页插件
  152. * @Bean
  153. * public PaginationInterceptor paginationInterceptor() {
  154. * return new PaginationInterceptor();
  155. * }
  156. */
  157. /**
  158. * <p>
  159. * 根据 Wrapper 条件,查询全部记录(并翻页)
  160. * </p>
  161. *
  162. * @param page 分页查询条件
  163. * @param queryWrapper 实体对象封装操作类
  164. */
  165. @Test
  166. public void selectMapsPage() {
  167. Page<User> page = new Page<>(1, 5);
  168. QueryWrapper<User> queryWrapper = new QueryWrapper<>();
  169. IPage<Map<String, Object>> mapIPage = mapper.selectMapsPage(page, queryWrapper);
  170. System.out.println(mapIPage);
  171. }
  172. /**
  173. * 和上个分页同理只是返回类型不同
  174. */
  175. /**
  176. * <p>
  177. * 根据 whereEntity 条件,更新记录
  178. * </p>
  179. *
  180. * @param entity 实体对象 (set 条件值,不能为 null)
  181. * @param updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
  182. */
  183. @Test
  184. public void update() {
  185. //修改值
  186. User user = new User();
  187. user.setStatus(true);
  188. user.setName("zhangsan");
  189. //修改条件s
  190. UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
  191. userUpdateWrapper.eq("name", "lqf");
  192. int update = mapper.update(user, userUpdateWrapper);
  193. System.out.println(update);
  194. }
  195. /**
  196. * 打印结果
  197. * ==> Preparing: UPDATE user SET name=?, status=? WHERE name = ?
  198. * ==> Parameters: zhangsan(String), true(Boolean), lqf(String)
  199. * <== Updates: 100
  200. * Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@56a4f272]
  201. * 100
  202. * 2020-10-12 15:08:03.928 INFO 7972 --- [ Thread-2] o.s.w.c.s.GenericWebApplicationContext : Closing org.springframework.web.context.support.GenericWebApplicationContext@37313c65: startup date [Tue Oct 02 15:08:00 CST 2018]; root of context hierarchy
  203. * 2020-10-12 15:08:03.937 INFO 7972 --- [ Thread-2] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
  204. * 2020-10-12 15:08:04.053 INFO 7972 --- [ Thread-2] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
  205. *
  206. * Process finished with exit code 0
  207. */
  208. }

发表评论

表情:
评论列表 (有 0 条评论,31人围观)

还没有评论,来说两句吧...

相关阅读