Mybatis Plus 分页查询和转义字符

本文介绍如何使用 Mybatis Plus 进行分页查询,包括创建分页参数、定义 Mapper 接口及 XML 文件,并展示了如何在服务层实现具体的分页查询逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

tldr:

  • 只需传入分页对象 Page<T>, 方法返回分页对象类型 IPage<T> 就行了
  • 实现方式是物理分页

1. 分页参数

  • Page<T>
Page<OrderStandardVO> page = 
	new Page<OrderStandardVO>(pageNo, pageSize); // (current, size)

2. Mapper.java

  • XXMapper
public interface OrderStandardMapper extends BaseMapper<OrderStandard> {
    
    IPage<OrderStandardVO> getOrderStandardPage(
    	Page<OrderStandardVO> page, 
	    @Param("orderStandard") OrderStandard orderStandard, 
	    @Param("cityCode") String cityCode);

}

3. Mapper.xml

  • XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.demo.dache.mapper.OrderStandardMapper">

    <select id="getOrderStandardPage" resultType="org.jeecg.modules.demo.dache.vo.OrderStandardVO">
        SELECT d.*,cc.`name` cityName
        FROM dc_driver_order_standard d
        LEFT JOIN dc_citycode cc ON d.ad_code = cc.adcode
        <where>
            <if test="cityCode != null">
                AND d.ad_code like CONCAT(#{cityCode},'%')
            </if>
            <if test="orderStandard != null">
                <if test="orderStandard.valuationMethod != null">
                    AND d.valuation_method = #{orderStandard.valuationMethod}
                </if>
            </if>
        </where>
        ORDER BY d.created_at DESC
    </select>
</mapper>

4. 原理

limit #,# (偏移量, 记录行最大数目)
其中第二个参数设为-1可以检索偏移量到结束的所有记录.
limit n 等价于limit 0,n
limit n offset m 等价于 limit m,n

5. 查询示例

DriverPosition vehicleOne = 
		driverPositionService.getOne(new QueryWrapper<DriverPosition>()
									.lambda()
									.eq(DriverPosition::getVehicleNo, vehicleNo)
									.last("limit 1"));
									.apply("sql语句");
// select column_name from table_name where date_format(mytime, '%Y-%m-%d') = ?

6. 常见问题

6.1. 关于 tinyint(1)

在 MySQL 数据库里面一般使用 tinyint(1) 代表 boolean 类型

而如果存储 Enum 比如1、2、3、4,把类型设为 tinyint(1)

则在 Mybatis 进行转换,转为 Map 对象时,存的 key 就会变成 boolean 类型。

  • 解决办法:
    • jdbcURL的参数后面,添加:&tinyInt1isBit=false
    • 更改字段类型为 int

6.2 MapperXML

  • select元素属性
属性说明
id表示命名空间中的唯一标识符, 常与命名空间组合起来使用。组合后如果不唯一, MyBatis 会抛出异常
parameter Type该属性表示传入SQL语句的参数类的全限定名或者别名。它是一个可选属性,因为MyBatis可以通过TypeHandler推断出具体传入语句的参数。其默认值是unset (依赖于驱动)
resultType从SQL语句中返回的类型的类的全限定名或者别名。如果是集合类型,那么返回的应该是集合可以包含的类型,而不是集合本身。返回时可以使用resultType或resultMtap之一
resultMap表示外部resultMap的命名引用。返回时可以使用resultType或resultMap之一
flushCache表示在调用SQL语句之后,是否需要MyBatis清空之前查询的本地缓存和二级缓存。其值为布尔类型( truelfalse),默认值为false.如果设置为true,则任何时候只要SQL语句被调用,都会清空本地缓存和二级缓存
useCache用于控制二级缓存的开启和关闭。其值为布尔类型( truelfalse),默认值为true,表示将查询结果存入二级缓存中
timeout用于设置超时参数,单位为秒。超时时将抛出异常
fetchSize获取记录的总条数设定,其默认值是unset (依赖于驱动)
statementType用于设置MyBatis使用哪个JDBC的Statement工作,其值为STATEMENT.PREPARED(默认值)或CALLABLE,分别对应JDBC中的Statement、 PreparedStatement和CallableStatement
resultSetType表示结果集的类型,其值可设置为FORWARD_ ONLY、SCROLL_ SENSITIVE 或SCROLL INSENSITIVE,它的默认值是unset (依赖于驱动)

6.3 MyBatis 特殊字符转义

方式1: 转义字符

<select id="selectMethod" resultType="someObject">
    select * from some where date &gt;= #{start} and date &lt;= #{end}
</select>
  • Mapper.xml 中的转义字符
转义符号名称
&lt;<less than
&lt;=<=less than equal
&gt;>greater than
&gt;=>=greater than equal
==equal
!=!=not equal
&amp;&ampersand
  • 扩展 (通用表达, mapper 中不可用, 仅参考)

==, eq
!=, ne
<, lt
>, gt
<=, ge, gte
>=, le, lte

方式2: CDATA 标记

标记符号含义
<![CDATA[, ]]>CDATACharacter Data
  1. <! 前缀
    <! 是一个通用的声明前缀,表示后面的内容是一个标记或指令。
  2. CDATA
    CDATA 表示后面的内容是 “字符数据” (character data),告诉解析器该部分内容应被视为文本,而不是 XML 标签。
  3. []
    方括号用于界定字符数据的开始和结束, 是 XML 语法的一部分。
<select id="selectMethod" resultType="someObject">
  <![CDATA[
  select * from some where date >= #{start} and date <= #{end}
  ]]>
</select>

(END)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值