1.背景

查询在实际生产中用得最多,也最灵活.

2.查询案例

表结构:

  1. CREATE TABLE `sys_user` (
  2. `id` int(32) NOT NULL AUTO_INCREMENT COMMENT '主键',
  3. `name` varchar(64) DEFAULT NULL,
  4. `parent_id` int(32) DEFAULT NULL COMMENT '领导id',
  5. `version` int(64) DEFAULT NULL,
  6. `gender` int(32) DEFAULT NULL,
  7. `age` int(32) DEFAULT NULL,
  8. `position` varchar(64) DEFAULT NULL,
  9. `account` varchar(255) DEFAULT NULL,
  10. `password` varchar(225) DEFAULT NULL,
  11. `status` varchar(64) DEFAULT NULL,
  12. `create_time` datetime DEFAULT NULL,
  13. `type` varchar(64) DEFAULT NULL COMMENT '类型',
  14. `update_time` datetime DEFAULT NULL,
  15. PRIMARY KEY (`id`)
  16. ) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb4;

需求:

  1. 1.最简单的根据id查询
  2. 2.根据多个id批量查询
  3. 3.map条件查询
  4. 条件构造器
  5. 4.名字中包含 东平 并且年龄小于等于30
  6. 5.名字中包含"东平"并且龄大于等于18且小于等于30并且account不为空
  7. 6.名字为姓 "李" 或者 年龄大于等于30,按照年龄降序排列,年龄相同按照id升序排列
  8. 7.查询年龄大于等于18岁,并且领导为 张三丰 的员工
  9. 8.查询姓"李" 并且 (年龄小于30 account不为空)
  10. 9.查询姓"李" 或者 (年龄小于30 并且 account不为空)
  11. 10.查询(年龄小于30 或者 account不为空) 并且 "李"
  12. 11.查询年龄大于18岁的
  13. 12查询(年龄大于15岁并且有领导的员工)按照领导分组,每组的平均年龄、最大年龄、最小年龄,并且只取平均年龄大于18的组。
  14. 13.lambda构造器(最大的优点就是列名写错了有提示,用户与普通的QueryWrapper用法一样)
  15. 查询姓"李" 并且 年龄小于30

