Struts2+Spring+iBATIS+ExtJS4学习笔记

来源:互联网 发布:淘宝网天堂伞 编辑:程序博客网 时间:2024/06/05 20:23

第一次接触Web编程,主要用ExtJS4做前台,利用Struts2+Spring+iBATIS来控制实现控制器和数据库的访问。

该记录只是对自己所学知识的研究和理解基础上的记录。

以下代码是在配置好的环境中实现前台利用url "/menu",来获得处理好的数据库中module列表的数据的过程。

例如:

store:Ext.create('POWER.store.Menus') 

Menus定义为:

Ext.define('POWER.store.Menus',{     extend: 'Ext.data.TreeStore',     root: {          expanded: true,urlxx:''    },      proxy: {          type: 'ajax',          url: '/menu'      }  ,autoload:false});


下面继续说一下在后台对/menu这个url的配置和处理,来保证数据可以正常访问的过程。

该操作主要是为了获取服务器端表中的数据,下面先P_MODULE_SqulMap.xml,实现数据库的查询操作

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" ><sqlMap namespace="P_MODULE" >  <resultMap id="Module" class="com.aigou.power.domain.Module" >    <!--      WARNING - This element is automatically generated by Abator for iBATIS, do not modify.      This element was generated on Sat Dec 03 14:01:11 CST 2011.    -->    <result column="CODE" property="code" jdbcType="VARCHAR" />    <result column="NAME" property="name" jdbcType="VARCHAR" />    <result column="LINKURL" property="linkurl" jdbcType="VARCHAR" />    <result column="PARENTCODE" property="parentcode" jdbcType="VARCHAR" />    <result column="DESCRIPTION" property="description" jdbcType="VARCHAR" />    <result column="IS_VALID" property="isValid" jdbcType="DECIMAL" />    <result column="CREATE_USER_ID" property="createUserId" jdbcType="DECIMAL" />    <result column="CREATE_TIME" property="createTime" jdbcType="TIMESTAMP" />    <result column="LAST_UPDATE_USER_ID" property="lastUpdateUserId" jdbcType="DECIMAL" />    <result column="LAST_UPDATE_TIME" property="lastUpdateTime" jdbcType="TIMESTAMP" />  </resultMap>  <select id="abatorgenerated_selectByPrimaryKey" resultMap="Module" parameterClass="com.aigou.power.domain.Module" >    <!--      WARNING - This element is automatically generated by Abator for iBATIS, do not modify.      This element was generated on Sat Dec 03 14:01:11 CST 2011.    -->    select CODE, NAME, LINKURL, PARENTCODE, DESCRIPTION, IS_VALID, CREATE_USER_ID, CREATE_TIME,      LAST_UPDATE_USER_ID, LAST_UPDATE_TIME    from P_MODULE    where CODE = #code:VARCHAR#  </select>  <insert id="abatorgenerated_insert" parameterClass="com.aigou.power.domain.Module" >    <!--      WARNING - This element is automatically generated by Abator for iBATIS, do not modify.      This element was generated on Sat Dec 03 14:01:11 CST 2011.    -->    insert into P_MODULE (CODE, NAME, LINKURL, PARENTCODE, DESCRIPTION, IS_VALID, CREATE_USER_ID,      CREATE_TIME, LAST_UPDATE_USER_ID, LAST_UPDATE_TIME)    values (#code:VARCHAR#, #name:VARCHAR#, #linkurl:VARCHAR#, #parentcode:VARCHAR#,      #description:VARCHAR#, #isValid:DECIMAL#, #createUserId:DECIMAL#, #createTime:TIMESTAMP#,      #lastUpdateUserId:DECIMAL#, #lastUpdateTime:TIMESTAMP#)  </insert>  <update id="abatorgenerated_updateByPrimaryKey" parameterClass="com.aigou.power.domain.Module" >    <!--      WARNING - This element is automatically generated by Abator for iBATIS, do not modify.      This element was generated on Sat Dec 03 14:01:11 CST 2011.    -->    update P_MODULE    set NAME = #name:VARCHAR#,      LINKURL = #linkurl:VARCHAR#,      PARENTCODE = #parentcode:VARCHAR#,      DESCRIPTION = #description:VARCHAR#,      IS_VALID = #isValid:DECIMAL#,      CREATE_USER_ID = #createUserId:DECIMAL#,      CREATE_TIME = #createTime:TIMESTAMP#,      LAST_UPDATE_USER_ID = #lastUpdateUserId:DECIMAL#,      LAST_UPDATE_TIME = #lastUpdateTime:TIMESTAMP#    where CODE = #code:VARCHAR#  </update>  <update id="abatorgenerated_updateByPrimaryKeySelective" parameterClass="com.aigou.power.domain.Module" >    <!--      WARNING - This element is automatically generated by Abator for iBATIS, do not modify.      This element was generated on Sat Dec 03 14:01:11 CST 2011.    -->    update P_MODULE    <dynamic prepend="set" >      <isNotNull prepend="," property="name" >        NAME = #name:VARCHAR#      </isNotNull>      <isNotNull prepend="," property="linkurl" >        LINKURL = #linkurl:VARCHAR#      </isNotNull>      <isNotNull prepend="," property="parentcode" >        PARENTCODE = #parentcode:VARCHAR#      </isNotNull>      <isNotNull prepend="," property="description" >        DESCRIPTION = #description:VARCHAR#      </isNotNull>      <isNotNull prepend="," property="isValid" >        IS_VALID = #isValid:DECIMAL#      </isNotNull>      <isNotNull prepend="," property="createUserId" >        CREATE_USER_ID = #createUserId:DECIMAL#      </isNotNull>      <isNotNull prepend="," property="createTime" >        CREATE_TIME = #createTime:TIMESTAMP#      </isNotNull>      <isNotNull prepend="," property="lastUpdateUserId" >        LAST_UPDATE_USER_ID = #lastUpdateUserId:DECIMAL#      </isNotNull>      <isNotNull prepend="," property="lastUpdateTime" >        LAST_UPDATE_TIME = #lastUpdateTime:TIMESTAMP#      </isNotNull>    </dynamic>    where CODE = #code#  </update>    <select id="getMenu" resultMap="Module" parameterClass="map" >        select CODE, NAME, LINKURL, PARENTCODE, DESCRIPTION, IS_VALID, CREATE_USER_ID, CREATE_TIME,      LAST_UPDATE_USER_ID, LAST_UPDATE_TIME    from P_MODULE    where  PARENTCODE =#node#   </select></sqlMap>

