[英]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.