实现代码:

  1. package com.ldp.demo01;
  2.  
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.ldp.entity.SysUser;
  6. import com.ldp.mapper.SysUserMapper;
  7. import org.junit.Test;
  8. import org.junit.runner.RunWith;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.boot.test.context.SpringBootTest;
  11. import org.springframework.test.context.junit4.SpringRunner;
  12.  
  13. import java.util.Arrays;
  14. import java.util.HashMap;
  15. import java.util.List;
  16. import java.util.Map;
  17. import java.util.function.Consumer;
  18.  
  19. /**
  20. * @author 姿势帝-博客园
  21. * @address https://www.cnblogs.com/newAndHui/
  22. * @WeChat 851298348
  23. * @create 11/06 10:27
  24. * @description <p>
  25. * 在讲查询的时候,我先把实体与表还原成最初的样子(即重新导入表结构和数据java实体),避免造成学习干扰
  26. * 这个章节将系统化的讲解查询
  27. * 需求如下:
  28. * 最简单的根据id查询
  29. *
  30. * </p>
  31. */
  32. @RunWith(SpringRunner.class)
  33. @SpringBootTest
  34. public class Test03Select {
  35. @Autowired
  36. private SysUserMapper sysUserMapper;
  37.  
  38. /**
  39. * 最简单的根据id查询
  40. * <p>
  41. * ==> Preparing: SELECT id,version,age,gender,name,position,account,password,status,type,create_time,update_time FROM sys_user WHERE id=?
  42. * ==> Parameters: 20(Integer)
  43. */
  44. @Test
  45. public void selectById() {
  46. SysUser sysUser = sysUserMapper.selectById(20);
  47. System.out.println("sysUser=" + sysUser);
  48. }
  49.  
  50. /**
  51. * 根据多个id批量查询
  52. * <p>
  53. * ==> Preparing: SELECT id,version,age,gender,name,position,account,password,status,type,create_time,update_time FROM sys_user WHERE id IN ( ? , ? , ? , ? )
  54. * ==> Parameters: 17(Integer), 18(Integer), 19(Integer), 20(Integer)
  55. */
  56. @Test
  57. public void selectBatchIds() {
  58. List<Integer> asList = Arrays.asList(17, 18, 19, 20);
  59. List<SysUser> sysUsers = sysUserMapper.selectBatchIds(asList);
  60. System.out.println("list=" + sysUsers);
  61. }
  62.  
  63. /**
  64. * map条件查询
  65. * 注意:map条件中的key是用数据库中的字段对应,而不是与java中的实体对应
  66. * ==> Preparing: SELECT id,version,age,gender,name,position,account,password,status,type,create_time,update_time FROM sys_user WHERE name = ? AND age = ?
  67. * ==> Parameters: 李东平(String), 18(String)
  68. */
  69. @Test
  70. public void selectByMap() {
  71. Map<String, Object> columnMap = new HashMap<>();
  72. columnMap.put("name", "李东平");
  73. columnMap.put("age", "18");
  74. // columnMap 拼接的条件为 WHERE name = ? AND age = ?
  75. List<SysUser> sysUsers = sysUserMapper.selectByMap(columnMap);
  76. System.out.println("list=" + sysUsers);
  77. }
  78.  
  79. /**
  80. * 条件构造器
  81. * <p>
  82. * 1、名字中包含 东平 并且年龄小于等于30
  83. * name like '%东平%' and age<=30
  84. * ==> Preparing: SELECT id,version,age,gender,name,position,account,password,status,type,create_time,update_time FROM sys_user
  85. * WHERE (name LIKE ? AND age <= ?)
  86. * ==> Parameters: %东平%(String), 30(Integer)
  87. * <p>
  88. * 备注:
  89. * 等于的英语单词是:equals
  90. * 小于的英文:less than
  91. * le表示小于等于 <=
  92. * lt表示小于 <
  93. * <p>
  94. * 同样的道理
  95. * 大于的英文为 greater than
  96. * gt 表示大于 >
  97. * ge 表示大于等于 >=
  98. */
  99. @Test
  100. public void testQueryWrapper1() {
  101. QueryWrapper queryWrapper = new QueryWrapper<SysUser>();
  102. queryWrapper.like("name", "东平");
  103. queryWrapper.le("age", 30);
  104. List<SysUser> sysUsers = sysUserMapper.selectList(queryWrapper);
  105. System.out.println("list=" + sysUsers);
  106. }
  107.  
  108. /**
  109. * 名字中包含"东平"并且龄大于等于18且小于等于30并且account不为空
  110. * ==> Preparing: SELECT id,version,age,gender,name,position,account,password,status,type,create_time,update_time
  111. * FROM sys_user WHERE (name LIKE ? AND age >= ? AND age <= ? AND account IS NOT NULL)
  112. * ==> Parameters: %东平%(String), 30(Integer), 40(Integer)
  113. */
  114. @Test
  115. public void testQueryWrapper2() {
  116. QueryWrapper queryWrapper = new QueryWrapper<SysUser>();
  117. queryWrapper.like("name", "东平");
  118. queryWrapper.ge("age", 30);
  119. queryWrapper.le("age", 40);
  120. // condition = true表示加上这个条件, condition = false表示 不 加上这个条件
  121. queryWrapper.isNotNull(true, "account");
  122. List<SysUser> sysUsers = sysUserMapper.selectList(queryWrapper);
  123. System.out.println("list=" + sysUsers);
  124. }
  125.  
  126. /**
  127. * 名字为姓 "李" 或者 年龄大于等于30,按照年龄降序排列,年龄相同按照id升序排列
  128. * ==> Preparing: SELECT id,version,age,gender,name,position,account,password,status,type,create_time,update_time
  129. * FROM sys_user WHERE (name LIKE ? OR age >= ?) ORDER BY age DESC,id ASC
  130. * ==> Parameters: 李%(String), 30(Integer)
  131. */
  132. @Test
  133. public void testQueryWrapper3() {
  134. QueryWrapper queryWrapper = new QueryWrapper<SysUser>();
  135. queryWrapper.likeRight(true, "name", "李");
  136. queryWrapper.or();
  137. queryWrapper.ge("age", 30);
  138. queryWrapper.orderByDesc("age");
  139. queryWrapper.orderByAsc("id");
  140. List<SysUser> sysUsers = sysUserMapper.selectList(queryWrapper);
  141. System.out.println("list=" + sysUsers);
  142. }
  143.  
  144. /**
  145. * 查询年龄大于等于18岁,并且领导为 张三丰 的员工
  146. * ==> Preparing: SELECT id,version,age,gender,name,parent_id,position,account,password,status,type,create_time,update_time FROM sys_user WHERE (age >= ? AND parent_id in (select id from sys_user where `name`=?))
  147. * ==> Parameters: 18(Integer), 张三丰(String)
  148. */
  149. @Test
  150. public void testQueryWrapper4() {
  151. QueryWrapper queryWrapper = new QueryWrapper<SysUser>();
  152. queryWrapper.ge("age", 18);
  153. // 特别注意 这个地方不需要在写 and ,参数下标从0开始
  154. queryWrapper.apply("parent_id in (select id from sys_user where `name`={0})", "张三丰");
  155. List list = sysUserMapper.selectList(queryWrapper);
  156. System.out.println("list=" + list);
  157. }
  158.  
  159. /**
  160. * 查询姓"李" 并且 (年龄小于30 或 account不为空)
  161. * ==> Preparing: SELECT id,version,age,gender,name,parent_id,position,account,password,status,type,create_time,update_time FROM sys_user WHERE (name LIKE ? AND (age < ? OR account IS NOT NULL))
  162. * ==> Parameters: 李%(String), 30(Integer)
  163. */
  164. @Test
  165. public void testQueryWrapper5() {
  166. QueryWrapper queryWrapper = new QueryWrapper<SysUser>();
  167. queryWrapper.likeRight(true, "name", "李");
  168. // 嵌套条件
  169. Consumer<QueryWrapper> consumer = queryWrapper2 -> {
  170. queryWrapper2.lt("age", 30);
  171. queryWrapper2.or();
  172. queryWrapper2.isNotNull("account");
  173. };
  174. queryWrapper.and(consumer);
  175. List<SysUser> sysUsers = sysUserMapper.selectList(queryWrapper);
  176. System.out.println("list=" + sysUsers);
  177. }
  178.  
  179. /**
  180. * 第二种实现
  181. * 嵌套条件这好,个人建议使用这种,自己写条件sql,更直观好理解
  182. * 查询姓"李" 并且 (年龄小于30 或 account不为空)
  183. * ==> Preparing: SELECT id,version,age,gender,name,parent_id,position,account,password,status,type,create_time,update_time FROM sys_user WHERE (name LIKE ? AND (age < ? OR account IS NOT NULL))
  184. * ==> Parameters: 李%(String), 30(Integer)
  185. */
  186. @Test
  187. public void testQueryWrapper52() {
  188. QueryWrapper queryWrapper = new QueryWrapper<SysUser>();
  189. queryWrapper.likeRight(true, "name", "李");
  190. queryWrapper.apply(" (age < {0} OR account IS NOT NULL)", 30);
  191. List<SysUser> sysUsers = sysUserMapper.selectList(queryWrapper);
  192. System.out.println("list=" + sysUsers);
  193. }
  194.  
  195. /**
  196. * 方式一
  197. * 查询姓"李" 或者 (年龄小于30 并且 account不为空)
  198. * ==> Preparing: SELECT id,version,age,gender,name,parent_id,position,account,password,status,type,create_time,update_time FROM sys_user WHERE (name LIKE ? OR (age < ? and account IS NOT NULL))
  199. * ==> Parameters: 李%(String), 30(Integer)
  200. */
  201. @Test
  202. public void testQueryWrapper6() {
  203. QueryWrapper queryWrapper = new QueryWrapper<SysUser>();
  204. queryWrapper.likeRight(true, "name", "李");
  205. // 嵌套条件
  206. Consumer<QueryWrapper> consumer = queryWrapper2 -> {
  207. queryWrapper2.lt("age", 30);
  208. queryWrapper2.isNotNull("account");
  209. };
  210. queryWrapper.or(consumer);
  211. List<SysUser> sysUsers = sysUserMapper.selectList(queryWrapper);
  212. System.out.println("list=" + sysUsers);
  213. }
  214.  
  215. /**
  216. * 方式二
  217. * 查询姓"李" 或者 (年龄小于30 并且 account不为空)
  218. * ==> Preparing: SELECT id,version,age,gender,name,parent_id,position,account,password,status,type,create_time,update_time FROM sys_user WHERE (name LIKE ? OR (age < ? and account IS NOT NULL))
  219. * ==> Parameters: 李%(String), 30(Integer)
  220. */
  221. @Test
  222. public void testQueryWrapper62() {
  223. QueryWrapper queryWrapper = new QueryWrapper<SysUser>();
  224. queryWrapper.likeRight(true, "name", "李");
  225. queryWrapper.or();
  226. queryWrapper.apply(" (age < {0} and account IS NOT NULL)", 30);
  227. List<SysUser> sysUsers = sysUserMapper.selectList(queryWrapper);
  228. System.out.println("list=" + sysUsers);
  229. }
  230.  
  231. /**
  232. * 查询(年龄小于30 或者 account不为空) 并且 姓"李"
  233. * ==> Preparing: SELECT id,version,age,gender,name,parent_id,position,account,password,status,type,create_time,update_time FROM sys_user WHERE ((age < ? OR account IS NOT NULL) AND name LIKE ?)
  234. * ==> Parameters: 30(Integer), 李%(String)
  235. */
  236. @Test
  237. public void testQueryWrapper7() {
  238. QueryWrapper queryWrapper = new QueryWrapper<SysUser>();
  239. // 嵌套条件
  240. Consumer<QueryWrapper> consumer = queryWrapper2 -> {
  241. queryWrapper2.lt("age", 30);
  242. queryWrapper2.or();
  243. queryWrapper2.isNotNull("account");
  244. };
  245. queryWrapper.and(consumer);
  246. queryWrapper.likeRight("name", "李");
  247. List<SysUser> sysUsers = sysUserMapper.selectList(queryWrapper);
  248. System.out.println("list=" + sysUsers);
  249. }
  250.  
  251. /**
  252. * 方式二写sql的方式
  253. * 查询(年龄小于30 或者 account不为空) 并且 姓"李"
  254. * ==> Preparing: SELECT id,version,age,gender,name,parent_id,position,account,password,status,type,create_time,update_time FROM sys_user WHERE ((age < ? OR account IS NOT NULL) AND name LIKE ?)
  255. * ==> Parameters: 30(Integer), 李%(String)
  256. */
  257. @Test
  258. public void testQueryWrapper72() {
  259. QueryWrapper queryWrapper = new QueryWrapper<SysUser>();
  260. // 嵌套条件
  261. queryWrapper.apply(" (age < {0} OR account IS NOT NULL)", 30);
  262. queryWrapper.likeRight("name", "李");
  263. List<SysUser> sysUsers = sysUserMapper.selectList(queryWrapper);
  264. System.out.println("list=" + sysUsers);
  265. }
  266.  
  267. /**
  268. * 查询年龄大于18岁的
  269. */
  270. @Test
  271. public void testQueryWrapper8() {
  272. QueryWrapper queryWrapper = new QueryWrapper<SysUser>();
  273. queryWrapper.eq("age", 15);
  274. queryWrapper.eq("name", "张无忌");
  275. // 返回多条会报错,只返回一条或者无数据不报错,sql语句中没有limit
  276. SysUser sysUser = sysUserMapper.selectOne(queryWrapper);
  277. System.out.println("sysUser=" + sysUser);
  278. }
  279.  
  280. /**
  281. * <p>
  282. * 查询(年龄大于15岁并且有领导的员工)按照领导分组,每组的平均年龄、最大年龄、最小年龄,并且只取平均年龄大于18的组。
  283. * <p>
  284. * ==> Preparing: SELECT parent_id,AVG(age) avg,MAX(age) max,MIN(age) min FROM sys_user WHERE (age > ? AND parent_id IS NOT NULL) GROUP BY parent_id HAVING AVG(age)>?
  285. * ==> Parameters: 15(Integer), 18(Integer)
  286. * <== Columns: parent_id, avg, max, min
  287. * <== Row: 1, 58.5455, 99, 18
  288. * <== Total: 1
  289. */
  290. @Test
  291. public void test9() {
  292. QueryWrapper queryWrapper = new QueryWrapper<SysUser>();
  293. // 需要查询的列
  294. queryWrapper.select("parent_id", "AVG(age) avg", "MAX(age) max", "MIN(age) min");
  295. // 查询条件
  296. queryWrapper.gt("age", 15);
  297. queryWrapper.isNotNull("parent_id");
  298. // 分组
  299. queryWrapper.groupBy("parent_id");
  300. // 分组后的条件
  301. queryWrapper.having("AVG(age)>{0}", 18);
  302. // 执行查询
  303. List list = sysUserMapper.selectMaps(queryWrapper);
  304. System.out.println("list=" + list);
  305. }
  306.  
  307. /**
  308. * lambda构造器(最大的优点就是列名写错了有提示,用户与普通的QueryWrapper用法一样)
  309. * 查询姓"李" 并且 年龄小于30
  310. * ==> Preparing: SELECT id,version,age,gender,name,parent_id,position,account,password,status,type,create_time,update_time FROM sys_user WHERE (name LIKE ? AND age < ?)
  311. * ==> Parameters: 李%(String), 30(Integer)
  312. */
  313. @Test
  314. public void test10() {
  315. LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
  316. queryWrapper.likeRight(SysUser::getName, "李");
  317. queryWrapper.lt(SysUser::getAge, 30);
  318. List<SysUser> sysUsers = sysUserMapper.selectList(queryWrapper);
  319. System.out.println("list=" + sysUsers);
  320. }
  321.  
  322. }