在该数据库中可以看到,最后是一个select操作,其id为getMenu,相关联的Map为Module,并且其namespace为P_MODULE,因此我们可以通过
sqlMapClient.queryForList("P_MODULE.getMenu", m)

来查询数据库,并且其值保存在m中。具体代码如下:

public class ModuleDAOImpl implements ModuleDAO {    /**     * This field was generated by Abator for iBATIS.     * This field corresponds to the database table P_MODULE     *     * @abatorgenerated Sat Dec 03 14:01:11 CST 2011     */    private SqlMapClient sqlMapClient;       public SqlMapClient getSqlMapClient() {return sqlMapClient;}public void setSqlMapClient(SqlMapClient sqlMapClient) {this.sqlMapClient = sqlMapClient;}/**     * This method was generated by Abator for iBATIS.     * This method corresponds to the database table P_MODULE     *     * @abatorgenerated Sat Dec 03 14:01:11 CST 2011     */    public void insert(Module record) throws SQLException {        sqlMapClient.insert("P_MODULE.abatorgenerated_insert", record);    }    /**     * This method was generated by Abator for iBATIS.     * This method corresponds to the database table P_MODULE     *     * @abatorgenerated Sat Dec 03 14:01:11 CST 2011     */    public int updateByPrimaryKey(Module record) throws SQLException {        int rows = sqlMapClient.update("P_MODULE.abatorgenerated_updateByPrimaryKey", record);        return rows;    }    /**     * This method was generated by Abator for iBATIS.     * This method corresponds to the database table P_MODULE     *     * @abatorgenerated Sat Dec 03 14:01:11 CST 2011     */    public int updateByPrimaryKeySelective(Module record) throws SQLException {        int rows = sqlMapClient.update("P_MODULE.abatorgenerated_updateByPrimaryKeySelective", record);        return rows;    }    /**     * This method was generated by Abator for iBATIS.     * This method corresponds to the database table P_MODULE     *     * @abatorgenerated Sat Dec 03 14:01:11 CST 2011     */    public Module selectByPrimaryKey(String code) throws SQLException {        Module key = new Module();        key.setCode(code);        Module record = (Module) sqlMapClient.queryForObject("P_MODULE.abatorgenerated_selectByPrimaryKey", key);        return record;    }public List<Module> getMenu(String userId,String node) throws SQLException {Map<String, Object> m = new HashMap<String, Object>();  m.put("userId", userId);m.put("node", node);List<Module> lm = sqlMapClient.queryForList("P_MODULE.getMenu", m);return lm;}        }
ModuleDAOImpl类实现了ModuleDAO类,其定义为

