jeesite使用心得(一)

<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_provice
		LEFT
		JOIN sys_area ar2 ON ar2.id = a.area_id_city
		LEFT JOIN
		bus_mddk_application_customer c ON c.application_id = a.application_id
		LEFT 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 like
				concat('%',concat(#{params.orderNo},'%'))
			</if>
			<if test="params.orderNo != null and params.orderNo != ''">
				AND c.application_name like
				concat('%',concat(#{params.orderNo},'%'))
			</if>
			<if test="params.orderNo != null and params.orderNo != ''">
				AND a.order_no like
				concat('%',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方法了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

烤鸭的世界我们不懂

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

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

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

打赏作者

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

抵扣说明:

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

余额充值