mybatis+struts2+html(jstl)+css

从10月8号到今天23号,来到工作已经半个月了,这是我人生中真正意义上的一次步入社会,用自己20年的坚持和努力取得的人生第一步,说实话,感觉自己真的是个lucky dog,好像是在眷顾我,所有的事情都是那么顺利,让我没有理由不珍惜现在的所有,谢谢老师,一次次的满足我的请求,这半月我收货到的不管是从为人处世,团队管理,还是技术方面都很多,所以每天晚上睡觉都会一躺就着,因为一睁开眼就会忙碌一天,不过真的真的很充实,下面先说说我从技术上的收获。

最近这段时间一直接触的是后台,咋说呢?最大的感受就是在学校的实践对我的影响是毋庸置疑的,加上后来参加java3.1和4.0,s让我能够比较快的接受现在的框架,说一下我最近做的一个模块:邀请管理。

需求:我们公司是一个理财公司,大家都知道邀请码,如果一个人邀请了另一个人会让被邀请人在注册时输入邀请码,如下图:

那在后来呢,在没有升级之前是没有对邀请人和被邀请人进行关联的,只有一个实体,那就有人给客服打电话说我明明已经输入邀请码了呀,为什么没有显示,那为什么邀请人会这么想要别人输入邀请码呢,因为如果被邀请人投资了,那么邀请人会有提成,所以需求就这么产生了,我们需要添加邀请人和被邀请人的关系,并且可以禁用,但是不可以修改,因为如果可以修改,操作后台的人就发财了,他可以随便把邀请人换成自己,所以这个是不可以的,而且还需要可以导出,其实还是挺简单的。下面我们先来说说查询功能:

MyBatis:

在这里我们需要写入查询语句,这个语句真的很庞大,需要从客户表中查出邀请人和被邀请人的信息,然后去投资表中查出被邀请人投资金额,在邀请人和被邀请人的关系表中查出该邀请人和被邀请人的关系:

T_CUST_USER:客户表;T_LOAN_BID:投资表;T_CUST_USER_INVITE:邀请表

下面看下我的sql语句:

<span style="font-family: Arial, Helvetica, sans-serif;"><sqlMap namespace="<strong>CustomerUserInvite</strong>"></span>
<select id="<strong>queryInviterList</strong>" parameterClass="map" resultClass="java.util.HashMap">
		<![CDATA[
			SELECT t8.*,T9."NAME" FROM(
SELECT t7.* FROM
		(SELECT
			t5.USER_ID,
			t5.USER_NAME,
			t5.INVITE_USER_ID,
			t6.USER_NAME  AS INVITE_USER_NAME,
			t5.BID_AMOUNT,
			T5.operator_,
			T5.STATUS,
			t5.BID_STATUS,
TO_CHAR(T6.CREATE_TIME, 'yyyy-mm-dd hh24:mi:ss') CREATE_TIME,
			T5."ID"
				FROM
				(
					SELECT
					t3.USER_ID,
					T4.USER_NAME,
					t3.INVITE_USER_ID,
					t3.BID_AMOUNT,
					T3.operator_,
					t3.BID_STATUS,
					T3.STATUS,T3."ID"
						FROM
						(
							SELECT
							t1.USER_ID,
							t1.INVITE_USER_ID,
							t1.OPERATOR_,
							t2.BID_AMOUNT,
							t2.BID_STATUS,
							t1."ID",
							T1.STATUS
							FROM
							T_CUST_USER_INVITE t1
							LEFT JOIN T_LOAN_BID t2 ON t1.INVITE_USER_ID = t2.USER_ID
						) t3
					LEFT JOIN T_CUST_USER t4 ON t3.USER_ID = t4.ID
					) t5
		LEFT JOIN T_CUST_USER t6 ON t5.INVITE_USER_ID = t6. ID) t7
		WHERE 1=1)t8 LEFT JOIN T_USER_USER t9 ON t8.operator_=T9.id
	 ]]>
		<isNotEmpty prepend="" property="searchContent">
			WHERE (T8.USER_NAME LIKE
			'%$searchContent$%'
			OR T8.INVITE_USER_NAME LIKE '%$searchContent$%' )
		</isNotEmpty>
		<![CDATA[
			ORDER BY t8.STATUS DESC,t8.CREATE_TIME DESC
		]]>

	</select>
