MyCat - 订单模块 - 根据条件分页订单数据 | 学习笔记

简介: 快速学习 MyCat - 订单模块 - 根据条件分页订单数据

开发者学堂课程【全面讲解开源数据库中间件 MyCat 使用及原理(四):MyCat - 订单模块 - 根据条件分页订单数据】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/758/detail/13319


MyCat - 订单模块 - 根据条件分页订单数据

内容介绍:

一、订单查询

二、查询所需步骤

三、测试

 

一、订单查询

1.订单的查询条件:

订单 id、支付方式、用户名和支付状态

通过这四个条件进行订单查询并且对查询结果进行分页,查询的结果包括订单 id、订单提交时间、用户名、订单金额、支付方式、订单省份及支付状态。

image.png

对于省份,省份在数据表结构中存储的形式:

(打开订单表,在订单表中看到 receive province, 该处表示收件人的省份)

image.png

在此处存放的实际是收件人省份的 id:

image.png

在进行页面展示时,不是展示 id,而是具体的省份名称,这时需要考虑多表查询,所以对订单查询来说,这是一个多表查询。

 

二、查询所需步骤

1.多表查询的 SQL 语句:

指定从 tb_order 这张表开始查询,并给这张表取别名为 o ,第二张表 tb_provinces 取别名为 p。

image.png

这样就能讲所有订单及订单关联的省份查询出来.

对我们来说,不需要返回查询所有信息,可以选择返回订单 id、订单提交数据(订单创建时间 create_time)、用户名(username)、订单金额(total _money)、支付方式(pay_type)、支付状态(pay_status)

根据查询方式(如下图)得到查询结果:

image.png

对于支付方式及支付状态需要在页面进行处理

SQL 语句定义完成,接下来编写 MyCat 接口及 MyCat 映射配置文件:

2.编写 MyCat 接口:

第一步:

选择 Interface

image.png

在该接口中声明一个方法:

public List< TbOrder >search();

(返回的是一个列表,该列表名为 TbOrder ,再起方法名为 search)

由于这里执行的是条件查询,按照之前的操作方式要用 Map 传递条件。

该方法的目的是根据条件查询订单数据:

import cn.itcast.model.TbOrder;

import java. util.List ;

import java.util. Map;

public interface orderMapper {

public List<Tborder> search (Map<string,string> searchMap);

}

2.接口完成,再编写 MyCat 映射配置文件

再声明一份配置文件:

image.png

然后添加头信息:

image.png

再在其中编写一个 select 语句:

<select id>=”search” resultMap=”orderMap”

由于 order 中字段与数据表中返回字段的不配备,所以要定义一个 orderMap,然后将之前写好的 select 语句写入:

image.png

对于该 select 语句,还需要加入查询条件:

//判断 orderId 有无传递

<where>

<if test="orderId != null and orderId != ‘ ” ">

and o.id =#{orderId}

</if>

<if test="payType != null and payType != ‘ " ">

and o.pay_type = #{payType}

</if>

if test="username != null and username != ' " ">

and o.username = #{username}

</if>

if test=""payStatus = nul and paystatus l= ‘ “ ">

/*此处查询的是支付状态,支付状态对应的数据库表结构中的数据

*/

and o.pay_status=#{payStatus}

</if>

</where>

上面这段 select 语句编写完成,使用了动态 select ,原因是因为用户的查询条件可能不确定,有可能输入一个或者两个,也有可能不输入。

resultMap 的定义

//声明一个 resultMap

<resultMap id "orderMap"  type =”cn .itcast.model . TbOrder">

</ resultMap>

具体字段的对应情况:

配置文件已写好:

image.png

在该配置文件中,配置了当前数据库表结构中的字段和类中的属性的对应关系。

在其中 receiver_province 也是字符串类型,所以这里要将返回的省份信息直接封装到 receiver_province 中,即 p.’ province’ receiver_province

image.png

在页面获取时也通过 receiver_province 获取即可

配置完成后,还有最后一步:namespace

namespace 应该配置 Mapper 接口的权限另类名,将其拷贝后粘贴即可:

image.png

到此当前映射配置文件完成。

3.接下来编写 service 层的代码逻辑

在里面先建一个包

在 OrderService 中定义一个接口

import java. util.Map;

public interface orderservice {

public void add (TbOrder order) ;

//根据条件分页查询订单信息

//考虑到分页,这里直接返回一个 Page 对象,方法为 search

public Page search (Map<String,String> searchMap,Integer page,Integer size)

}

接口对应完成后定义其实现:
先注入 Mapper 接口

@Autowired

private OrderMapper orderMapper()

然后设置分页参数和执行分页查询:

@Override

public Page search (Map<String,String> searchMap,Integer page,Integer size) {

//1.设置分页参数

PageHelper.startPagre(page, size);

//2.执行分页查询

List<TbOrder> orderList = orderMapper.search ( searchMap) ;

//返回的 List 实际类型为 Page ,所以下面可以强制转换为 Page //类型

return ( Page) orderList;

}

该部分仍然报错:

image.png

只需将 Highlighting Level 调低即可:

image.png

到此,将 service 的底层逻辑实现完成

4.接下来编写 OrderController :

在里面增加一个方法

模拟添加:

//用 Map 封装请求条件(查询条件)

//需要添加注解,路径中传递 page 和 size

@PostMapping ( "/search/ {page}/ { size}")

