查询是菜菜鸟在开发中遇到最多的问题,几乎每次的大业务需求都会出现或多或少的问题,导入的查询,分页的查询,模糊查询,多表联查等等,为此肯定需要好好的记录,希望以后遇到的越来越少。
目录
一、分页查询
对于这个问题,遇到最多的是页面数据不展示以及后台数据查询不到,说问题大也不是很大,说小呢也不小,就是折磨人
1、页面不展示
以前台为基准,往后台推进
1、前台中首先查看前台中接口地址是否正确,再查看其事件是否绑定和方法调用,最后确定赋值是否正确
1)接口地址必须和后台的接口地址保持一致,并确定参数的类型,以及权限问题;
2)事件绑定注意正确性,确保事件的唯一性,并且最后的方法事件名最好复制粘贴,以免出现低级错误;
3)赋值中的属性字段和后台的必须一致。
2、后台中首先查看权限和参数的问题,再查看实现类中的逻辑处理,最后检查SQL问题
1)参数和前台对应不上会出现页面没有数据,前台的权限可能需要配置,当然有时候用不到权限;
2)实现类处理数据时,返回的数据保证前台好接受或者方便处理;
3)SQL问题就有点多了,特别联查注意标点符合、过滤、字段正确性、传入传出值得类型等等,必须细心认真。
当然,有经验了其中的好多步骤直接忽略,菜菜鸟遇到最多的是SQL问题,大多都是不仔细和值的类型造成的。
2、数据对应不上
菜菜鸟遇到这种情况大多是字段属性对应的映射问题,个人建议页面展示顺序和查询顺序保持一直,如果数据过多,方便检查。
3、联查数据重复
多表联查可能导致多条数据重复出现
SELECT
distinct
cp.customer_code customerCode,
cp.customer_name customerName,
cp.address,
cp.tel
FROM
visit_customer_plan cp
<if test="param.orgList != null and param.orgList.size > 0">
inner join relation_org org on cp.sales_line_code = org.c_code
AND org.p_code IN
<foreach collection="param.orgList" item="item" separator="," open="(" close=")">
#{item}
</foreach>
</if>
<trim prefix="WHERE" prefixOverrides="and | or">
<if test="param.keyword != null and param.keyword != ''">
and (
cp.customer_code like concat('%',#{param.keyword},'%')
or cp.customer_name like concat('%',#{param.keyword},'%')
or cp.address like concat('%',#{param.keyword},'%')
)
</if>
<if test="param.startTime!=null">
<![CDATA[ and DATE_FORMAT(cp.visit_date, '%Y-%m-%d') >= DATE_FORMAT(#{param.startTime}, '%Y-%m-%d')]]>
</if>
<if test="param.endTime!=null">
<![CDATA[ and DATE_FORMAT(cp.visit_date, '%Y-%m-%d') < DATE_FORMAT(#{param.endTime}, '%Y-%m-%d')]]>
</if>
and cp.status = 0
</trim>
联查是由于某些分组原因致使数据重复,有的会导致统计数据不正确
SELECT
count( DISTINCT bci.customer_code )
FROM
base_customer_info AS bci
JOIN relation_base_customer_sales AS rbcs ON rbcs.customer_code = bci.customer_code
AND rbcs.sales_line_code in
<foreach collection="orgList" open="(" index="index" close=")" item="item" separator=",">
#{item}
</foreach>
二、模糊查询
模糊查询在开发问题中遇到的不少的,都是粗心大意造成的,说白了就是代码敲的少,不熟练。我这将模糊查询分了两类,一是一般模糊查询,一个是时间的模糊查询。
1、一般模糊查询
平时用的最多的方法一直接使用%拼接
<!--方法一: 直接使用 % 拼接字符串-->
<if test="param.customerCode != null and param.customerCode != ''">
and h.customer_code like "%"#{param.customerCode}"%"
</if>
<!--方法二: 使用concat函数-->
<if test="phone != null">
and phone like concat("%",#{phone},"%")
</if>
<!--方法三: 使用 bind 标签,对字符串绑定,然后对绑定后的字符串使用like模糊查询 -->
<if test="email != null">
<bind name="pattern" value="'%'+email+'%'"/>
and email like #{pattern}
</if>
2、时间模糊查询
时间的模糊查询是对有时间区间那种的
<if test="param.startTime != null and param.startTime != ''">
<![CDATA[ and DATE_FORMAT(h.create_date, '%Y-%m-%d') >= DATE_FORMAT(#{param.startTime}, '%Y-%m-%d')]]>
</if>
<if test="param.endTime != null and param.endTime != ''">
<![CDATA[ and DATE_FORMAT(h.create_date, '%Y-%m-%d') <= DATE_FORMAT(#{param.endTime}, '%Y-%m-%d')]]>
</if>