Mybatis手写分页,非常灵活

先写一个实体类,封装查询条件
public class QueryBase {

    private int page = 1;

    private int pageSize = Constant.PAGING_SIZE;

    private String sortBy;

    private String sortMethod;

    public int getPage() {
        return page;
    }

    public void setPage(int page) {
        this.page = page;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public String getSortBy() {
        return sortBy;
    }

    public void setSortBy(String sortBy) {
        this.sortBy = sortBy;
    }

    public String getSortMethod() {
        return sortMethod;
    }

    public void setSortMethod(String sortMethod) {
        this.sortMethod = sortMethod;
    }

    public String getLimitString() {

        if(pageSize > 0 & page > 0) {
            return ((page * pageSize) - pageSize) + "," + pageSize;
        }
        return "";
    }
}
再写一个实体类,用来接收查询的结果
public class QueryResult {
    private int page;
    private int pageSize;
    private int totalRecord;

    private Object data;

    public int getPage() {
        return page;
    }

    public void setPage(int page) {
        this.page = page;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public int getTotalRecord() {
        return totalRecord;
    }

    public void setTotalRecord(int totalRecord) {
        this.totalRecord = totalRecord;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}
订单表的实体类
@JsonIgnoreProperties({
        "channelStoreId"
})
public class Order {

    private Integer id;
    private String outerId;
    private String orderSn;
    private int storeId;
    private int channelStoreId;
    private String storeName;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getOuterId() {
        return outerId;
    }

    public void setOuterId(String outerId) {
        this.outerId = outerId;
    }

    public String getOrderSn() {
        return orderSn;
    }

    public void setOrderSn(String orderSn) {
        this.orderSn = orderSn;
    }

    public int getStoreId() {
        return storeId;
    }

    public void setStoreId(int storeId) {
        this.storeId = storeId;
    }

    public int getChannelStoreId() {
        return channelStoreId;
    }

    public void setChannelStoreId(int channelStoreId) {
        this.channelStoreId = channelStoreId;
    }

    public String getStoreName() {
        return storeName;
    }

    public void setStoreName(String storeName) {
        this.storeName = storeName;
    }
}
假设要根据门店id和订单状态查询订单列表
public class QueryOrder extends QueryBase{

    private Integer storeId;
    private List<Integer> orderState;

    public Integer getStoreId() {
        return storeId;
    }
    public void setStoreId(Integer storeId) {
        this.storeId = storeId;
    }
    public List<Integer> getOrderState() {
        return orderState;
    }
    public void setOrderState(List<Integer> orderState) {
        this.orderState= orderState;
    }

}
再写dao
public interface OrderMapper {

    List<Order> findOrderList(QueryOrder queryOrder);
    Integer findOrderCount(QueryOrder queryOrder);

}
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.mappers.OrderMapper" >

    <select id="findOrderList" parameterType="QueryOrder" resultMap="orderResult">
        SELECT * FROM `order`
        WHERE 1=1
        <if test="storeId != null and storeId > 0"> AND store_id = #{storeId}</if>
        <if test="orderState != null"> AND order_state IN
            <foreach item="item" index="index" collection="orderState" open="("
                     separator="," close=")">
                #{item}
            </foreach>
        </if>
        <if test="sortBy != null">
            ORDER BY ${sortBy} <if test="sortMethod != null">${sortMethod}</if>
        </if>
        <if test="pageSize > 0 and page > 0">
            LIMIT ${limitString}
        </if>;
    </select>

    <select id="findOrderCount" parameterType="QueryTrade" resultType="Integer">
        SELECT COUNT(0) FROM order
        WHERE 1=1
        <if test="storeId != null and storeId > 0"> AND store_id = #{storeId}</if>
        <if test="orderState != null"> AND order_state IN
            <foreach item="item" index="index" collection="orderState" open="("
                     separator="," close=")">
                #{item}
            </foreach>
        </if>
    </select>

    <resultMap type="com.entity.Order" id="orderResult">
        <id property="id" column="id"/>
        <result property="outerId" column="outer_id"/>
        <result property="orderSn" column="order_sn"/>
        <result property="storeId" column="store_id"/>
        <result property="storeName" column="store_name"/>
    </resultMap>

</mapper>
再写接口
@Service
public class OrderServiceImpl implements OrderService{

    @Autowired
    OrderMapper orderMapper;


    public QueryResult queryOrder(QueryOrder queryOrder) {

        QueryResult result = new QueryResult();
        result.setPage(queryOrder.getPage());
        result.setPageSize(queryOrder.getPageSize());
        result.setTotalRecord(orderMapper.findOrderCount(queryOrder));
        result.setData(orderMapper.findOrderList(queryOrder));

        return result;
    }

}
最后写一个controller
@Controller
@RequestMapping("/order")
public class OrderController {

    @Autowired
    OrderService orderService;

    // 查询订单详情
    @RequestMapping(value = "list", method = RequestMethod.GET, produces = "application/json;charset=UTF-8")
    @ResponseBody
    public Object getOrderList(HttpServletRequest request) {

        Integer page, pageSize, status, storeId;

        QueryOrder queryOrder = new QueryOrder();
        List<Integer> orderState = new ArrayList<Integer>();

        String sortBy = request.getParameter("sortBy");
        String sortMethod = request.getParameter("sortMethod");

        storeId = NumberUtils.toInt(request.getParameter("storeId"));
        status = NumberUtils.toInt(request.getParameter("status"));
        page = NumberUtils.toInt(request.getParameter("page"));
        pageSize = NumberUtils.toInt(request.getParameter("pageSize"));

        if (StringUtils.isBlank(sortBy))
            sortBy = "ctime";

        if (StringUtils.isBlank(sortMethod))
            sortMethod = "desc";

        queryOrder.setSortBy(sortBy);
        queryOrder.setSortMethod(sortMethod);
        queryOrder.setStoreId(storeId);
        queryOrder.setPage(page);
        queryOrder.setPageSize(pageSize);

        ResponseMsg msg = new ResponseMsg();

        if (status == 1) {
            orderState.add(1);
        } else if (status == 2) {
            orderState.add(2);
            orderState.add(3);
        } else if (status == 0) {
            orderState.add(1);
            orderState.add(2);
            orderState.add(3);
        } else {
            msg.setMsg("暂无数据");
            return msg;
        }

        queryOrder.setStatus(orderState);

        QueryResult result = orderService.queryOrder(queryOrder);

        msg.setMsg("ok");
        msg.setData(result);
        msg.setCode(0);

        return msg;
    }

}

这样,一个简单的分页接口已经完成,有什么需要改进的地方欢迎大家指出,谢谢!

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot应用程序中使用MyBatis进行分页,可以通过以下步骤完成: 1. 引入MyBatisMyBatis分页插件依赖。例如,可以在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.3.1</version> </dependency> ``` 2. 在MyBatis配置文件中配置分页插件。例如,在application.properties中添加以下配置: ``` mybatis.mapper-locations=classpath:mapper/*.xml pagehelper.helper-dialect=mysql pagehelper.reasonable=true pagehelper.support-methods-arguments=true pagehelper.params=count=countSql ``` 3. 在Mapper接口中添加分页查询方法。例如: ``` public interface UserMapper { List<User> getUsersByPage(@Param("start") int start, @Param("size") int size); } ``` 4. 在Mapper XML文件中实现分页查询。例如: ``` <select id="getUsersByPage" resultType="User"> SELECT * FROM user LIMIT #{start}, #{size} </select> ``` 5. 在Service层中调用Mapper接口的分页查询方法,并传入起始位置和每页大小。例如: ``` @Service public class UserService { @Autowired private UserMapper userMapper; public List<User> getUsersByPage(int pageNum, int pageSize) { int start = (pageNum - 1) * pageSize; return userMapper.getUsersByPage(start, pageSize); } } ``` 以上就是在Spring Boot应用程序中使用MyBatis进行分页的基本步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值