jeesite使用心得(一)

来源:互联网 发布:魔域淘宝绑6星vip 编辑:程序博客网 时间:2024/05/29 12:22
<update id="updateSelective">UPDATE ${table.name} <set><#list table.columnList as c><#if c.isEdit?? && c.isEdit == "1"><if test="${c.javaFieldId} != null" >   ${c.name} = ${"#"}{${c.javaFieldId}}, </if></#if></#list></set>WHERE id = ${"#"}{id}</update>

jeesite是一个很好用的开源框架,尤其是权限角色的管理,不需要改什么就可以直接拿来用。
但使用中还是有一点不满足需求,就试着改了一下。

用jeesite自带的代码生成器,生成的实例如下:

@RequiresPermissions("test:testData:view")@RequestMapping(value = {"list", ""})public String list(TestData testData, HttpServletRequest request, HttpServletResponse response, Model model) {Page<TestData> page = testDataService.findPage(new Page<TestData>(request, response), testData); model.addAttribute("page", page);return "jeesite/test/testDataList";}
调用abstract class CrudService的findPage方法

/** * 查询分页数据 * @param page 分页对象 * @param entity * @return */public Page<T> findPage(Page<T> page, T entity) {entity.setPage(page);page.setList(dao.findList(entity));return page;}

这样查到的是一个对象集合,也可以带参数查询,只要是参数的属性即可。
但是如果需要太多,查询条件不是一个表对应的对象属性,查询到的结果是几个表关联查询的结果,
以前的处理方式是,封装成HashMap<String,Object>的形式.查到的结果是List<HashMap<String,Object>>
这样就不需要封装到对象,交流一下代码。

jsp:

<form:form id="searchForm" modelAttribute="baseBusMddkApplication" action="${ctx}/contract/busMddkApplication/" method="post" class="breadcrumb form-search">模糊搜索:<input class="resetClass" type="text" name="orderNo" id="orderNo"/><li class="btns"><input id="btnSubmit" class="btn btn-primary" type="submit" value="确定"/></li><li class="clearfix"></li></form:form>

本来有很多参数,就不都贴出来了。
会按name值查询(orderNo)

controller:

@RequiresPermissions("contract:busMddkApplication:view")@RequestMapping(value = { "list", "" })protected String list(BusMddkApplicationVo BusMddkApplicationVo, HttpServletRequest request,HttpServletResponse response, Model model) {Page<BusMddkApplication> page = new Page<BusMddkApplication>(request, response);Map<String, Object> params = request.getParameterMap();List<Map<String, Object>> list = busMddkApplicationService.findPage(page, params);return "modules/bus/contract/busMddkApplicationList";}

这里的params会有一个{orderNo=}
page对象,可以封装成任意一个entity,这里我封装的是这个controller对应的entity
调用service的重写的findPage(Page<BusMddkApplication> page, Map<String, Object> params)方法

dao:

List<Map<String, Object>> findListByPage(@Param("page")Page<BusMddkApplication> page,@Param("params")Map<String, Object> params);

注意@param注解,一定要加,否则找不到参数的错。

mapper.xml:

<!-- 自定义sql begin --><sql id="busMddkApplicationColumnsMap">a.application_id AS "applicationId",a.order_no AS "orderNo",b.merchants AS "merchants",c.application_name AS"applicationName",ar1.name AS "pArea.name",ar2.name AS "cArea.name"</sql><sql id="busMddkApplicationJoinsMap">LEFT JOIN sys_area ar1 ON ar1.id = a.area_id_proviceLEFTJOIN sys_area ar2 ON ar2.id = a.area_id_cityLEFT JOINbus_mddk_application_customer c ON c.application_id = a.application_idLEFT JOIN bus_mddk_application_office b ON b.application_id = a.application_id</sql><!-- 自定义sql end --><select id="findListByPage" resultType="java.util.HashMap">SELECT<include refid="busMddkApplicationColumnsMap" />FROM bus_mddk_application a<include refid="busMddkApplicationJoinsMap" /><where>1 = 1 <!-- like --><if test="params.orderNo != null and params.orderNo != ''">AND b.merchants likeconcat('%',concat(#{params.orderNo},'%'))</if><if test="params.orderNo != null and params.orderNo != ''">AND c.application_name likeconcat('%',concat(#{params.orderNo},'%'))</if><if test="params.orderNo != null and params.orderNo != ''">AND a.order_no likeconcat('%',concat(#{params.orderNo},'%'))</if></where><choose><when test="page !=null and page.orderBy != null and page.orderBy != ''">ORDER BY #{page.orderBy}</when><otherwise>ORDER BY a.update_date DESC</otherwise></choose></select>

这样就多表关联查询,将结果封装到Map
jsp回显数据:

<c:forEach items="${list}" var="baseBusMddkApplication"><input type="hidden" id="applicationId" value="${baseBusMddkApplication.applicationId}"/></c:forEach>
也是遍历之后,对象.属性的方式,可以根据map的key值获取value值。


关于updateSelective方法,jeesite没有提供这个方法。他都是先查再更新。
但是有时候页面的数据太多,updateSelective方法比较实用,如果传过来的参数有值就更新,没有就保持原来的值。
jeesite代码生成的模板在resources/templates/modules/gen文件夹下,
找到dao下的mapper.xml
增加下面的代码:

再生成的就有updateSelective方法了。