基于J2EE的SSH 整合应用及操作示例二(CRUD操作

系统 1768 0
基于J2EE的SSH
整合应用及操作示例二(CRUD操作及配置)
2009-10-08 09:25:22
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。 http://gaochaojs.blog.51cto.com/812546/210131
CRUD
是指在做计算处理时的增加 (Create) 、查询 (Retrieve) (重新得到数据)、更新 (Update) 和删除 (Delete) 几个单词的首字母简写。主要被用在描述软件系统中数据库或者持久层的基本操作功能。
In computing, CRUD is an acronym for create, retrieve, update, and delete. It is used to refer to the basic functions of a database or persistence layer in a software system.
C reate new records
R etrieve existing records
U pdate existing records
D elete existing records.
在响应新增部门请求中,通过导入 Struts 的配置文件 (struts-config.xml) 来完成业务流程的部署。它把 depAdd.jsp depAdd.do 连接起来。 depAdd.jsp 上产生客户请求, depAdd.do 则对请求产生响应、处理 jsp 页面上的数据。当点击 depAdd.jsp 上的保存按钮
( <div style= "float: right; padding: 10px 25px 0 0;" > <div class = "right_button" > <a href= "#" onclick= "check();return false;" ><bean:message key= "go.add" /> </a> </div>
</div>)
先检查页面数据的正确性,校验通过后将输入数据用 Set 方法存入到 userinfoForm 这个 FormBean 中。
function check() { var userName = document.userinfoForm.userName.value; var password = document.userinfoForm.password.value; var length = document.userinfoForm.password.value.length; var repassword = document.userinfoForm.repassword.value; var tel = document.userinfoForm.tel.value; var department = document.userinfoForm.department.value; if (userName=="") { alert('部门管理员姓名不能为空!') return false ; }

if (password=="") { alert('密码不能为空!') return false ; } if (length<6||length>10) { alert('密码必须大于6个字符小于10个字符!') return false ; } if (repassword=="") { alert('重复密码不能为空!') return false ; } if (password!=repassword) { alert('密码输入不一致!') return false ; } if (tel!="") { No = "0123456789()+-" for (i=0; i<tel.length; i++) { var Checkstr = tel.charAt(i); if (No.indexOf(Checkstr)== -1) { alert( "联系电话格式不正确!" ); return false ; } } } if (department=="") { alert('部门管理员所属部门不能为空!') return false ; }

else { document.userinfoForm.submit(); }

}
然后根据 struts-config.xml 调用 depAdd.do ( 这将在 Spring 配置文件中指定相应的 Action) 进行业务处理。在 depAdd.do 中页面数据将从 userinfoForm 中读取。 depAdd.do 执行成功后将显示 /ok.jsp 页面。 depAdd.do 对应的 Action (DepAddAction) Spring 的配置文件 (applicationContext.xml) 中指定。要把 depAdd.do DepAddAction 对应起来 , 首先要在 struts-config.xml 中配置 Delegating RequestProcessor 。其次,需要在 application Context.xml 中定义名字为“ /depAdd ”的受管 JavaBean 。每次对 DepAddAction 请求时, Delegating Request Processor 将充当代理。同时, DepAddAction 使用到受管 Java Beansm Service 。要使用 UserinfoService ,需要在 DepAddAction 中生成 UserinfoService get() set() 方法,并且 application Context.xml 中对“ /depAdd ”进行 Dep Add Action 的依赖注入。因为 DepAddAction 并没有直接去操作数据访问 Userinfo DAO 。而是通过调用业务逻辑层 UserinfoService 中的方法来实现业务逻辑的。 DepAddAction 中部分代码如下:
String userName = userinfoForm.getUserName(); String pwd = userinfoForm.getPassword(); String rePwd = userinfoForm.getRepassword(); String tel = userinfoForm.getTel(); String dep = userinfoForm.getDepartment();

// 生成userinfo对象 Userinfo userinfo = new Userinfo();

// 将从表单中获得的值赋给该对象 userinfo.setUserName(userName); userinfo.setPassword(pwd); userinfo.setTel(tel); userinfo.setDepartment(dep); userinfo.setUserType( "dep" ); // 所有新增用户类型一律为dep // 数据入库
userinfoService.save(userinfo);
如果 depAdd.do 要对应另一个 Action ,则只要修改 applicationContext.xml 即可,这将有利于系统的更新。同样,如果另一个 .do 要对应 DepAddAction ,也只要在 applicationContext.xml 中配置即可,这将有利于代码的重用。在本系统中, Hibernate Spring 共用一个配置文件 applicationContext.xml Hibernate applicationContext.xml 中读取和数据库有关的信息。数据库信息包括数据库连接、与数据库结构相对应的映射文件。在新增部门请求中,涉及到的数据库表为 userinfo 表,它所对应的映射文件为 Userinfo.hbm.xml 。为了访问数据库表 userinfo ,只有 Userinfo.hbm.xml 映射文件是不够的,还需要数据访问类 UserinfoDAO 、数据类 AbstractUserinfo,Userinfo 。数据类 Userinfo 的实现较为简单,它只是 Java 对象与数据库表之间的对应,主要用于在各应用层间传递数据,在它的基础上要实现的就是数据访问类 UserinfoDAO 。系统在生成 UserinfoDAO 的同时,也将 UserinfoDAO 作为 JavaBean 配置到 applicationContext.xml 中。 UserinfoDAO 中是对 userinfo 表进行保存、查询、删除或修改等基本数据操作,在 applicationContext.xml 中需要 userinfoService 进行 UserinfoDAO 及其代理的依赖注入。这样做,使得当 UserinfoDAO 变化时,只需修改 applicationContext.xml userinfoService 实现新的注入,指向新的实现就可以了,由此解除了数据访问层和业务层的紧密耦合。数据访问类 UserinfoDAO 继承于辅助类 Hibernate-DaoSupport ,借助于 getHibernateTemplate() 获得对 Hibernate 资源的操作,极大的方便了 Hibernate 框架的使用。在 UserinfoDAO 中定义了对数据库表 userinfo 的操作函数。如下面代码,即是 UserinfoService 中调用的 saveData 方法。
public class UserinfoDAO extends HibernateDaoSupport implements IUserinfoDAO { private static final Log log = LogFactory.getLog(UserinfoDAO. class );

protected void initDao() { // do nothing }

public void save(Userinfo transientInstance) { log.debug( "saving Userinfo instance" ); try { getHibernateTemplate().save(transientInstance); log.debug( "save successful" ); } catch (RuntimeException re) { log.error( "save failed" , re); throw re; }
}
部门添加模块中 applicationContext.xml 中的代码如下:
< ! -- 创建事务管理类 -- > <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> < property name ="sessionFactory" > < ref local ="sessionFactory" /> </ property > </ bean >

< ! -- 创建用户事务代理类 -- > <bean id="userinfoDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> < property name ="transactionManager" > < ref bean ="transactionManager" /> </ property > < property name ="target" > < ref local ="UserinfoDAO" /> </ property > < property name ="transactionAttributes" > < props > < prop key ="save*" > PROPAGATION_REQUIRED </ prop > < prop key ="modify*" > PROPAGATION_REQUIRED </ prop > < prop key ="delete*" > PROPAGATION_REQUIRED </ prop > < prop key ="get" > PROPAGATION_REQUIRED,readOnly </ prop > < prop key ="*" > PROPAGATION_REQUIRED,readOnly </ prop > </ props > </ property > </ bean >


< ! --进行UserinfoDAO及其代理的依赖注入-- > < bean id ="UserinfoService" class ="com.dpt.ec.service.impl.UserinfoService" > < property name ="userinfoDAO" > < ref bean ="userinfoDAOProxy" /> </ property > </ bean >


< ! --调度管理#新增部门管理员 -- > <bean name="/depAdd" class="com.dpt.ec.web.action.admin.DepAddAction" singleton="false"> < property name ="userinfoService" > < ref bean ="UserinfoService" /> </ property > </ bean > 部门添加模块中struts-config.xml中的代码如下: < form-beans >


< form-bean name ="userinfoForm" type ="com.dpt.ec.web.form.UserinfoForm" /> </ form-beans >

< ! -- 调度管理#新增加部门管理员-- > <action path="/depAdd" name="userinfoForm" type="org.springframework.web.struts.DelegatingActionProxy" scope="request" validate="false"> < forward name ="success" path ="/ok.jsp" /> < forward name ="warning" path ="error.pub" /> < forward name ="failure" path ="error.sys" /> </ action >

在本项目的开发过程中运用这样的技术方法大大提高了开发效率、增加了程序的可读性、减少了模块间的耦合性,这样使得系统更加容易更新和维护。

基于J2EE的SSH 整合应用及操作示例二(CRUD操作及配置)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论