网上讲Spring的资料很多,大部分实例都是针对Spring的某一部分做出的例子,如IoC,Aop,MVC,数据持久层等等,没有一个完整的例子。
这两天根据夏昕的Spring开发指南,在加上自己参考其他资料,做出了一个利用Spring的MVC,加上Hibernate的网站的实例,包括Jsp界面表单的提交,Spring的 MVC控制,使用Spring提供的HibernateTemplate进行数据持久的完整例子.
下面把程序的详细代码贴出来,由于自己也是初学,有不对的地方,还请过路的大侠指点一二。
一、需求:表单填写用户ID,用户名和地址,写入数据库
二、具体实现。。。。 代码见详细内容
网上讲Spring的资料很多,大部分实例都是针对Spring的某一部分做出的例子,如Ioc,Aop,MVC,数据持久层等等,没有一个完整的例子。
这两天根据夏昕的Spring开发指南,在加上自己参考其他资料,做出了一个利用Spring的MVC,加上Hibernate的网站的实例,包括Jsp界面表单的提交,Spring的 MVC控制,使用Spring提供的HibernateTemplate进行数据持久的完整例子.
下面把程序的详细代码贴出来,自己也是初学,有不对的地方,还请过路的大侠指点一二。
一、需求:表单填写用户ID,用户名和地址,写入数据库
二、具体实现
1.UserInfoAdd.jsp
填写表单界面,输入ID,Name,Address后提交到UserInfoAddAction.do
2.UserInfoVO
表单的映射。 Value Object类,用来获取表单提交的数据
package com.kacakong.spring.vo;
public class UserInfoVO { public String nid; public String name; public String address; public String getAddress() { return address; }
public void setAddress(String address) { this.address = address; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getNid() { return nid; }
public void setNid(String nid) { this.nid = nid; }
}
|
3.UserInfoAddAction
Control类,根据Spring的配置文件,调用合适的接口,执行业务操作,控制页面转向。如果添加数据成功,就重定向到成功页面,如果失败,就装到操作失败页面。具体调用的操作类,是根据Spring的配置文件来找的。使用的是接口操作,而不是实现类的操作。
package com.kacakong.spring.action;
import org.springframework.validation.BindException; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.SimpleFormController;
import com.kacakong.hibernate.dao.UserInfoDAO; import com.kacakong.hibernate.pojos.UserInfo; import com.kacakong.spring.vo.UserInfoVO;
public class UserInfoAddAction extends SimpleFormController { private String fail_view;
private String success_view; protected ModelAndView onSubmit(Object cmd, BindException ex) throws Exception { UserInfoVO vo = (UserInfoVO) cmd; UserInfo userinfo=new UserInfo(); userinfo.setNid(Integer.valueOf(vo.getNid())); userinfo.setName(vo.getName()); userinfo.setAddress(vo.getAddress()); if (this.doAdd(userinfo)==1){ return new ModelAndView(this.getSuccess_view()); }else{ return new ModelAndView(this.getFail_view()); } }
private int doAdd(UserInfo userinfo) { WebApplicationContext ctx=this.getWebApplicationContext(); UserInfoDAO dao=(UserInfoDAO)ctx.getBean("UserInfoDAO"); try{ dao.save(userinfo); return 1; }catch(Exception e){ e.printStackTrace(); return 0; } } public String getFail_view() { return fail_view; }
public String getSuccess_view() { return success_view; }
public void setFail_view(String string) { fail_view = string; }
public void setSuccess_view(String string) { success_view = string; }
} |
4.UserInfo
PO类,数据model层的反映,与数据库建立O/R mapping的映射
package com.kacakong.hibernate.pojos;
public class UserInfo { public Integer nid; public String name; public String address; public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getName() { return name; } public void setName(String name) { this.name = name; }
public Integer getNid() { return nid; }
public void setNid(Integer nid) { this.nid = nid; }
|
5.UserInfo.hbm.xml
PO的hibernate O/R mapping定义文件,这里的ID我设置成了assigned程序获取
"-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
dynamic-update="false" dynamic-insert="false" select-before-update="false" optimistic-lock="version" > insert="true" access="property" column="name" length="50" not-null="true" /> insert="true" access="property" column="address" length="50" not-null="true" />
|
6.UserInfoDAO
接口类,只定义了实现方法名称
package com.kacakong.hibernate.dao;
import com.kacakong.hibernate.pojos.UserInfo;
public interface UserInfoDAO { public abstract UserInfo get(Integer integer); public abstract void save(UserInfo userinfo); }
|
7.UserInfoDAOImp
UserInfoDAO接口的实现,继承了HibernateDaoSupport
package com.kacakong.hibernate.dao;
import org.springframework.orm.hibernate.support.HibernateDaoSupport;
import com.kacakong.hibernate.pojos.UserInfo;
public class UserInfoDAOImp extends HibernateDaoSupport implements UserInfoDAO {
public UserInfo get(Integer id) { UserInfo userinfo=(UserInfo)this.getHibernateTemplate().get(UserInfo.class,id); return userinfo; }
public void save(UserInfo userinfo) { this.getHibernateTemplate().save(userinfo); }
}
|
8.Web.xml的配置
http://java.sun.com/dtd/web-app_2_3.dtd">
Dispatcher org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/Config.xml /WEB-INF/Hibernate-Context.xml Dispatcher *.do index.jsp
404 /error.jsp
|
9.Config.xml的定义
"http://www.springframework.org/dtd/spring-beans.dtd">
class="org.springframework.web.servlet.view.InternalResourceViewResolver"> org.springframework.web.servlet.view.JstlView .jsp class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> UserInfoAddAction class="com.kacakong.spring.action.UserInfoAddAction"> com.kacakong.spring.vo.UserInfoVO fail UserInfo
|
10.Hibernate-Context.xml的定义
"http://www.springframework.org/dtd/spring-beans.dtd">
oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:@192.168.100.8:1521:EASTPLUS spring spring
com/kacakong/hibernate/pojos/UserInfo.hbm.xml
net.sf.hibernate.dialect.SQLServerDialect true PROPAGATION_REQUIRED PROPAGATION_REQUIRED,readOnly
|