第五节.查询注意事项

本文详细介绍了在IT项目中,如何使用MyBatis进行查询操作,包括查询结果的标准化、分页处理、参数处理和XML查询语句的注意事项。特别强调了接口设计的一致性和安全性,以及适应统计和表格显示的需求。
摘要由CSDN通过智能技术生成

1.查询结果注意

为方便反馈查询结果,以及和统计进行通用,我们的查询结果格式保持一致,如下:

所有的查询包括统计,为了通用,都返回数据格式的接口

 rows是数组,total总量,pageCount当前第几页

http://152.136.26.29:8888/manage-api/TProjectInterfaceTestController/getTestInfoList?akglobetag=44807

这种查询适配bootstrp 查询表格的显示,也适配通用的统计模式,如下

一个接口即可将统计图实现,也可以下面是表格:

如果涉及到统计的话,可以加rows下的数组 内的对象放置 name value code id  这样的标准字段名称,值,编码,主键

2 查询代码注意

3  xml查询语句注意事项

 查询返回的是 增补字段后扩展的对象

扩展对象如下:

查询条件

<sql id="findPage_where">
  <where>
    <!-- 查询 -->
    <if test="name != null">
      AND (tsn.name like '%${name}%')
    </if>
    <if test="deleteFlag != null">
      AND  tsn.delete_flag = #{deleteFlag}
    </if>

  </where>
</sql>

分页

 分页采用mysql  和pg都支持的模式做,不要用Mysql的模式做,不兼容

如下是对的:

<sql id="limit">
  <if test="offset!=null and limit!=null">
    limit #{limit}  offset  #{offset}
  </if>
</sql>

传入参数

if (paramMap.containsKey("limit") && !StringUtils.isEmpty(paramMap.get("limit"))
        && paramMap.containsKey("offset") && !StringUtils.isEmpty(paramMap.get("offset"))) {
    limit = Integer.valueOf(paramMap.get("limit").toString());
    offset = Integer.valueOf(paramMap.get("offset").toString());
    newParam.put("limit", limit);
    newParam.put("offset", offset);
}

4 查询相应格式

全部统一

 rows是数组,total总量,pageCount当前第几页

三维

表格

5 查询代码:

 /**
     * 查询列表
     */
    @RequestMapping(value = "/list", method = RequestMethod.GET)
    public Map list(HttpServletRequest request) {
        Map paramMap = getParameters(request);// 获取默认的条件 并判断是否有特殊字符
        Map newParam = new HashMap();//  用来构建请求参数
        Map ret = new HashMap();//  用来返回的 map
        // 统一校验 传入的参数是否有特殊字符  或者 sql 注入  等保需要 校验
        if (paramMap.containsKey("flagTGG1001") && !StringUtils.isEmpty(paramMap.get("flagTGG1001"))) {
            List  list =new ArrayList<>();
            ret.put("flag", false);
            ret.put("msg", StatusCode.C00511.getMsg());
            ret.put("status", StatusCode.C00511.getCode());
            ret.put("total", 0);
            ret.put("rows", list);
            return ret;
        }

        Integer limit = null;// 一页多少行
        Integer offset = null;// 从哪里开始

        if (paramMap.containsKey("limit") && !StringUtils.isEmpty(paramMap.get("limit"))
                && paramMap.containsKey("offset") && !StringUtils.isEmpty(paramMap.get("offset"))) {
            limit = Integer.valueOf(paramMap.get("limit").toString());
            offset = Integer.valueOf(paramMap.get("offset").toString());
            newParam.put("limit", limit);
            newParam.put("offset", offset);
        }
        if (paramMap.containsKey("deleteFlag")
                &&!StringUtils.isEmpty(paramMap.get("deleteFlag"))) {
            // paramMap 注意不能用这个请求   要用maps
            newParam.put("deleteFlag", Integer.parseInt(paramMap.get("deleteFlag").toString()));
        }


        if (paramMap.containsKey("name")
                &&!StringUtils.isEmpty(paramMap.get("name"))) {
            String name=paramMap.get("name").toString();
            newParam.put("name", name );
        }
        List<TBaseCountry> list = objServices.list(newParam);
        long count = objServices.count(newParam);
        // 如果是分页 ,未适配移动端,将移动多少页,以及当前从哪里开始返回
        if(null!=limit && null!=offset){
            Long pageCount=0L;
            if(count % limit==0){
                pageCount=count / limit;
            }else if(count==0){
                pageCount=0L;
            }else{
                pageCount=(count / limit)+1;
            }
            ret.put("pageCount", pageCount);//  一共有多少 页数
            ret.put("currenPage", offset);//  从第几个开始  并不是 当前是第几页   需要前端自己去计算当前是第几页
        }

        ret.put("total", count);
        ret.put("rows", list);
        return ret;
    }

mybaties 查询

  <!--修改校验-->
  <select id="countById" parameterType="Map" resultType="java.lang.Long">
    select   count(1)
    from t_base_country  tsn
    where  1=1
    <if test="id != null">
      AND id NOT IN (#{id,jdbcType=INTEGER})
    </if>
    AND tsn.name='${name}'
  </select>


  <sql id="findPage_where">
    <where>
      <!-- 查询 -->
      <if test="name != null">
        AND (tsn.name like '%${name}%')
      </if>
      <if test="deleteFlag != null">
        AND  tsn.delete_flag = #{deleteFlag}
      </if>

    </where>
  </sql>

  <sql id="limit">
    <if test="offset!=null and limit!=null">
      limit #{limit}  offset  #{offset}
    </if>
  </sql>



  <select id="findPage_count" resultType="java.lang.Long" useCache="false">
    SELECT count(1) FROM  t_base_country  tsn
    <include refid="findPage_where"/>
  </select>

  <select id="findPage" resultMap="TObjectMap" useCache="false">
    SELECT  tsn.order_num as order_num,
    tsn.id as id ,
    tsn.name as name,
    tsn.create_time  as
    create_time,
    b.user_name as createuser_name,
    tsn.delete_flag as delete_flag,
    tsn.create_user as create_user
    FROM t_base_country  tsn   left join t_user b on  tsn.create_user = b.id
    <include refid="findPage_where"/>

    order   by  tsn.order_num asc
    <include refid="limit"/>
  </select>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

akglobe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值