3.高级查询条件

代码:

  1. /**
  2. * 高级查询条件控制
  3. * 需求:
  4. * 实际生产中我们要求传入了参数则加入where 条件,否则不加入
  5. * 查询姓 "李" 的员工
  6. */
  7. @Test
  8. public void test1() {
  9. String name = "";
  10. methodTest1(name);
  11. }
  12.  
  13. /**
  14. * name 有值时才加入条件
  15. * ==> Preparing: SELECT id,version,age,gender,name,parent_id,position,account,password,status,type,create_time,update_time FROM sys_user
  16. * ==> Parameters:
  17. *
  18. * @param name
  19. */
  20. public void methodTest1(String name) {
  21. QueryWrapper queryWrapper = new QueryWrapper<SysUser>();
  22. queryWrapper.like(!StrUtil.isEmpty(name), "name", name);
  23. List<SysUser> sysUsers = sysUserMapper.selectList(queryWrapper);
  24. System.out.println("list=" + sysUsers);
  25. }

4.java实体作为条件

1.使用默认的=#{}作为where条件

  1. /**
  2. * java实体作为条件
  3. * ==> Preparing: SELECT id,version,age,gender,name,parent_id,position,account,password,status,type,create_time,update_time FROM sys_user WHERE age=? AND name=?
  4. * ==> Parameters: 18(Integer), 张无忌(String)
  5. */
  6. @Test
  7. public void test2() {
  8. SysUser sysUser = new SysUser().setName("张无忌").setAge(18);
  9. QueryWrapper queryWrapper = new QueryWrapper<>(sysUser);
  10.  
  11. //queryWrapper.setEntity(sysUser);
  12. List<SysUser> sysUsers = sysUserMapper.selectList(queryWrapper);
  13. System.out.println("list=" + sysUsers);
  14. }