</sqlMap>

D层:

public class InviterDAO extends AbstractBaseDAO<CustomerUserInviteBean> {

	public InviterDAO(SqlMapClient sqlMap) {
		super(sqlMap);
	}

	//	对应xml中的命名空间
		@Override
		public String getNameSpace() {
			return "CustomerUserInvite";
		}
	//	对应数据表
		@Override
		public String getTableName() {
			return "T_CUST_USER_INVITE";
		}
	/**
		 * 查询全部-王丹
		 *
		 * @param paramMap
		 * @return
		 * @throws Exception
		 */
public DataWrap pageQuery(Map paramMap) throws Exception {
		return (DataWrap) DataAccessor.query(getNameSpace()
				+ ".<strong>queryInviterList</strong>", paramMap, RS_TYPE.PAGED);
	}

}

Service:

/**
	 * 分页查询全部-王丹-2015年10月14日16:43:38
	 *
	 * @param paramMap
	 * @return
	 * @throws Exception
	 */
	public DataWrap pagingQuery(Map inputMap) throws Exception {
		return new InviterDAO(null).pageQuery(inputMap);

	}

controller这儿需要注意一下:

我们不是直接去找controller,而是放到配置文件中,通过name去查,用的是struts:

<!-- 邀请人管理 -->
	<service name="InviterService" class="com.voiinnov.puhuilicai.customer.controller.InviterController"></service>

下面看下controller:

public class InviterController extends AService {
	private static Logger logger = Logger.getLogger(InviterController.class);

	private InviterService inviterService = new InviterService();

	@SuppressWarnings({ "unchecked", "rawtypes" })
	public void listInviter(Context context) {

		List errorList = context.errList;
//		用于存放返回结果,并用json返回到界面
		Map outputMap = inviterService.outputMap;

		try {
			DataWrap dataWarp = this.inviterService
					.pagingQuery(context.contextMap);

			// 结果集
			outputMap.put("dw", dataWarp);
			outputMap.put("searchContent",
					context.contextMap.get("searchContent"));
		} catch (Exception e) {
			e.printStackTrace();
			errorList.add("系统错误,请联系系统管理员!");
			logger.error(this.getClass().getName() + ":", e);
			e.printStackTrace();
		}
		if (context.errList.isEmpty()) {
			Output.jspOutput(outputMap, context,
					"/puhuilicai/customer/InviterList.jsp");
		} else {
			outputMap.put("errList", context.errList);
			Output.jspOutput(outputMap, context, "/error.jsp");
		}

	}

jsp中:

<body onload="setAction();">
	<form name="form1" id="form1"<strong> action="../servlet/defaultDispatcher"</strong>
		method="post">
		<input name="__action" value="<strong>InviterService.listInviter</strong>"
			type="hidden" /> <input name="statusShow" value="${statusShow }"
			type="hidden" />

		<!--头部开始-->
		<div id="fixedLayer">
			<div class="main">
				<div class="main_c main_bg">
					<div class="main_nav">
						<div class="nav_pic">
							<a href="javascript:void(0)" title="新增" onclick="initInviter()"><img
								src="${ctx }/commons/images/system/table_create1.gif" /></a>
							<a href="javascript:void(0);" title="导出" onclick="exportInviter()">
								<img src="../commons/images/system/ta_download1.jpg"></a>
							<ul style="float: right; margin-right: 5px; text-align: left;">
								<li><a href="javascript:void(0)" title="启用"
									onclick="updateStatus(0)">  启  用</a></li>
								<li><a href="javascript:void(0)" title="停用"
									onclick="updateStatus(-2)">  禁  用</a></li>
							</ul>

