微服務(wù)開發(fā)系列 第四篇:分頁查詢

總概

A、技術(shù)棧
  • 開發(fā)語言:Java 1.8
  • 數(shù)據(jù)庫:MySQL、Redis、MongoDB、Elasticsearch
  • 微服務(wù)框架:Spring Cloud Alibaba
  • 微服務(wù)網(wǎng)關(guān):Spring Cloud Gateway
  • 服務(wù)注冊和配置中心:Nacos
  • 分布式事務(wù):Seata
  • 鏈路追蹤框架:Sleuth
  • 服務(wù)降級與熔斷:Sentinel
  • ORM框架:MyBatis-Plus
  • 分布式任務(wù)調(diào)度平臺:XXL-JOB
  • 消息中間件:RocketMQ
  • 分布式鎖:Redisson
  • 權(quán)限:OAuth2
  • DevOps:Jenkins、Docker、K8S
B、源碼地址

alanchenyan/ac-mall2-cloud

C、本節(jié)實現(xiàn)目標(biāo)
  • 分頁查詢訂單。
D、系列

一、MyBatis-Plus分頁插件

MyBatis新版分頁插件配置和舊版的一樣,參考MyBatis-Plus官網(wǎng):分頁插件

在mall-common項目中新建MyBatis-Plus分頁插件配置

package com.ac.common.config.mybatis;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class GlobalMybatisConfig {
    /**
     * 設(shè)置插件
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

        //分頁插件
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));

        //樂觀鎖
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }
}
mall-common項目截圖

二、分頁查詢訂單實現(xiàn)

2.1 分頁查詢對象

分頁查詢對象OrderPageQry繼承MyBaits分頁對象Page,注意是為了在寫訂單分頁查詢service時,不想提供兩個參數(shù),而共用一個參數(shù)。

@Data
public class OrderPageQry extends Page {

    @ApiModelProperty("用戶ID")
    private Long memberId;

    @ApiModelProperty("訂單號")
    private String orderNo;

    @ApiModelProperty("用戶姓名")
    private String memberName;

    @ApiModelProperty("手機(jī)號")
    private String mobile;
}
2.2 mapper層
/**
 * @author Alan Chen
 * @description 訂單-數(shù)據(jù)訪問層(依賴mybatis-plus),對應(yīng)mapper.xml里的自定義sql
 * @date 2023/02/21
 */
public interface OrderMapper extends BaseMapper<Order> {

    /**
     * 分頁查詢訂單
     *
     * @param page 分頁查詢參數(shù)
     * @param qry  查詢參數(shù)
     * @return
     */
    IPage<OrderDTO> pageOrder(Page page, @Param("qry") OrderPageQry qry);
}

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="com.ac.order.mapper.OrderMapper">

    <sql id="OrderDTO_Column">
        t.id,
        t.order_no,
        t.pay_channel,
        t.order_state,
        t.order_time,
        t.pay_time,
        t.refund_time,
        t.member_id,
        t.member_name,
        t.mobile,
        t.product_amount,
        t.discount_amount,
        t.pay_amount
    </sql>

    <select id="pageOrder" resultType="com.ac.order.dto.OrderDTO">
        select
            <include refid="OrderDTO_Column"></include>
        from
            t_order t
        <where>
            t.deleted = 0
            <if test="qry.memberId!=null">
                and t.member_id=#{qry.memberId}
            </if>

            <if test="qry.orderNo!=null and qry.orderNo!=''">
                and t.order_no=#{qry.orderNo}
            </if>

            <if test="qry.memberName!=null and qry.memberName!=''">
                and t.member_name like concat('%', #{qry.memberName}, '%')
            </if>

            <if test="qry.mobile!=null and qry.mobile!=''">
                and t.mobile = #{qry.mobile}
            </if>
        </where>
        order by t.create_time desc
    </select>
</mapper>
2.3 dao層
@Slf4j
@Repository
public class OrderDaoImpl extends ServiceImpl<OrderMapper, Order> implements OrderDao {

    @Resource
    private OrderMapper orderMapper;

    @Override
    public IPage<OrderDTO> pageOrder(OrderPageQry qry) {
        return orderMapper.pageOrder(qry, qry);
    }
}
2.4 service層
@Slf4j
@Service
public class OrderServiceImpl implements OrderService {
    @Override
    public IPage<OrderDTO> pageOrder(OrderPageQry qry) {
        return orderDaoImpl.pageOrder(qry);
    }
}
2.5 controller層
@Api(tags = "訂單")
@RestController
@RequestMapping("order")
public class OrderController {

    @Resource
    private OrderService orderServiceImpl;

    @ApiOperation(value = "分頁查詢訂單")
    @GetMapping("page")
    public IPage<OrderDTO> pageOrder(@Valid OrderPageQry qry) {
        return orderServiceImpl.pageOrder(qry);
    }
}

三、訂單分頁查詢測試

訂單分頁查詢測試

后臺打印sql

==>  Preparing: select t.id, t.order_no, t.pay_channel, t.order_state, t.order_time, t.pay_time, t.refund_time, t.member_id, t.member_name, t.mobile, t.product_amount, t.discount_amount, t.pay_amount from t_order t WHERE t.deleted = 0 and t.member_id=? order by t.create_time desc LIMIT ? OFFSET ?
==> Parameters: 264260572479489(Long), 2(Long), 2(Long)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容