2.修改默认的条件方式

首先在字段name上加注解

然后代码如下:

  1. /**
  2. * java实体作为条件(修改默认条件方式)
  3. * 例如name要求以like作为条件(如果SqlCondition常量中没有的,可以自己增加)
  4. * @TableField(condition = SqlCondition.LIKE)
  5. * private String name;
  6. *
  7. * ==> Preparing: SELECT id,version,age,gender,name,parent_id,position,account,password,status,type,create_time,update_time FROM sys_user WHERE name LIKE CONCAT('%',?,'%')
  8. * ==> Parameters: 无忌(String)
  9. */
  10. @Test
  11. public void test2_1() {
  12. SysUser sysUser = new SysUser().setName("无忌");
  13. QueryWrapper queryWrapper = new QueryWrapper<>(sysUser);
  14. //queryWrapper.setEntity(sysUser);
  15.  
  16. List<SysUser> sysUsers = sysUserMapper.selectList(queryWrapper);
  17. System.out.println("list=" + sysUsers);
  18. }

5.使用原来的mybatis写sql实现

1.在SysUserMapper中添加接口

  1. /**
  2. * 查询用户列表(mybatis自己写sql的方式)
  3. *
  4. * @param sysUser
  5. * @return
  6. */
  7. List<SysUser> queryListUser(@Param("sysUser") SysUser sysUser);

