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>
- Struts2+Spring+iBATIS+ExtJS4学习笔记
- struts2+spring+ibatis配置 学习笔记
- struts2,spring,ibatis初探
- struts2,spring,ibatis,hibernate
- struts2 + spring + ibatis
- struts2+spring+iBatis集成
- spring+struts2+ibatis配置
- Struts2+Ibatis+Spring整合
- struts2+spring+ibatis
- struts2+ibatis+spring
- 搭建struts2+Spring+Ibatis
- Struts2+ibatis+Spring分页
- Struts2+Spring+Ibatis
- ibatis学习笔记(五)>>>>>>>ibatis和Spring整合实例
- struts2与spring学习笔记
- Extjs4学习笔记<一>
- extjs4学习笔记
- extjs4学习笔记
- 无状态的HTTP连接提供有状态的连接
- Extjs初始化/提交Ext.form.FormPanel,表单中包含textfield,textarea,radio,checkbox,combo等
- 用Google增强现实云眼镜玩愤怒的小鸟
- 用 Google Gears 增强您的 Web 应用程序
- javascript常用判断
- Struts2+Spring+iBATIS+ExtJS4学习笔记
- 推荐给大家的单词书!
- Flash Builder 4注册机下载地址
- Linux epoll模型
- Jquery之简单操作
- QT:内存释放
- flex框架pureMVC的使用
- KissXml API
- IMPORTANT: 2 config files in '/etc' need updating