经历漫长的时间,终于把项目功能模块做完了,后期进行项目的测试、调优等工作。想想在这个项目中还是收获许多,比如:使用struts2+mybatis+bootstrap做商户管理系统,struts2虽然以前有使用过,但是自从struts2报高危漏洞之后就很少使用过,对于其中的一些用法不是很熟悉,只有自己慢慢的拾,struts2的拦截器做的真的很好,在做登录的时候就使用到了
/**
* 登录拦截器
* @author wangbowen@date 2014年9月1日
* @version 1.0
*
*/
public class LoginedCheckInterceptor extends AbstractInterceptor {
/**
*
*/
private static final long serialVersionUID = 6812421935655688100L;
@Override
public String intercept(ActionInvocation invocation) throws Exception {
//获取请求的地址
String url = ServletActionContext.getRequest().getRequestURL().toString();
//获取响应
HttpServletResponse response = ServletActionContext.getResponse();
//设置响应头信息
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setHeader("Cache-Control", "no-store");
response.setDateHeader("Expires",0);
//登录信息
MerchantLoginInfo merchantLoginInfo = null;
//对登录与注销请求直接放行,不予拦截
if (url.indexOf("goLogin")!=-1 || url.indexOf("goLoginOut")!=-1){
return invocation.invoke();
}else{
//验证Session是否过期
if(!ServletActionContext.getRequest().isRequestedSessionIdValid()){
//session过期,转向session过期提示页,最终跳转至登录页面
return "gotoLogin";
}else{
merchantLoginInfo =(MerchantLoginInfo) ServletActionContext.getRequest().getSession().getAttribute("userInfo");
//验证是否已经登录
if (merchantLoginInfo==null){
//尚未登录,跳转至登录页面
return "gotoLogin";
}else{
return invocation.invoke();
}
}
}
}
}
然后在xml中配置如下就可以使用了
<!-- 配置自定义拦截器LoginedCheckInterceptor -->
<interceptors>
<interceptor name="loginedCheck" class="cn.my.interceptor.mertchant.LoginedCheckInterceptor"/>
<interceptor-stack name="mystack">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="loginedCheck" />
</interceptor-stack>
</interceptors>
<!-- 定义全局result -->
<global-results>
<result name="gotoLogin">login.html</result>
</global-results>
<!-- 跳转至主页面 -->
<action name="goMenu">
<result>/view/merchant/main.html</result>
<interceptor-ref name="mystack"/> <!--使用自定义拦截器--->
</action>
在以前的项目中数据库访问技术一般使用hibernate、jdbc,基本上没有使用过mybatis,只是看过相关文档。在使用的时候心里总是想还是
hibernate好,一些基本的sql语句不需要自己去写,而mybatis什么sql语句都需要自己去写。比如一个简单的分页语句,对于hibernate只需要调用方法就可以了,而mybatis需要手写查询数据的方法和查询总条数的方法
<select id="getxx" resultMap="BaseResultMap" parameterType="cn.my.utils.PageParameter" >
select * from (select * from (select osd.AO_RUNNING_NUM,osd.AO_TRANS_DATETIME,osd.TRANS_TYPE,
osd.TRANS_AMOUNT,osd.BILL_ORGAN_SERVICE_CHARGE,osd.MOBILE_NO ,rownum rn
from osd_inprov_trans_details_info osd
where osd.TRANS_BILL_ORGAN = ${parameterMap.get('merchantId')}
<if test="parameterMap.get('beginTime') != null and parameterMap.get('beginTime') != ''">
and to_char(osd.AO_TRANS_DATETIME,'yyyy-MM-dd') between '${parameterMap.get('beginTime')}'
</if>
<if test="parameterMap.get('endTime') != null and parameterMap.get('endTime') != ''">
and '${parameterMap.get('endTime')}'
</if>
<if test="sort != null and order != null">
order by ${sort} ${order}
</if>
)
<![CDATA[
where rn <= #{endRows,jdbcType=INTEGER}
)
where rn >#{startRows,jdbcType=INTEGER}
]]>
</select>
<select id="getxxxTotal" resultMap="BaseResultMaps" parameterType="cn.my.utils.PageParameter">
select count(*) as total, sum(TRANS_AMOUNT) as sumMoney from osd_inprov_trans_details_info osd
where osd.TRANS_BILL_ORGAN = ${parameterMap.get('merchantId')}
<if test="parameterMap.get('beginTime') != null and parameterMap.get('beginTime') != ''">
and to_char(osd.AO_TRANS_DATETIME,'yyyy-MM-dd') between '${parameterMap.get('beginTime')}'
</if>
<if test="parameterMap.get('endTime') != null and parameterMap.get('endTime') != ''">
and '${parameterMap.get('endTime')}'
</if>
<if test="sort != null and order != null">
order by ${sort} ${order}
</if>
</select>
但是慢慢发现mybatis还是很好用的,多以总结了以下 数据库访问技术的比较 :
- Hibernate可以提供开发效率,但是对底层SQL的控制不太方便;
- MyBatis通过模版化支持可以方便的控制SQL,效率不高
- JDBC自由度高、运行效率高,但是代码繁复,比如:完全依赖于数据配置产生的查询方案的综合查询系统
对于bootstrap响应式框架之前只是简单的使用,并没有详细的了解。对于页面的样式与布局不是很会,还需要多看多使用多总结。
其实让我真正受益匪浅的是软件开发的思想:做一个功能或者其他时,首先要弄清楚做的目的,接着就是做的方法有哪些?然后挑选出最能解决此问题的方法,构思此方法的一个实现逻辑;最后就是动手实践,在实践中修正不足之处。