2.编写xml的sql

  1. <select id="queryListUser" resultType="com.ldp.entity.SysUser">
  2. SELECT * FROM sys_user
  3. <where>
  4. <if test="sysUser.name!=null and sysUser.name!=''">
  5. name = #{sysUser.name}
  6. </if>
  7. </where>
  8. </select>

3.使用

  1. /**
  2. * 自己写sql实现
  3. * ==> Preparing: SELECT * FROM sys_user WHERE name = ?
  4. * ==> Parameters: 李东平(String)
  5. */
  6. @Test
  7. public void test1() {
  8. SysUser sysUser = new SysUser().setName("李东平");
  9. List<SysUser> list = sysUserMapper.queryListUser(sysUser);
  10. System.out.println("list=" + list);
  11. }

6.使用Wrapper自定义SQL

这种方式在实际生产中一般不用,大家知道有这知识点就可以了.

1.在SysUserMapper中编写接口和sql

  1. /**
  2. * 使用 Wrapper 自定义SQL
  3. *
  4. * @param queryWrapper
  5. * @return 注意:
  6. * 1. Constants.WRAPPER = ew
  7. * 2. sql语句也可以写在xml中(这里不演示)
  8. * 3. sql语句中没有where
  9. */
  10. @Select("select * from sys_user ${ew.customSqlSegment}")
  11. List<SysUser> selectListMy(@Param("ew") Wrapper<SysUser> queryWrapper);

