本文將為您介紹MyBatis limit一種錯(cuò)誤的寫法和兩種正確的寫法,其中一種正確寫法還需要在Java語(yǔ)言中額外設(shè)置get函數(shù)。
錯(cuò)誤的寫法:
<select id="queryMyApplicationRecord" parameterType="MyApplicationRequest" resultMap="myApplicationMap">
SELECT
a.*,
FROM
tb_user a
WHERE 1=1
<if test="ids != null and ids.size()!=0">
AND a.id IN
<foreach collection="ids" item="id" index="index"
open="(" close=")" separator=",">
#{id}
</foreach>
</if>
<if test="statusList != null and statusList.size()!=0">
AND a.status IN
<foreach collection="statusList" item="status" index="index"
open="(" close=")" separator=",">
#{status}
</foreach>
</if>
ORDER BY a.create_time desc
LIMIT (#{pageNo}-1)*#{pageSize},#{pageSize}; // 錯(cuò)誤
</select>
在MyBatis中LIMIT之后的語(yǔ)句不允許的變量不允許進(jìn)行算數(shù)運(yùn)算,會(huì)報(bào)錯(cuò)。
正確的寫法一:
<select id="queryMyApplicationRecord" parameterType="MyApplicationRequest" resultMap="myApplicationMap">
SELECT
a.*,
FROM
tb_user a
WHERE 1=1
<if test="ids != null and ids.size()!=0">
AND a.id IN
<foreach collection="ids" item="id" index="index"
open="(" close=")" separator=",">
#{id}
</foreach>
</if>
<if test="statusList != null and statusList.size()!=0">
AND a.status IN
<foreach collection="statusList" item="status" index="index"
open="(" close=")" separator=",">
#{status}
</foreach>
</if>
ORDER BY a.create_time desc
LIMIT ${(pageNo-1)*pageSize},${pageSize}; (正確)
</select>
正確的寫法二:(推薦)
<select id="queryMyApplicationRecord" parameterType="MyApplicationRequest" resultMap="myApplicationMap">
SELECT
a.*,
FROM
tb_user a
WHERE 1=1
<if test="ids != null and ids.size()!=0">
AND a.id IN
<foreach collection="ids" item="id" index="index"
open="(" close=")" separator=",">
#{id}
</foreach>
</if>
<if test="statusList != null and statusList.size()!=0">
AND a.status IN
<foreach collection="statusList" item="status" index="index"
open="(" close=")" separator=",">
#{status}
</foreach>
</if>
ORDER BY a.create_time desc
LIMIT #{offSet},#{limit}; (推薦,代碼層可控)
</select>
分析:方法二的寫法,需要再請(qǐng)求參數(shù)中額外設(shè)置兩個(gè)get函數(shù),如下:
@Data
public class QueryParameterVO {
private List<String> ids;
private List<Integer> statusList;
// 前端傳入的頁(yè)碼
private int pageNo; // 從1開始
// 每頁(yè)的條數(shù)
private int pageSize;
// 數(shù)據(jù)庫(kù)的偏移
private int offSet;
// 數(shù)據(jù)庫(kù)的大小限制
private int limit;
// 這里重寫offSet和limit的get方法
public int getOffSet() {
return (pageNo-1)*pageSize;
}
public int getLimit() {
return pageSize;
}
}
到此這篇關(guān)于MyBatis limit分頁(yè)設(shè)置的錯(cuò)誤寫法和兩種正確實(shí)現(xiàn)寫法以及第二種正確寫法關(guān)聯(lián)get函數(shù)的文章內(nèi)容到此結(jié)束了,更多相關(guān)MyBatis limit分頁(yè)內(nèi)容請(qǐng)搜索W3Cschool以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持W3Cschool!