length="50"not-null="true"/>
将实体类映射文件Userinfo.hbm.xml注册到hibernate全局配置文件中,参考代码:
编写action层。
编写业务控制类UserinfoAction,关键代码如下:
publicclassUserinfoAction{
Userinfouserinfo;
UserinfoServiceuserinfoService;
publicStringexecute(){
//增加
booleanret;
ApplicationContextact=newClassPathXmlApplicationContext("beans.xml");
//获得服务对象
userinfoService=(UserinfoService)act.getBean("userinfoService");
ret=userinfoService.addUserinfo(userinfo);
if(ret){
return"success";
}else{
return"error";
}
}
//以下省略成员变量的get/set方法
}
编写struts配置文件,增加一个action,参考代码:
/userinfo_succ.jsp
/userinfo.jsp
/userinfo_err.jsp
编写spring配置文件,配置action层到service层所需的实现类的bean,参考代码:
--配置从控制层到服务层的实现类-->
编写service层。
编写接口UserinfoService,关键代码:
publicinterfaceUserinfoService{
publicbooleanaddUserinfo(Userinfouserinfo);
}
编写接口UserinfoService的实现类UserinfoServiceImpl,关键代码:
publicclassUserinfoServiceImplimplementsUserinfoService{
UserinfoDaouserinfoDao;
publicbooleanaddUserinfo(Userinfouserinfo){
ApplicationContextact=newClassPathXmlApplicationContext("beans.xml");
//获得服务对象
userinfoDao=(UserinfoDao)act.getBean("userinfoDao");
returnuserinfoDao.addUserinfo(userinfo);
}
//以下省略get/set方法
}
编写spring配置文件,配置service层到dao层所需的实现类bean,参考代码:
--配置从服务层到数据处理层的实现类-->
编写dao层。
编写接口UserinfoDao,参考代码:
publicinterfaceUserinfoDao{
publicbooleanaddUserinfo(Userinfouserinfo);
}
编写接口实现类,参考代码:
publicclassUserinfoDaoImplimplementsUserinfoDao{
SessionFactorysessionFactory;
publicbooleanaddUserinfo(Userinfouserinfo){
SessionFactorysessionFactory=newAnnotationConfiguration().configure().buildSessionFactory();
try{
Sessionsession=sessionFactory.getCurrentSession();
session.persist(userinfo);
returntrue;
}catch(Exceptione){
e.printStackTrace();
returnfalse;
}
}
}
步骤1:
struts与spring框架整合
首先,在struts配置文件中加入以下语句(只需一次):
说明:
struts中的Action创建交给spring完成。
其次,修改struts配置文件中action的class属性配置,代码语法:
本例关键代码:
最后,对应修改spring配置文件,增加一个bean,代码语法:
本例关键代码:
步骤2:
改进spring框架单独使用中的冗余代码
在需要依赖注入的地方(action层调用service接口、service层调用dao层接口)存在类似如下代码:
ApplicationContextact=newClassPathXmlApplicationContext("beans.xml");
接口接口对象=(接口)act.getBean(“spring中bean的id");
现在改进:
在与struts框架整合后,现在可以删除。
删除代码的代价:
需要在spring中进行配置。
在配置action层实现类的bean中:
嵌入property子元素,语法为:
目的:
注入bean对象后,根据需要,给对象中的成员变量也注入对象,本例代码:
--配置从视图层到控制层的实现类-->
其中property元素的name属性值userinfoService是UserinfoAction类中需要注入的成员变量,同理可得:
在配置服务层的实现类的bean中增加property子元素来配置用到dao层接口的实现类的关键代码:
--配置从控制层到服务层的实现类-->
其中property节点的name属性值userinfoDao是UserinfoServiceImpl类中需要注入的成员变量。
步骤3:
Spring与hibernate框架整合。
首先,在spring中配置一个创建sessionFactory的bean,关键代码:
classpath:
hibernate.cfg.xml
配置目的:
在Spring中集成hibernate,通过spring加载hibernate配置并使用LocalSessionFactoryBean创建sessionFactory。
代码说明:
bean的id名字可以随便取,约定俗成为sessionFactory;classpath:
hibernate.cfg.xml是hibernate全局配置文件的地址;
本例是使用非注解方式生成sessionFactory,若是注解方式,则class属性中LocalSessionFactoryBean要改为AnnotationSessionFactoryBean,让UserinfoDaoImpl类继承HibernateDaoSupport类。
然后,改进使用hibernate连接访问数据库的代码。
全部去掉在数据访问层的UserinfoDaoImpl类中相关数据库操作代码如下:
SessionFactorysessionFactory=newConfiguration().configure().buildSessionFactory();
Sessionsession=sessionFactory.openSession();
session.beginTransaction();
session.persist(user);
session.getTransaction().commit();
session.clo