						</div>
					</div>
				</div>
			</div>
		</div>
		<!--头部结束-->
		<!-模糊查询开始-->
		<div class="margintop40"></div>
		<div class="main">
			<div class="main_c main_bg">
				<!--自适应宽度 -start-->
				<div class="table_scroll">
					<table width="100%" border="0" cellspacing="0" cellpadding="0">
						<tr>
							<td align="center" valign="top">
								<table width="100%" border="0" align="center" cellpadding="0"
									cellspacing="0" class="">
									<tr align="center" valign="middle">
										<td height="35" align="left" valign="middle"
											class="table_title_td_bg">
											<div style="float: left; line-height: 30px;">
												<span class=" margin_left10 font_white"><strong></strong></span>
											</div> <%@ include file="/commons/pageControl.jsp"%>

											<!-- 搜索和排序 -start-->
											<div style="float: right; line-height: 30px; width: 450px;">
												<div class="tsearch-panel-fields" style="margin-top: 6px;">
													<label for="searchContent">邀请人,被邀请人</label> <input
														name="searchContent" id="searchContent" type="text"
														class="span3" value="${searchContent }" />
												</div>
												<input type="image" onclick="doSearch();"
													src="${ctx }/commons/images/system/btn_search.png"
													style="width: 50px; height: 23px; margin-top: 6px; margin-left: 5px;" />

											</div> <!-- 搜索和排序 -end-->
									</tr>
								</table>
							</td>
						</tr>
					</table>
				</div>
<!-- 				查询表格 -->
				<table width="100%" border="1" align="center" cellpadding="0"
					cellspacing="0" class="table_style table2">
					<tr>
						<th style="text-align: center;" class="table_th_bg">序号
						</td>
						<th style="text-align: center;" class="table_th_bg">邀请人</th>
						<th style="text-align: center;" class="table_th_bg">被邀请人</th>
						<th style="text-align: center;" class="table_th_bg">注册时间</th>
						<th style="text-align: center;" class="table_th_bg">操作员</th>
						<th style="text-align: center;" class="table_th_bg">投资金额</th>
						<th style="text-align: center;" class="table_th_bg">投资状态</th>
						<th style="text-align: center;" class="table_th_bg">状态</th>

					</tr>
<!-- 					遍历查询结果 -->
					<c:forEach items="${dw.rs }" var="lists" varStatus="status">
						<tr id="${lists.ID}" USER_ID="${lists.USER_ID}"
							onclick="changeTrColor(this);" style="cursor: pointer;"
							<c:if test="${status.count % 2 == 0 }">bgcolor="#F5F5F5"</c:if>>
							<td style="text-align: center;">${status.count + dw.pageSize * (dw.currentPage - 1)}</td>
							<td height="24">${lists.USER_NAME}</td>
							<td height="24">${lists.INVITE_USER_NAME}</td>
							<td height="26px" >${lists.CREATE_TIME}</td>
							<td height="24">${lists.NAME}</td>
							<td height="24">

								<c:choose>
									<c:when test="${empty lists.BID_AMOUNT }">
										0
									</c:when>

									<c:otherwise>
									${lists.BID_AMOUNT}
									</c:otherwise>
								</c:choose>
							</td>
							<td height="24">
								<c:choose>
									<c:when test="${lists.BID_STATUS eq -1}">
										待付款
									</c:when>
									<c:when test="${lists.BID_STATUS eq 1}">
										投资中
									</c:when>
									<c:when test="${lists.BID_STATUS eq 2}">
										还款中
									</c:when>
									<c:when test="${lists.BID_STATUS eq 5}">
										债权转让
									</c:when>
									<c:when test="${empty lists.BID_STATUS }">
										未投资
									</c:when>
									<c:otherwise>
										未知
									</c:otherwise>
								</c:choose>
							</td>
							<td>
								<c:choose>
									<c:when test="${lists.STATUS eq 0}">
										启用
									</c:when>
									<c:otherwise>
										禁用
									</c:otherwise>
								</c:choose>
							</td>