2.使用

  1. /**
  2. * 使用 Wrapper 自定义SQL
  3. * ==> Preparing: SELECT * FROM sys_user WHERE name = ?
  4. * ==> Parameters: 李东平(String)
  5. */
  6. @Test
  7. public void test2() {
  8. QueryWrapper<SysUser> wrapper = new QueryWrapper<SysUser>().lt("age", 50);
  9. List<SysUser> list = sysUserMapper.selectListMy(wrapper);
  10. System.out.println("list=" + list);
  11. }

7.分页查询

1.添加一个MybatisPlusConfig配置文件代码

  1. package com.ldp.config;
  2.  
  3. import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
  4. import org.mybatis.spring.annotation.MapperScan;
  5. import org.springframework.context.annotation.Bean;
  6. import org.springframework.context.annotation.Configuration;
  7.  
  8. /**
  9. * @author 姿势帝-博客园
  10. * @address https://www.cnblogs.com/newAndHui/
  11. * @WeChat 851298348
  12. * @create 12/06 4:45
  13. * @description
  14. */
  15. @Configuration
  16. @MapperScan("com.ldp.mapper")
  17. public class MybatisPlusConfig {
  18. /**
  19. * 分页插件
  20. *
  21. * @return
  22. */
  23. @Bean
  24. public PaginationInterceptor paginationInterceptor() {
  25. PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
  26. return paginationInterceptor;
  27. }
  28. }

