配色: 字号:
SSH(Struts2+Spring+Hibernate)框架搭建流程
2017-01-10 | 阅:  转:  |  分享 
  
SSH(Struts2+Spring+Hibernate)框架搭建流程



一、Hibernate(数据层)的搭建:



相关描述



Ⅰ.服务器与数据库之间的交互



Ⅱ.Hibernate封装了一系列的JDBC代码,提供相应的方法我们使用,使我们的开发变得简单快捷,效率大大提高





二、Struts2(MVC)的搭建:





Ⅰ.本质上相当于一个Servlet



Ⅱ.不需要手动获取传递参数(只需要定义声明属性名和设置get、set的方法)、也不需要手动跳转(只需要struts.xml配置相关的路径)



Ⅲ.对项目的分包(例如:dao、service、entity等等),实现MVC模式的开发



Ⅳ.MVC:Action属于Model,而JSP是View页面的展示,其中过滤器起到了Controller的作用



这里注意一点问题:



Struts2与Hibernate在一起搭建,antlr包,有冲突。MyEclipse9中有这样问题。朋友的MyEclipse10中没有这个问题。





三、Spring(注入实例)的使用:





Ⅰ.每一层的代码之间的耦合改为模块(分离/解耦),代码之间互不影响



Ⅱ.不再关注具体的实现类的实例



Ⅲ.更换不同的技术(模块),不需要改动代码,只需要修改applicationContext.xml的相关配置信息



Ⅳ.主要功能IOC(控制反转)松耦合、AOP(面向切面)内聚性





编辑web.xml文件:



复制代码




xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">









index.jsp









contextConfigLocation



classpath:applicationContext.xml









org.springframework.web.context.ContextLoaderListener









struts2



org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter






struts2

/





复制代码





DBBrowser中反转实体类:



















数据访问层dao接口



复制代码

packagecom.dao;



importcom.entity.Users;



/

用户接口

@authorasus



/

publicinterfaceUsersDao{



/登陆验证/

UsersloginCheck(Usersuser);

}

复制代码





数据访问层dao.impl实现类



1)继承HibernateDaoSupport类实现增删改查



复制代码

packagecom.dao.impl;



importjava.util.List;



importorg.springframework.orm.hibernate3.HibernateTemplate;

importorg.springframework.orm.hibernate3.support.HibernateDaoSupport;



importcom.dao.UsersDao;

importcom.entity.Users;

/

用户接口实现类

@authorasus

HibernateTemplate、HibernateDaoSupport两种方法实现增删改查

一种方法:

Dao实现类继承HibernateDaoSupport类,该类是抽象类,

该类中有一个HibernateTemplate的属性,通过this.getHibernateTemplate()可获得一个HibernateTemplate类的模板对象。

/

publicclassUsersDaoImplextendsHibernateDaoSupportimplementsUsersDao{



@Override

publicUsersloginCheck(Usersuser){

//得到此类提供的模板实现增删改查

HibernateTemplateht=this.getHibernateTemplate();



//得到一个集合

Listlist=ht.find("fromUserswherename=?andpassword=?",user.getName(),user.getPassword());



//使用三元运算符,防止list.get(0)时报空指针。

return(Users)(list.size()>0?list.get(0):null);

}



}

复制代码

2)定义HibernateTemplate模板对象属性

复制代码

packagecom.dao.impl;



importjava.util.List;



importorg.springframework.orm.hibernate3.HibernateTemplate;

importorg.springframework.orm.hibernate3.support.HibernateDaoSupport;



importcom.dao.UsersDao;

importcom.entity.Users;

/

用户接口实现类

@authorasus

HibernateTemplate、HibernateDaoSupport两种方法实现增删改查

第二种方法:

在dao类中定义一个HibernateTemplate类的对象,用该对象调用HibernateTemplate模板封装好的方法,如下:

/

publicclassUsersDaoImplimplementsUsersDao{



//定义一个模板对象

HibernateTemplatehibernateTemplate;



@Override

publicUsersloginCheck(Usersuser){



//得到一个集合

Listlist=hibernateTemplate.find("fromUserswherename=?andpassword=?",user.getName(),user.getPassword());



//使用三元运算符,防止list.get(0)时报空指针。

return(Users)(list.size()>0?list.get(0):null);

}



//生成Get''Set方法

publicHibernateTemplategetHibernateTemplate(){

returnhibernateTemplate;

}



publicvoidsetHibernateTemplate(HibernateTemplatehibernateTemplate){

this.hibernateTemplate=hibernateTemplate;

}

}

复制代码

业务逻辑层接口service



复制代码

packagecom.service;



importcom.entity.Users;



/

用户业务逻辑层

@authorasus



/

publicinterfaceUsersService{



/登陆验证/

UsersloginCheck(Usersuser);

}

复制代码

业务逻辑层接口实现类service.impl



复制代码

packagecom.service.impl;



importcom.dao.UsersDao;

importcom.entity.Users;

importcom.service.UsersService;

/

用户业务逻辑层实现类

@authorasus



/

publicclassUsersServiceImplimplementsUsersService{



//这里以前是new的,现在不需要了,交给Spring来实例

privateUsersDaoudd;

@Override

publicUsersloginCheck(Usersuser){



returnudd.loginCheck(user);

}

//生成Get''Set

publicUsersDaogetUdd(){

returnudd;

}

publicvoidsetUdd(UsersDaoudd){

this.udd=udd;

}



}

复制代码

控制器类Action



复制代码

packagecom.action;



