菜鸟Bug之查询

查询是菜菜鸟在开发中遇到最多的问题,几乎每次的大业务需求都会出现或多或少的问题,导入的查询,分页的查询,模糊查询,多表联查等等,为此肯定需要好好的记录,希望以后遇到的越来越少。

目录

一、分页查询

1、页面不展示

2、数据对应不上

3、联查数据重复

二、模糊查询

1、一般模糊查询

2、时间模糊查询

一、分页查询

对于这个问题,遇到最多的是页面数据不展示以及后台数据查询不到,说问题大也不是很大,说小呢也不小,就是折磨人

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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值