2.使用

  1. /**
  2. * 分页测试
  3. * 查询一共有多少条
  4. * ==> Preparing: SELECT COUNT(1) FROM sys_user WHERE (age < ?)
  5. * ==> Parameters: 60(Integer)
  6. *
  7. * 查询列表
  8. * ==> Preparing: SELECT id,version,age,gender,name,parent_id,position,account,password,status,type,create_time,update_time FROM sys_user WHERE (age < ?) LIMIT ?,?
  9. * ==> Parameters: 60(Integer), 4(Long), 2(Long)
  10. */
  11. @Test
  12. public void test1() {
  13. QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
  14. wrapper.lt("age",60);
  15. Page<SysUser> page = new Page<>(3,2);
  16. IPage<SysUser> pageResult = sysUserMapper.selectPage(page, wrapper);
  17. System.out.println("list=" + pageResult.getRecords());
  18. }

3.自己写sql的分页

a.编写接口

  1. /**
  2. * 自己写sql实现分页
  3. * @param sysUser
  4. * @return
  5. */
  6. IPage<SysUser> queryPage(Page<SysUser> page,@Param("sysUser") SysUser sysUser);

b.编写sql

  1. <select id="queryPage" resultType="com.ldp.entity.SysUser">
  2. SELECT * FROM sys_user
  3. <where>
  4. <if test="sysUser.name!=null and sysUser.name!=''">
  5. name = #{sysUser.name}
  6. </if>
  7. </where>
  8. </select>

c.使用

  1. /**
  2. * 测试自己的sql分页
  3. */
  4. @Test
  5. public void test2() {
  6. SysUser sysUser = new SysUser().setName("");
  7. Page<SysUser> page = new Page<>(3,2);
  8. IPage<SysUser> pageResult = sysUserMapper.queryPage(page,sysUser);
  9. System.out.println("list=" + pageResult.getRecords());
  10. }

mybatis-plus系统化学习教程:https://www.cnblogs.com/newAndHui/p/14141950.html

完美!

