1.查询结果注意
为方便反馈查询结果,以及和统计进行通用,我们的查询结果格式保持一致,如下:
所有的查询包括统计,为了通用,都返回数据格式的接口
rows是数组,total总量,pageCount当前第几页
这种查询适配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>