分页查询PageHelper插件
首先引入依赖
 <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 条件为 trueand name like concat('%',#{name},'%') 这个SQL片段会被包含在查询语句中。
  • 如果 name 参数为 null 或为空字符串,test 条件为 falseand 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 关键字的使用,从而减少错误和提高代码的可读性。

博客内容均系原创,未经允许严禁转载!
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