比如我们有一个订单记录管理界面
条件可以通过订单号、商品名称、创建日期范围、价格范围。。。来进行筛选查询。首先我们先确定数据库订单表(我这里就不做连表了,都放在一个表中)模拟一个订单表
order表
订单号
| 商品名称
| 创建日期
| 价格
| 地址
| 用户
|
121
| 飞机
| 2023-03-23
| 199
| bj
| xxx
|
212
| 大炮
| 2023-04-23
| 29
| bj
| xxx
|
就比如我们有一个这样的订单表,
前端的话说一下思路,就不做演示了,我们将查询的每个字段当作参数传递给后端(我们可以通过order实体类来接受,此时要注意前端字段命名问题了,但是时间和价格都是一个范围,包括开始时间-结束时间,我们实体类中没有这个字段,此时我们就需要添加一
个DTO来继承那个实体类,在DTO中添加这几个实体类中没有的但是我们查询过程中会用到的字段,通过DTO来接受参数,注意:前端通过JSON传入后端,
后端通过@RequestBody接收)
如果不懂怎么写的可以去看下我的这个文章前后端交互问题
如果没什么特殊的业务操作我们的业务层和控制层基本
不用写代码(记得时间要格式化);
实现条件查询做重要的的部分来了也就是我们的sql语句
这里我们使用mybatis的 .xml配置文件来写sql
这里sql中就用到动态拼接的方法,也就是<where> <if> ....
本文实现功能只用到了这两个,其他你们可以去了解
//这里的resultMap="BaseResultMap"可以改成resultType="DTO类的全路径"
<select id="selectOrder" resultMap="BaseResultMap">
select
tipo.id, tipo.prizes_name,tipo.Receive_address_id, tipo.create_time,
tipo.Audit_time,
tipo.integral, tipo.user_name
from
t_order tipo
<where>
'1'='1'
<if test="prizesName != null and prizesName != ''">
and tip.prizes_name = #{prizesName}
</if>
<if test="startIntegral != null and startIntegral != ''">
<if test="endIntegral != null and endIntegral != ''">
and tip.prizes_integral between #{startIntegral} and #{endIntegral}
</if>
</if>
<if test="changeStartTime != null and changeStartTime != ''">
<if test="changeEndTime != null and changeEndTime != ''">
and tipo.create_time between #{changeStartTime} and #{changeEndTimestartTime}
</if>
</if>
</where>
order by tipo.create_time
</select>
再比如:
<select id="selectOrder" resultMap="BaseResultMap">
select
id, prizes_name,Receive_address_id, create_time,
Audit_time,
integral, user_name
from
t_order
<where>
'1'='1'
<if test="prizesName != null and prizesName != ''">
and prizes_name = #{prizesName}
</if>
<if test="startIntegral != null and startIntegral != ''">
<if test="endIntegral != null and endIntegral != ''">
and prizes_integral between #{startIntegral} and #{endIntegral}
</if>
</if>
//foreach的使用
<if test="ids!= null and ids.length!=0">
id IN
<foreach item="id" collection="ids" open="(" separator="," close=")">
#{id}
</foreach>
</if>
</where>
order by create_time
</select>
上面我们就通过动态拼接实现了按多条件查询的例子啦~,上面这种也可以不通过sql,直接在前端使用filter进行实现(可以提高用户体验,秒速查询)可以去看这个vue实现过滤器,但是这种情况
不能用于数据变化频率高的情况,因为在前端筛选不会重新查询数据库,也不能实时更新