public Result find Page(Map<String,String> searchMap,Integer page,Integer size){

//在该方法中调用 orderService 中的一个方法

Page page1=orderService.search(searchMap,page,size);

//得到总记录数

long total=page1.getTotal();

//得到结果列表

List result =page1.getResult();

//将上面两个信息封装到分页监控对象配置到 result 中

PageResult pageResult=new PageResult(total,result,);

return new Result(true,StatusCode.OK,message”查询成功”,pageResult)

}

注意:页面传递过来的参数都是 JSON 数据,这里需要封装到 Map 中,所以改为:

public Result find Page(@RequestBodyMap<String,String> searchMap,Integer page,Integer size)

由于路径中传递过来的 page 及 size ,所以还要加一个注解:

public Result find Page(@RequestBodyMap<String,String> searchMap, @PathVariable ( "page")Integer page, @PathVariable ( "page")Integer size)

至此,将订单查询接口定义完成。

 

三、测试

重启订单服务:

image.png

重启完成后,通过 Postman 对该接口再次进行测试

对当前服务执行 POST 请求:

image.png

执行:

这里抛出一个异常,该异常为请求体丢失。

因为这里 post 请求,还需要 JAON 格式的数据,即使没有任何查询条件,应该在请求体中给其应该空的 JSON 格式

再次执行:

image.png

共 22 条记录,当前返回 10 条

如果将每页订单记录数返回两条后再执行:

查询第一页:

image.png

查询第二页:

image.png

如果要根据订单号查询,则在参数块要加上 id :

image.png

这里报错,回到后端查看:

image.png

该错误是在执行 SQL 语句时抛出的,在查询总记录数时报错。

在这条 where 语句中,有两个关键字

将该 where 删除即可(因为上面已经有一个 where)

再次启动进行测试:

image.png

此时查询成功!

相关文章
|
6月前
|
PHP 数据库
fastadmin框架如何查询数据表指定时间段内的数据
fastadmin框架如何查询数据表指定时间段内的数据
155 0
|
SQL 前端开发 JavaScript
eggjs 怎么实现获取账单列表接口并且实现列表数据分页查询功能?
eggjs 怎么实现获取账单列表接口并且实现列表数据分页查询功能?
151 0
eggjs 怎么实现获取账单列表接口并且实现列表数据分页查询功能?
|
SQL 大数据 HIVE
电商项目之交易订单明细流水表 SQL 实现(上)|学习笔记
快速学习电商项目之交易订单明细流水表 SQL 实现(上)
898 0
电商项目之交易订单明细流水表 SQL 实现(上)|学习笔记
|
15小时前
|
XML Java 数据库连接
【MyBtis】各种查询功能
【MyBtis】各种查询功能
55 0
|
JSON 前端开发 Java
基于Springboot外卖系统14:菜品新增模块+多个数据表操作+文件上传下载复用
后台系统中可以管理菜品信息,通过新增功能来添加一个新的菜品,在添加菜品时需要选择当前菜品所属的菜品分类,并且需要上传菜品图片,在移动端会按照菜品分类来展示对应的菜品信息 。
175 0
|
JSON 前端开发 Java
基于Springboot外卖系统16:菜品修改模块+菜品信息回显+ID查询口味列表+组装数据并返回
在菜品管理列表页面点击修改按钮,跳转到修改菜品页面,在修改页面回显菜品相关信息并进行修改,最后点击确定按钮完成修改操作。
162 0
|
前端开发 Java 测试技术
基于Springboot外卖系统18:套餐分页查询模块+删除套餐+多数据表同步
系统中的套餐数据很多的时候,如果在一个页面中全部展示出来会显得比较乱,不便于查看,所以一般的系统中都会以分页的方式来展示列表数据
74 0
|
开发框架 前端开发 Java
java程序设计与j2ee中间件技术/软件开发技术(III)-大作业-采用MVC模式实现商品信息的查询显示(可以模糊查询)、增加和删除功能,商品表自拟,实现简单菜单操作和分页显示(三)
java程序设计与j2ee中间件技术/软件开发技术(III)-大作业-采用MVC模式实现商品信息的查询显示(可以模糊查询)、增加和删除功能,商品表自拟,实现简单菜单操作和分页显示
167 0
|
开发框架 前端开发 Java
java程序设计与j2ee中间件技术/软件开发技术(III)-大作业-采用MVC模式实现商品信息的查询显示(可以模糊查询)、增加和删除功能,商品表自拟,实现简单菜单操作和分页显示(二)
java程序设计与j2ee中间件技术/软件开发技术(III)-大作业-采用MVC模式实现商品信息的查询显示(可以模糊查询)、增加和删除功能,商品表自拟,实现简单菜单操作和分页显示
159 1
|
开发框架 前端开发 JavaScript
java程序设计与j2ee中间件技术/软件开发技术(III)-大作业-采用MVC模式实现商品信息的查询显示(可以模糊查询)、增加和删除功能,商品表自拟,实现简单菜单操作和分页显示(一)
java程序设计与j2ee中间件技术/软件开发技术(III)-大作业-采用MVC模式实现商品信息的查询显示(可以模糊查询)、增加和删除功能,商品表自拟,实现简单菜单操作和分页显示
300 1
java程序设计与j2ee中间件技术/软件开发技术(III)-大作业-采用MVC模式实现商品信息的查询显示(可以模糊查询)、增加和删除功能,商品表自拟,实现简单菜单操作和分页显示(一)