public interface ModuleDAO {    /**     * This method was generated by Abator for iBATIS.     * This method corresponds to the database table P_MODULE     *     * @abatorgenerated Sat Dec 03 14:01:11 CST 2011     */    void insert(Module record) throws SQLException;    /**     * This method was generated by Abator for iBATIS.     * This method corresponds to the database table P_MODULE     *     * @abatorgenerated Sat Dec 03 14:01:11 CST 2011     */    int updateByPrimaryKey(Module record) throws SQLException;    /**     * This method was generated by Abator for iBATIS.     * This method corresponds to the database table P_MODULE     *     * @abatorgenerated Sat Dec 03 14:01:11 CST 2011     */    int updateByPrimaryKeySelective(Module record) throws SQLException;    /**     * This method was generated by Abator for iBATIS.     * This method corresponds to the database table P_MODULE     *     * @abatorgenerated Sat Dec 03 14:01:11 CST 2011     */    Module selectByPrimaryKey(String code) throws SQLException;    List<Module> getMenu(String userId,String node) throws SQLException;}

在Service层定义MenuServiceImpl用来实现ImenuService,用来获取moduleDAO查询到的数据。

public class MenuServiceImpl implements IMenuService  {private ModuleDAO moduleDao=null;/* (non-Javadoc)    * @see com.aigou.power.service.IMenuService#getTopMenu(java.lang.String)    */public List<Module> getMenu(String userId,String node) throws Exception {// TODO Auto-generated method stubreturn moduleDao.getMenu(userId,node);}public ModuleDAO getModuleDao() {return moduleDao;}public void setModuleDao(ModuleDAO moduleDao) {this.moduleDao = moduleDao;}}

IMenuService其定义为:

public interface IMenuService {List<Module> getMenu(String userId,String node) throws Exception;}

我们需要将服务器获取到的数据组织成我们需要的格式,并且需要相应前台页面请求的Action调用,因此需要创建一个MenuAction类,并利用getTopMenu来组织服务器端获取的数据并返回给前台。

具体代码如下:

private IMenuService menuService=null;private List<Map<String, Object>> responseMenuJson;public String getTopMenu(){try{String pid= ServletActionContext.getRequest().getParameter("node");String userId= "";List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); List<Module> menus = menuService.getMenu(userId,pid);if (menus.size()>0){for(Module menu:menus){    Map<String, Object> m = new HashMap<String, Object>();  m.put("id", menu.getCode() );m.put("text", menu.getName());  m.put("leaf", !pid.equals("root"));m.put("url", menu.getLinkurl());m.put("pid", menu.getParentcode());list.add(m);}}this.setResponseMenuJson(list);  System.out.println(list);}catch(Exception e){e.printStackTrace();}return SUCCESS;}

创建一个ImenuService类型的变量menuService来用查询数据库的数据并返回给menus,list保存组织好的数据,并最终返回给responseMenuJson.

还需要struts配置文件struts.xml来进行关联,将url "menu" ,类 "menAction", 以及相应的方法"getTopMenu"进行关联,并将存储的处理后数据的responseMenuJson关联到result上。

这样利用/menu就可以直接获得处理好的数据库查询信息。

     <action name="menu" class="menuAction" method="getTopMenu">          <result type="json">                  <param name="root">responseMenuJson</param>          </result>        </action>


另外需要在applicationContext.xml中,添加如下代码进行Spring的配置

    <bean id="moduleDao"        class="com.aigou.power.dao.impl.ModuleDAOImpl">           <property name="sqlMapClient" ref="client" />       </bean>           <bean id="menuService"          class="com.aigou.power.service.impl.MenuServiceImpl">           <property name="moduleDao" ref="moduleDao"></property>       </bean>           <bean id="menuAction" class="com.aigou.power.action.MenuAction">         <property name="menuService" ref="menuService"></property>      </bean> 



原创粉丝点击