首先引入依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper}</version>
</dependency>
主要就是要告诉插件,从哪页开始查,一次查多少
PageHelper.startPage(employeePageQueryDTO.getPage(),employeePageQueryDTO.getPageSize());
employeePageQueryDTO.getPage(),employeePageQueryDTO.getPageSize()是两个参数,一个是页码一个是记录数,
SQL语句之test
在您提供的MyBatis映射文件片段中,name 是一个可选的查询参数。通过 <if> 标签内的 test 属性,MyBatis会根据 name 参数的值来决定是否将相应的SQL片段包含在最终生成的查询语句中。
name 参数的条件逻辑
- 如果
name参数不为null且不为空字符串(''),则test条件为true,and name like concat('%',#{name},'%')这个SQL片段会被包含在查询语句中。 - 如果
name参数为null或为空字符串,test条件为false,and name like concat('%',#{name},'%')这个SQL片段不会被包含在查询语句中。
分页查询的实现
在MyBatis中,分页查询通常需要额外的参数,如当前页码和每页显示的记录数。这些参数用于计算查询的起始位置和结束位置,从而实现分页效果。
示例
假设您有一个分页查询的接口,它接受当前页码 currentPage 和每页记录数 pageSize 作为参数,以及可选的 name 参数用于模糊搜索。您的MyBatis映射文件可能需要像这样修改:
<select id="pageQuery" resultType="com.sky.entity.Employee">
select * from employee
<where>
<if test="name != null and name != ''">
and name like concat('%', #{name}, '%')
</if>
</where>
order by create_time desc
limit #{offset}, #{limit}
</select>在这个例子中,#{offset} 和 #{limit} 是MyBatis的参数占位符,它们分别代表查询的起始位置和记录数。这些参数需要在调用查询方法时提供。
SQL语句之and
在MyBatis的动态SQL中,<where> 标签用于构建 WHERE 子句,并且会智能地处理 AND 和 OR 关键字的使用。<where> 标签会根据内部条件的实际情况来决定是否包含 AND 关键字。
<where> 标签的行为
- 如果
<where>标签内部没有任何条件满足(即所有条件的test属性评估为false),则<where>标签不会生成任何WHERE子句。 - 如果
<where>标签内部只有一个条件满足,那么这个条件将直接作为WHERE子句的一部分,不会添加AND关键字。 - 如果
<where>标签内部有多个条件满足,那么这些条件将通过AND关键字连接起来,形成完整的WHERE子句。
示例
考虑以下MyBatis映射文件中的 <select> 元素:
<select id="findUsers" resultType="User">
SELECT * FROM users
<where>
<if test="username != null">
AND username = #{username}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>如果 username 和 age 都为 null,则不会生成 WHERE 子句。
如果只有 username 不为 null,则生成的SQL为 SELECT * FROM users WHERE username = ?。
如果 username 和 age 都不为 null,则生成的SQL为 SELECT * FROM users WHERE username = ? AND age = ?。
注意事项
<where> 标签内部的条件应该使用 AND 关键字,因为 <where> 标签会自动处理 AND 的添加。
如果需要使用 OR 关键字连接条件,可以使用 <choose>、<when> 和 <otherwise> 标签来实现更复杂的逻辑。
通过使用 <where> 标签,可以简化动态SQL的编写,避免在条件较多时手动管理 AND 和 OR 关键字的使用,从而减少错误和提高代码的可读性。