						</tr>
					</c:forEach>
				</table>
				<%@ include file="/commons/pageControlBottom.jsp"%>
			</div>
		</div>
		<!--内容结束-->
		<div class="space"></div>
	</form>
</body>

下面是出来的效果:

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-05 06:18:08

mybatis+struts2+html(jstl)+css的相关文章

Mybatis+Struts2的结合:实现用户插入和查找

总结一下今天一个成功的小实验:Mybatis+Struts2的结合:实现用户插入和查找.删除和修改如果以后写了,会继续更新. 一 准备工作. 1.新建一个java web项目. 2.在webContent\lib目录下导入所需要的jar包. a.struts2需要的jar包. struts2 xwork-core.jar strut2-core.jar ognl.jar commoms-lang.jar freemarker.jar commons-fileupload.jar 包的位置: st

struts2和jstl有关循环的写法

一:前言 其实觉得自己现在就是个码农啊,对于struts2的标签和jstl的标签我一直都是只会用,但是觉得自己老是会混淆这种概念性的问题.所以我自己在代码里面就试着用了几种方式,实现同一种效果,下面就给出相应的jsp代码,只有标签部分 二:内容 //------------------jstl的c标签-------- //引入c和fmt标签 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"

Mybatis+struts2+spring整合

把student项目改造成ssm  struts2 +mybatis+spring 1,先添加spring支持:类库三个,applicationContext.xml写在webinf下四个命名空间,监听器 2,添加struts2支持  struts2与spring整合的jar包 3,添加mybatis2支持,把jar包导入,mybatis与spring整合的jar包,把原来在mybatis.cfg.xml中的大部分配置都写在applicationContext.xml,跟hibernate一样,

mybatis+struts2

前言:我们都知道Java开发web项目的框架有很多:struts,hibernate,spring,springMVC,mybatis,Ejb .个人来说,一般的网站都会使用传统的ssh.这几天,准确是4天,要开发一个报名的系统.挺小的一个网站,只有3张表.这个时候总不能用ssh吧,杀鸡焉用宰牛刀,但是有不想使用原始的jdbc,servlet.想来想去,决定用mybatis3.2.7+struts2.1.8+bootstarp开发. 需求:用户报名.完整的界面如下: mysql数据库:有3张表,

IDEA整合Mybatis+Struts2+Spring

1.IDEA新建Maven项目: (1)依次点击File->New->Project,弹出如下对话框: (2)在弹出的New Project页面上,①选择Maven,② 勾选Create from artifactype,③选择maven-archetype-webapp,点击Next,如下图: (3)GroupID:JAVA的包的结构,是main目录里java的目录结构. ArtifactID:项目的名称(就是项目的唯一的标识符),点击Next,如下图: (4)①User settings

struts1,struts2,springMVC终极对比

最近做项目用到了struts2,之前一直是用struts1和springMVC.感觉到了struts2从很大程度上和这两个还是有很大区别的,所以今天搜集了些资料,给他们做一下对比. Struts1官方已经停止更新,现在用的也比较少,这里主要讲一下struts2和struts1比较都有哪些不同和进步.Struts2可以说不是完全从struts1改进来的,因为struts2原本就是举世闻名的Webwork2,在经历几年的发展之后,struts和WebWork社区决定合二为一,也就是今天的struts

Struts1和Struts2的区别和对比(完整版)

Struts2其实并不是一个陌生的Web框架,Struts2是以Webwork的设计思想为核心,吸收了Struts1的优点,因此,可以认为Struts2是Struts1和Webwork结合的产物. 简单来说二者的区别是: 一个是Stuts1 ,一个是Stuts2,这是最大的区别,技术方面,Stuts1有个核心控制器,但是只提供了一个接口,也就是execute,还要配置actionform之类的,很麻烦,所以依赖性比较强:而Stuts2是针对拦截器开发的,也就是所谓的AOP思想,可以配置多个act

Struts1和Struts2的区别和对比

Struts1和Struts2的区别和对比: Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口. • Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能.Struts2提供一个ActionSupport基类去 实现 常用的接口.Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象. 线程模式: • Stru

struts2学习笔记(一)

一.struts2和struts1的区别 1.Action类 a) Struts1要求Action类继承于一个抽象类,Struts1普遍使用抽象类编程而不是接口 b) Struts2的Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能.Struts2提供一个ActionSupport基类去实现常用的接口.Action接口不是必须的,任何有execute标识的POJO对象都可以作为Struts2的Action对象. 2.线程模式 a) Struts1的Act