mybatis-plus系统化学习之查询专题的更多相关文章

  1. mybatis源码学习:基于动态代理实现查询全过程

    前文传送门: mybatis源码学习:从SqlSessionFactory到代理对象的生成 mybatis源码学习:一级缓存和二级缓存分析 下面这条语句,将会调用代理对象的方法,并执行查询过程,我们一 ...

  2. 【mybatis源码学习】ResultMap查询结果映射

    一.ResultMap包含的元素 constructor - 用于在实例化类时,注入结果到构造方法中 idArg - ID 参数:标记出作为 ID 的结果可以帮助提高整体性能 arg - 将被注入到构 ...

  3. java 持久框架mybatis的初步学习

    什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索.MyBati ...

  4. Java数据持久层框架 MyBatis之API学习六(Mapper XML 文件详解)

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

  5. 如何从零开始系统化学习视觉SLAM?

    由于显示格式问题,建议阅读原文:如何从零开始系统化学习视觉SLAM? 什么是SLAM? SLAM是 Simultaneous Localization And Mapping的 英文首字母组合,一般翻 ...

  6. Mybatis基础进阶学习2

    Mybatis基础进阶学习2 1.测试基本结构 2.三个POJO package com.pojo; import java.io.Serializable; import java.util.Dat ...

  7. Mybatis基础入门学习

    Mybatis基础入门学习 mybatis架构分析 搭建测试mybatis架构 )下载并导入mybatis3.2.7.jar(架构),mysql-connector-java-5.1.7-bin.ja ...

  8. (转)MyBatis框架的学习(七)——MyBatis逆向工程自动生成代码

    http://blog.csdn.net/yerenyuan_pku/article/details/71909325 什么是逆向工程 MyBatis的一个主要的特点就是需要程序员自己编写sql,那么 ...

  9. (转)MyBatis框架的学习(六)——MyBatis整合Spring

    http://blog.csdn.net/yerenyuan_pku/article/details/71904315 本文将手把手教你如何使用MyBatis整合Spring,这儿,我本人使用的MyB ...

  10. (转)MyBatis框架的学习(五)——一对一关联映射和一对多关联映射

    http://blog.csdn.net/yerenyuan_pku/article/details/71894172 在实际开发中我们不可能只是对单表进行操作,必然要操作多表,本文就来讲解多表操作中 ...

随机推荐

  1. Woothosting 6$/年 vps测评

    当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解 Woothosting 6$/年 vps测评** 日期:2018-7- ...

  2. 基于 .NET CORE + VUE 前后端项目打包,实现批处理安装,一键部署

    2023年7月18日 目前基于已完成了基于WPF界面的全自动部署小工具 自动判断相关.net core环境和依赖,自动部署mysql数据库,自动部署前后端web服务的功能. 有疑问的可以直接评论. - ...

  3. UIController转为SwiftUI

    在UIKit转到SwiftUI的过渡时期中,项目中会遇到不得不用到二者混合使用的情景,苹果这时提供了相关API让iOSer更好地适应这个时期. UIViewControllerRepresentabl ...

  4. “国产双系统”出炉,RK3568J非对称AMP:Linux+RTOS/裸机

    "非对称AMP"双系统是什么 AMP(Asymmetric Multi-Processing),即非对称多处理架构."非对称AMP"双系统是指多个核心相对独立运 ...

  5. SQL如何优化和设计索引

    SQL优化 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引: 避免使用 NULL 字段,很难查询优化且占用额外索引空间,可以设置默认值0或'': ...

  6. vue3 'alex' is defined but never used

    解决方法 在package.json中的rules下加入 "no-unused-vars":"off" 即可

  7. MyBatis-Plus 整理

    # 前言 代码生成器插件选择去这里:https://www.cnblogs.com/zixq/p/16726534.html 相关插件在那里面已经提到了 # 上手 MyBatis-Plus 是一个 M ...

  8. Happus:给准备离职成为独立开发者的你 5 点建议

    名字:Happus 开发者 / 团队:Regina Dan 平台:iOS, visionOS 请简要介绍下这款产品 Happus 是你追寻幸福健康关系.甚至提高婚姻生活品质的贴心助手.无论是关系维系. ...

  9. sshd管理限制登录配置(centos7.9)

    背景情况:为了公网的主机,被无限的密码爆破,需要对主机的ssh进行安装加固 1.首先要禁用root的远程登录和修改ssh的端口 vi /etc/ssh/sshd_config# 修改端口,不适用22端 ...

  10. Nuxt.js 错误侦探:useError 组合函数

    title: Nuxt.js 错误侦探:useError 组合函数 date: 2024/7/14 updated: 2024/7/14 author: cmdragon excerpt: 摘要:文章 ...