importcom.entity.Users;

importcom.opensymphony.xwork2.ActionSupport;

importcom.service.UsersService;

/

用户控制器类

@authorasus



/

publicclassUsersActionextendsActionSupport{



//接收页面的值

privateUsersuser;

//一样交给Spring实例

privateUsersServiceuss;

publicStringexecute(){



returnSUCCESS;

}

/判断用户输入的账号密码/

publicStringlogin(){

if(user!=null){

UserscheckResult=uss.loginCheck(user);

if(checkResult!=null){

returnSUCCESS;

}

}



returnLOGIN;

}



//生成Get''Set

publicUsersgetUser(){

returnuser;

}



publicvoidsetUser(Usersuser){

this.user=user;

}



publicUsersServicegetUss(){

returnuss;

}



publicvoidsetUss(UsersServiceuss){

this.uss=uss;

}

}

复制代码

登陆页面



复制代码





用户名:

密码:







复制代码

成功页面





登录成功!



配置applicationContext.xml



复制代码




xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"

xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd">






class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">











































复制代码

配置Struts.xml



复制代码











/success.jsp

/login.jsp







复制代码

end:基本的登陆现在已经做好,现在我们开始做添加事务。



添加事务







数据访问层dao接口



复制代码

packagecom.dao;



importcom.entity.District;



/

区域接口

@authorasus



/

publicinterfaceDistrictDao{



/添加区域/

intaddReg(Districtdistrict);

}

复制代码

数据访问层dao.impl实现类



定义HibernateTemplate模板对象属性



复制代码

packagecom.dao.impl;



importorg.springframework.dao.DataAccessException;

importorg.springframework.orm.hibernate3.HibernateTemplate;



importcom.dao.DistrictDao;

importcom.entity.District;

/

区域接口实现类

@authorasus

HibernateTemplate、HibernateDaoSupport两种方法实现增删改查

第二种方法:

在dao类中定义一个HibernateTemplate类的对象,用该对象调用HibernateTemplate模板封装好的方法,如下:

/

publicclassDistrictDaoImplimplementsDistrictDao{



//定义一个模板对象

privateHibernateTemplatehibernateTemplate;



@Override

publicintaddReg(Districtdistrict){

try{

hibernateTemplate.save(district);

return1;

}catch(DataAccessExceptione){

e.printStackTrace();

}

return0;

}



//生成Get''Set方法

publicHibernateTemplategetHibernateTemplate(){

returnhibernateTemplate;

}

publicvoidsetHibernateTemplate(HibernateTemplatehibernateTemplate){

this.hibernateTemplate=hibernateTemplate;

}

}

复制代码





业务逻辑层接口service



复制代码

packagecom.service;



importcom.entity.District;



/

地区业务逻辑类接口

@authorasus



/

publicinterfaceDistrictService{



/

配置事务的话注意方法的命名规范以什么开头。

@paramdistrict

/

intaddReg(Districtdistrict);

}

复制代码





业务逻辑层接口实现类service.impl







复制代码

packagecom.service.impl;



importcom.dao.DistrictDao;

importcom.entity.District;

importcom.service.DistrictService;

/

区域业务逻辑层接口实现类



@authorasus



/

publicclassDistrictServiceImplimplementsDistrictService{



//声明接口由Spring来实例

privateDistrictDaoddd;



@Override

publicintaddReg(Districtdistrict){



returnddd.addReg(district);

}



//声明Get''Set方法

publicDistrictDaogetDdd(){

returnddd;

}

publicvoidsetDdd(DistrictDaoddd){

this.ddd=ddd;

}



}

复制代码





控制器类Action



复制代码

packagecom.action;



importcom.entity.District;

importcom.opensymphony.xwork2.ActionSupport;

importcom.service.DistrictService;

/

控制器类

作用:添加区域

@authorasus



/

publicclassDistrictActionextendsActionSupport{



//属性

privateDistrictdistrict;

privateDistrictServicedss;



//处理添加请求

publicStringadd(){



intaddReg=dss.addReg(district);



if(addReg>0){

returnSUCCESS;

}

return"index";

}



//生成Get''Set方法

publicDistrictServicegetDss(){

returndss;

}

publicvoidsetDss(DistrictServicedss){

this.dss=dss;

}

publicDistrictgetDistrict(){

returndistrict;

}

publicvoidsetDistrict(Districtdistrict){

this.district=district;

}



}

复制代码





添加页面



















成功页面





登录成功!







配置applicationContext.xml(这里还是比较重要的,其中夹杂前面Users的Bean)



复制代码






xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsd

http://www.springframework.org/schema/contexthttp://www.baiyuewang.net/schema/context/spring-context.xsd

http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd">








class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">












class="org.springframework.orm.hibernate3.HibernateTransactionManager">













































































































复制代码





优化SessionFacatory,使用Spring创建最原始的JDBC数据源



优化JDBC为C3P0数据源连接池







(注:代码确与上面有重复,我走的是步骤路线虽然代码重复太多,只为更容易理解)



配置applicationContext.xml







复制代码






xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.tt951.comorg/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsd

http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd

http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd">






















































class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">













org.hibernate.dialect.Oracle9Dialect



true

true









com/entity/District.hbm.xml

com/entity/House.hbm.xml

com/entity/Street.hbm.xml

com/entity/Type2.hbm.xml

com/entity/Users.hbm.xml












class="org.springframework.orm.hibernate3.HibernateTransactionManager">













































































































献花(0)
+1
(本文系thedust79首藏)