UserAwardMapDao中queryUserAwardMapList执行问题。

来源:15-16 前端展示系统补强之奖品兑换记录列表页的开发

vvshyer

2017-12-18

SQL是不是没有判断Operator_id为空的情况?执行该方法后UserAwardMapList中没有operator_id为NULL的UserAwardMap.

SQL:

<select id="queryUserAwardMapList" resultMap="userAwardResultMap">
   SELECT
   uam.user_award_id,
   uam.create_time,
   uam.used_status,
   uam.point,
   buyer.user_id,
   buyer.name,
   s.shop_id,
   s.shop_name,
   a.award_id,
   a.award_name,
   operator.user_id AS operator_id,
   operator.name AS operator_name
   FROM
   tb_user_award_map uam,
   tb_person_info buyer,
   tb_shop s,
   tb_award a,
   tb_person_info operator
   <where>
      uam.user_id = buyer.user_id
      AND
      uam.shop_id = s.shop_id
      AND
      uam.award_id = a.award_id
      AND
      uam.operator_id = operator.user_id
      <!--按顾客信息精确查询-->
      <if test="userAwardCondition.user!=null
                   and userAwardCondition.user.userId!=null">
         and uam.user_id = #{userAwardCondition.user.userId}
      </if>
      <!--按某个店铺精确查询-->
      <if test="userAwardCondition.shop!=null
               and userAwardCondition.shop.shopId!=null">
         and uam.shop_id = #{userAwardCondition.shop.shopId}
      </if>
      <!--按顾客名字模糊查询-->
      <if test="userAwardCondition.user!=null
               and userAwardCondition.user.name!=null">
         and buyer.name like '%${userAwardCondition.user.name}%'
      </if>
      <!--按奖品名模糊查询-->
      <if test="userAwardCondition.award!=null
               and userAwardCondition.award.awardName!=null">
         and a.award_name like '%${userAwardCondition.award.awardName}%'
      </if>
      <!--按奖品可用状态查询-->
      <if test="userAwardCondition.usedStatus!=null">
         and uam.used_status = #{userAwardCondition.usedStatus}
      </if>
   </where>
   ORDER BY uam.create_time desc
   LIMIT #{rowIndex},#{pageSize}
</select>

UserAwardMapDaoTest:

http://img.mukewang.com/szimg/5a3714d60001952e22300254.jpg

http://img.mukewang.com/szimg/5a3714d60001c64b19260440.jpg

数据库中tb_user_award_map:

http://img.mukewang.com/szimg/5a3714ff00016cfe25081452.jpg

写回答

2回答

翔仔

2017-12-19

目前能想到的就是在一个方法里先取出operatorid 无论有没有值 毕竟咱userawardmap里有这个字段 然后在商家管理系统里再通过id取一次,不过还是同学的方法好:)

0
0

翔仔

2017-12-18

同学好,这应该是bug了,把sql写成了内连接的形式,为了解决这个问题,

同学可以把

      uam.user_id = buyer.user_id
      AND
      uam.shop_id = s.shop_id
      AND
      uam.award_id = a.award_id
      AND
      uam.operator_id = operator.user_id

改成

      uam.user_id = buyer.user_id
      AND
      uam.shop_id = s.shop_id
      AND
      uam.award_id = a.award_id
      AND
      (
      uam.operator_id = operator.user_id
      OR
      uam.operator_id is null
      )

应该就可以解决了。感谢同学的指正,讲的知识点有点多,所以可能会有些bug,也请同学理解海涵:)


0
12
vvshyer
回复
翔仔
今天测试发现改了这个地方后,会导致店家管理系统的积分记录页无法显示。原因是删去了operator相关的sql,导致读取出的userAwardMap中operator为null,前端页面无法读取对应的operator操作员,所以出现页面无数据的情况。 我的解决办法是:重新复制一个以前的未删去operator的方法并改个名,就能正常显示。期待老师更好的解决方法~
2017-12-20
共12条回复

Java双版本(SSM到SpringBoot)校园商铺全栈开发

SSM商铺V1.0,解决毕设痛点;SpringBoot商铺V2.0,满足工作刚需

5127 学习 · 8148 问题

查看课程