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">
|
|