spring+struts2+ibatis(mybatis)+shiro项目构建架构

最近接了个项目,是java web项目,结构上不算复杂值得学习,不能透露,梳理一下原理。
1.spring主要用于aop用法,配置applicationContext里面的bean
2.struts2是项目请求的主要方式
3.ibatis用于sql请求
4.shiro用于用户验证

1.基本结构(已改,更好理解)
a.action 进行请求
b.util 公共类,公共变量等配置
c.xml 数据库和action等xml层配置
d.dao 数据库操作层,直接对xml的xxmap进行控制
e.service 业务层,从dao层取出数据,进行一定的验证
f.shiro 进行用户数据验证,过滤,缓存,包括XXRealm,XXCache等
e.other token过滤,xss过滤等
g.api 微信端前端app端的请求接口

请求流程:
jsp页面进行请求->XXFilter(fe)->进入xml的相应action(c)->找到相应的XXAction.java(a)->进入service业务层取数据(e)->从dao层取原始数据(d)->进入数据库层直接取数据(c)->返回一直到XXAction.java(a)->进入xml的相应action(c)找到跳转或ajax请求直接返回map

b的部分可能出现在任何位置,f的部分用于登录时(包括权限角色获取),过滤时,缓存时(用于jsp的shiro相关缓存)

这种方式是非maven的,如果是用maven,就把所有xml文件都放在resources目录下。

名词解释:
xss过滤:防止网站被钓鱼网站利用数据,挂马等

ibatis的xml结构:

<sqlMap namespace="命名空间,通常此处使用表名">
 <typeAlias alias="AAA" type="全名包括包名"/> 
 <!--此处class填入上方起的相应别名-->
  <resultMap id="abc" class="AAA">
  <!--所有表列名到字段名映射-->
   <result property="bean属性名" column="数据表列名" />
  </resultMap>
  <!--公共 select部分-->
  <sql id="selectColumn">
         <![CDATA[
         select a,b,c from xx
         ]]>
    </sql>
    <!--公共where-->
    <sql id="whereCondition">
        <dynamic prepend=" where 1=1 and">
        <!--kkk对应bean的属性名-->
          <isNotNull prepend="and" property="kkk"><![CDATA[ id=#kkk# ]]></isNotNull>
        </dynamic>
    </sql>
    <!--公共排序-->
    <sql id="orderByPart">
        <isNotEmpty property="orderByName"><![CDATA[  order by $orderByName$  ]]><isNotEmpty property="descAsc"><![CDATA[  $descAsc$  ]]></isNotEmpty></isNotEmpty>
      <isEmpty property="orderBy">
            <![CDATA[  order by 
             ID
          asc ]]>
      </isEmpty>
    </sql>
    <!--此处resultMap对应上方resultMap的id-->
      <select id="select2Map" resultMap="abc" parameterClass="java.util.Map">
         <include refid="selectColumn" /> 
         <include refid="whereCondition" />
         <include refid="orderByPart" />
      </select>  
</sqlMap>

使用include分割部分sql能够有效减少代码量

猜你喜欢

转载自blog.csdn.net/yu_duan_hun/article/details/81334936
今日推荐