SpringMVC+Mybatis之获取查询列表和模糊查询、精确查询全过程详解

来源:互联网 发布:linux权限数值计算器 编辑:程序博客网 时间:2024/05/21 16:00

项目一期开发阶段快结束了,自己总结一下springMvc+mybatis框架做出一个完整功能的流程,仅供参考,欢迎指出错误。

先从controller开始,新建java文件什么的。包名要对,注意大小写。AbcController类似。类里面首先自动装配(或者叫注解)需要用到的其他功能的service

@AutowiredIYunGuanChuService yunguanchuService;@AutowiredICompanyService companyService;

这样,需要用到实体的时候再import相应的实体。下面就是controller的关键内容了

// 获取查询列表@RequestMapping("getPageList")public String list(HttpServletRequest request, Integer pageSize, Integer pageNow){Map<String, Object> mapFromRequest = Request2MapUtils.getMapFromRequest(request);// 判断登陆者身份 if (SystemCacheUtils.getCurrentAdminProfile().getUserType() == EnumAdminUserType.company.getValue()) {mapFromRequest.put("companyId", SystemCacheUtils.getCurrentAdminProfile().getCompanyId());} else if (SystemCacheUtils.getCurrentAdminProfile().getUserType() == EnumAdminUserType.yunguansuo.getValue()) {mapFromRequest.put("yunguansuoId", SystemCacheUtils.getCurrentAdminProfile().getYunguansuoId());} else if (SystemCacheUtils.getCurrentAdminProfile().getUserType() == EnumAdminUserType.yunguanchu.getValue()) {mapFromRequest.put("yunguanchuId", SystemCacheUtils.getCurrentAdminProfile().getYunguanchuId());}PageController<HashMap<String, Object>> resultList = messageService.<span style="color:#FF0000;">getPageListMap</span>(pageSize, pageNow,mapFromRequest);List<HashMap<String, Object>> dataList = resultList.getDataList();request.setAttribute("pageList", resultList);return "/manager/message/messageList";}
简单解释一下上面的代码。页面点了功能之后是一个request,查询所有的列表时request里面没有值,list方法的后面两个参数是控制页面显示数量和页面的,本文内不是重点就不解释了。搜索的查询request里面是带着页面上传过来的参数的,具体传的参数后面页面上的时候说。

先把request放在一个map里面,因业务需要还得判断一下登陆者身份,不作讲解。

PageController<HashMap<String, Object>><span style="font-size:12px;">是页面一个封装好的页面取数据的类,公司同事写好的,直接拿来用。红色字体是一个基类,每个功能的service都extends继承了该类。实际的作用就是在MessageMapper.xml中做查询的动作。下面贴上代码</span><pre name="code" class="java">@Overridepublic PageController<HashMap<String,Object>> getPageListMap(Integer pageSize, Integer pageNow, Map<String,Object> map) {int totalCount=mapper.totalCountMap(map);if(null==pageSize){pageSize=ConstantKey.DEFAULT_PAGE_SIZE;}if(null==pageNow){pageNow=1;}PageController<HashMap<String,Object>> page=new PageController<HashMap<String,Object>>(totalCount, pageSize, pageNow);if(totalCount>0){List<HashMap<String,Object>> list=mapper.pageListMap(pageSize, (pageNow-1)*pageSize,map);page.setDataList(list);}  return page;}
就是大概这个意思。页面控制页码什么的。接着说controller的内容。new一个叫dataList的list,里面是map。为什么呢new一个这样的玩意呢?同事说这样做想
在查询中比较灵活,想传什么键值写一对进去就好了。然后再把最后处理完成的结果set到request的pageList属性中。最后返回的是页面。
下边贴上页面的部分代码
<span><i>司机</i><samp>:</samp><input name="driverName" type="text" value="${companyName}"></span>

这个部分是查询输入的值,下面的是显示的值。应该是value必须一致的。

<c:forEach items="${pageList.dataList}" var="obj" varStatus="hh">                   <tr class="odd" role="row">                       <td class="sorting_1"><input type="checkbox" value="${obj.company_id}"  name="companyId" ${obj.company_id}  id="user_check" onclick="selectOne($(this));"></td>                       <td>${hh.index+1}</td>                       <td>${obj.companyName}</td>

  </tr>
</c:forEach>

前台和后台的逻辑基本上是这样的。最难的部分应该是xml里面mybatis的动态sql语句了额,写的我头疼。因为这个表需要联合其他四张表联合查询,写的东西比较多<select id="pageListMap" resultType="java.util.HashMap">
     select warn.*, yunguanchu.name yunguanchuName, yunguansuo.name yunguansuoName
     from tbl_yunguanchu yunguanchu, tbl_yunguansuo yunguansuo,
     where
     driver.yunguanchu_id = yunguanchu.yunguanchu_id and
     driver.yunguansuo_id = yunguansuo.yunguansuo_id and   
   <if test="map.yunguanchuId != null and map.yunguanchuId != ''">
    and yunguanchu.yunguanchu_id = #{map.yunguanchuId}
    </if>
   <if test="map.yunguansuoId != null and map.yunguansuoId != ''">
    and yunguansuo.yunguansuo_id = #{map.yunguansuoId}
    </if>
    
    <if test="map != null and map.yunguanchuName != null and map.yunguanchuName != ''">
        and yunguanchu.name like "%"#{map.yunguanchuName}"%"
    </if>
    <if test="map != null and map.yunguansuoName != null and map.yunguansuoName != ''">
        and yunguansuo.name like "%"#{map.yunguansuoName}"%"
    </if>
    
    order by update_time desc
    LIMIT #{rowIndex},#{size}
  </select>
可能写的代码有些重复了,不过就目前看来还能用,后面再发现什么问题的话再进行修改。如果前后写的有不一致的话就是删掉了部分东西,毕竟项目不能全贴出来

0 4
原创粉丝点击