簡體   English   中英

如何解決MyBatis分頁PageHelper查詢返回的數據重復?

[英]How to solve the MyBatis Pagination PageHelper query return data has duplicates?

當我使用MyBatis分頁PageHelper時,查詢返回的是重復項。 我認為不應該!,因為當我查詢兩個表時會影響重復的問題。 例如我寫的sql映射文件,下面的代碼:

SELECT
    o.id,
    o.uid,
    u.nickname,
    o.order_num,
    o.order_type,
    o.order_price,
    o.pay_type,
    o.order_status,
    o.name,
    o.phone,
    o.delivery_time,
    o.createtime
FROM
    orders AS o,
    water_member AS u

WHERE
    o.order_status = 1
ORDER BY
    o.id
DESC

但是有重復:

在此處輸入圖片說明

UnpaidOrderController.java

@RestController
public class UnpaidOrderController {

@Autowired
private UnpaidOrderService unpaidOrderService;

@RequestMapping(value = "unpaidorder",method = RequestMethod.GET)
public Object getByPage(@RequestParam(value = "pageNo",  defaultValue = "1")  int pageNo,
                        @RequestParam(value = "pageSize", defaultValue = "3")  int pageSize) {

    Page<UnpaidOrder> list = unpaidOrderService.findByPage(pageNo, pageSize);
    JSONObject jsonObject = new JSONObject();
    jsonObject.put("msg","查詢成功");
    jsonObject.put("data",list);
    return jsonObject;
}}

UnpaidOrderMapper.java

@Mapper
public interface UnpaidOrderMapper {
Page<UnpaidOrder> findByPage();
}

UnpaidOrderService.java

public interface UnpaidOrderService {
Page<UnpaidOrder> findByPage(int pageNo, int pageSize);}

UnpaidOrderServiceImpl.java

@Service
public class UnpaidOrderServiceImpl implements UnpaidOrderService {
@Autowired
private UnpaidOrderMapper unpaidOrderMapper;
public Page<UnpaidOrder> findByPage(int pageNo, int pageSize) {
    PageHelper.startPage(pageNo,pageSize);
    return unpaidOrderMapper.findByPage();
 }
 }

UnpaidOrderMapper.xml

<mapper namespace="com.zyl.water.mapper.UnpaidOrderMapper">
<!-- 映射訂單對象的resultMap -->
<resultMap id="BaseResultMap" type="UnpaidOrder">
    <result column="id" property="id" />
    <result column="uid" property="uid" />
    <result column="nickname" property="nickname" />
    <result column="order_num" property="order_num" />
    <result column="order_type" property="order_type" />
    <result column="pay_type" property="pay_type" />
    <result column="order_status" property="order_status" />
    <result column="name" property="name" />
    <result column="phone" property="phone" />
    <result column="delivery_time" property="delivery_time" />
    <result column="createtime" property="createtime" />
</resultMap>

<!-- 查詢未支付訂單 -->
<select id="findByPage" resultMap="BaseResultMap">
    SELECT
        o.id,
        o.uid,
        u.nickname,
        o.order_num,
        o.order_type,
        o.order_price,
        o.pay_type,
        o.order_status,
        o.name,
        o.phone,
        o.delivery_time,
        o.createtime
    FROM
        orders AS o,
        water_member AS u

    WHERE
        o.order_status = 1
    ORDER BY
        o.id
    DESC

</select>

我想評論一下您的分頁策略。

這不是MyBatis的問題,而是您的查詢問題。 分頁時,您需要指定一個UNIQUE列排序集。

這是因為在SQL中,默認情況下,行沒有特定的順序。 因此,當ORDER BY子句不夠明確時,數據庫將以任何順序返回它們。 這樣,“頁面1”和“頁面2”可能最終會顯示一些/很多相同的行。

每次執行查詢時(每次單擊“下一頁”),都必須明確指定行順序,但實際情況並非如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM