SSH整合, spring 与spring jpa hibernatee出的一些问题

SSH怎么整合?Struts+Hibernate+Spring那些版本兼容?
[问题点数:40分,结帖人shuaishuai180]
本版专家分:207
结帖率 96.43%
CSDN今日推荐
本版专家分:305
本版专家分:18
本版专家分:7774
本版专家分:5957
本版专家分:86741
2013年 总版技术专家分年内排行榜第六
2013年3月 总版技术专家分月排行榜第二
2014年2月 Java大版内专家分月排行榜第一2013年8月 Java大版内专家分月排行榜第一2013年5月 Java大版内专家分月排行榜第一2013年4月 Java大版内专家分月排行榜第一2013年3月 Java大版内专家分月排行榜第一2013年2月 Java大版内专家分月排行榜第一
2016年9月 Java大版内专家分月排行榜第二2013年9月 Java大版内专家分月排行榜第二2013年7月 Java大版内专家分月排行榜第二2013年6月 Java大版内专家分月排行榜第二2012年12月 Java大版内专家分月排行榜第二2012年10月 Java大版内专家分月排行榜第二
本版专家分:4337
匿名用户不能发表回复!|
CSDN今日推荐天之道,损有余而补不足,是故虚胜实,不足胜有余。欢迎各位关注我的博客,有问题可以加QQ群交流哦~...
SSH框架整合过程(Struts2+Spring+Hibernate)
(尊重劳动成果,转载请注明出处: 冷血之心的博客) 在学习java框架的过程中,我总结过如下文章: 在将三大框架都学习一遍之后,再来看看如何整合SSH框架。先来看看SSH框架如何配合使用,如图所示:
整合步骤:1、导入所需jar包。 下载地址:
2、搭建struts2环境(1)创建action,创建struts.xml配置文件,配置action(2)配置struts2的过滤器 3、搭建hibernate环境(1)创建实体类(2)配置实体类和数据库表映射关系(3)创建hibernate核心配置文件
- 引入映射配置文件 4、搭建spring环境(1)创建spring核心配置文件(2)让spring配置文件在服务器启动时候加载- 配置监听器 - 指定spring配置文件位置
5、struts2和spring整合(1)把action在spring配置(action多实例的) (2)在struts.xml中action标签class属性里面写 bean的id值 6、spring和hibernate整合(1)把hibernate核心配置文件中数据库配置,在spring里面配置(2)把hibernate的sessionFactory在spring配置
7、在dao里面使用hibernateTemplate(1)在dao注入hibernateTemplate对象(2)在hibernateTemplate对象中注入sessionFactory 8、配置事务 好了,如此就完成了SSH框架的整合。
如果对你有帮助,记得点赞哦~欢迎大家关注我的博客,可以进群一起交流学习哦~
扫码向博主提问
非学,无以致疑;非问,无以广识
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!搭建SSH框架(SpringMVC4+Spring4+Hibernate5)
搭建SSH框架(SpringMVC4+Spring4+Hibernate5)。现在比较流行SSM(SpringMVC,Spring,MyBatis),但是持久层这一块大公司用Hibernate用的比较多,小项目用MyBatis用的比较多,因为较Hibernate而言,MyBatis要显得更为灵活,也正是因此,它的封装性不如hibernate好,所以对于追求稳定的大型项目而言,用hibernate还是比较合适。关于Hibernate和MyBatis的比较,读者可以查阅更多相关的资料。在这使用Hibernate框架。
整体思路:
1.首先搭建SpringMVC框架
2.搭建Hibernate框架
3.使用Spring整合SpringMVC,Hibernate
搭建SpringMVC框架:
1.导入jar文件
如上图所示,这是我从官网下载的spring framework解压缩后,libs中所包含的所有jar包,我们只需要将spring-*-4.2.5.RELEASE.jar复制,然后粘贴至工程项目中的lib目录下。就是将所有以RELEASE.jar结尾的,而不用将以javadoc.jar和sources.jar结尾的jar包放至lib目录下。
2.配置web.xml
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
/WEB-INF/spring-servlet.xml
通过以上配置,所有从前端发送过来的请求,都将交给DispatherServlet处理。关于SpringMVC中一次完整的请求过程请看下边:
具体执行步骤如下:
1、 首先用户发送请求&&&&&前端控制器,前端控制器根据请求信息(如URL)来决定选择哪一个页面控制器进行处理并把请求委托给它,即以前的控制器的控制逻辑部分;图2-1中的1、2步骤;
2、 页面控制器接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,这个对象在Spring Web MVC中叫命令对象,并进行验证,然后将命令对象委托给业务对象进行处理;处理完毕后返回一个ModelAndView(模型数据和逻辑视图名);图2-1中的3、4、5步骤;
3、 前端控制器收回控制权,然后根据返回的逻辑视图名,选择相应的视图进行渲染,并把模型数据传入以便视图渲染;图2-1中的步骤6、7;
4、 前端控制器再次收回控制权,将响应返回给用户,图2-1中的步骤8;至此整个结束。
springm核心框架图:
核心架构的具体流程步骤如下:
1、 首先用户发送请求&&&DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;
2、 DispatcherServlet&&&HandlerMapping, HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象,通过这种策略模式,很容易添加新的映射策略;
3、 DispatcherServlet&&&HandlerAdapter,HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;
4、 HandlerAdapter&&&处理器功能处理方法的调用,HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView对象(包含模型数据、逻辑视图名);
5、 ModelAndView的逻辑视图名&&& ViewResolver, ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;
6、 View&&&渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术;
7、返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。
现在对SpringMVC是不是有了一个大致的了解呢?
配置好了web.xml(整个web应用的配置文件)之后,接下来我们需要配置spring-servlet.xml(这是springmvc的配置文件,文件名默认为servletName-servlet.xml,这里我们的servlet名字是spring,当然你也可以自定义名字,然后再web.xml中指定,这在上面的配置中也有体现。)
下面是spring-servlet的具体配置:
/WEB-INF/views/
好了,现在对web应用的配置,springmvc的配置已经完成了,万事俱备,只欠东风,我们具体的执行动作呢?
@Controller
public class TestController {
@RequestMapping(value=&/test&)
public ModelAndView testMVC(){
System.out.println(&testMVC()&);
ModelAndView modelAndView = new ModelAndView(&/test&);
modelAndView.addObject(&info&, &hewei&);
return modelAndV
@Controller 将该类标识为一个Controller
@RequestMapping 表示匹配请求动作,这里将匹配 test 这个请求动作(使用value配置)
ModelAndView modelAndView = new ModelAndView(&/test&); 表示返回test.jsp,并且是/WEB-INF/views下的jsp文件(前面讲过的)
我们来看看超级简单的test.jsp
&%@ page language=&java& contentType=&text/ charset=UTF-8&
pageEncoding=&UTF-8&%&
Hello ${info} !!!
现在我们来做一个测试:
访问地址:http://localhost:8080/nanny/test,在中得到如下显示
至此,我们的SpringMVC框架已经搭建完成,向前走了一小步。下面我们更进一步,来看看Hibernate框架的搭建
搭建Hibernate框架:
第一步,导入jar包(将下载的Hibernate Framework中required的jar包复制粘贴到lib文件目录中)
第二 步,建立POJO对象
package com.bjtu.
import javax.persistence.C
import javax.persistence.E
import javax.persistence.GeneratedV
import javax.persistence.GenerationT
import javax.persistence.Id;
import javax.persistence.T
@Table(name=&nannyuser&)
public class NannyUser {
@GeneratedValue(strategy = GenerationType.IDENTITY)
public NannyUser(){
public int getId() {
public void setId(int id) {
public String getUsername() {
public void setUsername(String username) {
this.username =
public String getPassword() {
public void setPassword(String password) {
this.password =
public int getGender() {
public void setGender(int gender) {
this.gender =
public String getName() {
public void setName(String name) {
this.name =
这个对象将与中的某一张表对应,对于数据库的增删改查,可以抽象到对象这个层次。对于上面代码中的注解,先不用研究,到时Spring注入的时候会提到。
第三步,建立对象映射文件(NannyUser.hbm.xml)
第四步,建立Hibernate配置文件(包含数据库连接信息等)
com..jdbc.Driver
jdbc:mysql://localhost/nanny
org.hibernate.dialect.MySQLDialect
第五步,新增数据,测试
package com.bjtu.
import java.util.L
import org.hibernate.S
import org.hibernate.SessionF
import org.hibernate.T
import org.hibernate.cfg.C
import org.hibernate.query.Q
import com.bjtu.entity.NannyU
public class HibernateTest {
public static void main(String[] args) {
//初始化一个POJO对象
NannyUser user = new NannyUser();
user.setUsername(&&);
user.setPassword(&password&);
user.setGender(1);
user.setName(&vp&);
//读取hibernate.cfg.xml配置,并初始化配置
Configuration cfg = new Configuration();
cfg.configure();
//根据配置获取sessionFactory,然后开启事务
SessionFactory sessionFactory = cfg.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
//使用HQL语句查询
Query query = session.createQuery(&from NannyUser&);
List userList = query.getResultList();
System.out.println(userList.size());
//存入user对象至nannyuser表中
session.save(user);
//提交事务,关闭会话
tx.commit();
session.close();
现在我们来查看一下后台数据库:
至此,我们的hibernate框架也搭建完毕,下面我们来用Spring整合SpringMVC,Hibernate。这个过程可能较以上两个过程而言要麻烦一些,但是不必担心,慢慢来。
Spring 整合SpringMVC和Hibernate:
在开始这个步骤之前,我们需要了解一些东西:
1.SpringMVC是Spring框架的一部分,所以它能很好的和Spring配合使用。
2.下面我们将使用全注解方式来完成整合,所以你必须对Spring的注解有一个详细的了解,
3.对IOC(控制反转),DI(依赖注入)要有一定了解
4.熟悉MVC分层架构(对于Controller,Service,DAO有一定了解)
5.Spring管理hibernate,其实管理的就是Hibernate的sessionFactory
下面我们来一一剖析
第一步,配置web.xml文件(在web.xml文件中加入下段)
contextConfigLocation
/WEB-INF/beans.xml
org.springframework.web.context.ContextLoaderListener
ContextLoaderListener监听器的作用就是启动Web容器时,自动装配ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。
在上面的配置中我们看到,指定了一个spring全局配置文件beans.xml(这个名字你任意取,这是在指定情况下)。默认情况是/WEB-INF/applicationContext.xml
第二步,配置beans.xml
org.hibernate.dialect.MySQLDialect
com.bjtu.entity.NannyUser
这个文件的配置很重要,对于各个配置点的具体信息,详细情况,请查阅更多资料。
第三步,建立MVC结构
第四步,编写每层代码
TestController的代码,加入注解之后
package com.bjtu.
import java.util.L
import org.springframework.beans.factory.annotation.A
import org.springframework.stereotype.C
import org.springframework.web.bind.annotation.RequestM
import org.springframework.web.servlet.ModelAndV
import com.bjtu.entity.NannyU
import com.bjtu.service.NannyUserS
@Controller
public class TestController {
@Autowired
private NannyUserService nannyUserS
public NannyUserService getNannyUserService() {
return nannyUserS
public void setNannyUserService(NannyUserService nannyUserService) {
this.nannyUserService = nannyUserS
@RequestMapping(value=&/test&)
public ModelAndView testMVC(){
System.out.println(&testMVC()&);
List list = nannyUserService.getAllUser();
System.out.println(&list.size():&+list.size());
ModelAndView modelAndView = new ModelAndView(&/test&);
modelAndView.addObject(&info&, &hewei&);
return modelAndV
这里在Controller持有一个NannyUserService层对象引用,将等待Spring注入。(PS,如果对上面注解不理解,请看看传送门内的内容吧)
我们来看看NannyUserService接口吧
package com.bjtu.
import java.util.L
import com.bjtu.entity.NannyU
public interface NannyUserService {
public List getAllUser();
public boolean isExists(String username);
那么,它的具体实现NannyUserServiceImpl呢?
package com.bjtu.serviceI
import java.util.L
import org.springframework.beans.factory.annotation.A
import org.springframework.stereotype.S
import com.bjtu.dao.UserD
import com.bjtu.daoImpl.UserDaoI
import com.bjtu.entity.NannyU
import com.bjtu.service.NannyUserS
public class NannyUserServiceImpl implements NannyUserService{
@Autowired
private UserDao userD
public UserDao getUserDao() {
return userD
public void setUserDao(UserDao userDao) {
this.userDao = userD
public NannyUserServiceImpl(){
System.out.println(&NannyUserServiceImpl()&);
public List getAllUser() {
return userDao.getAllUser();
public boolean isExists(String username) {
return userDao.isExists(username);
我们在Service层持有一个Dao层接口引用,等待Spring注入。下面我们看看DAO层接口:
package com.bjtu.
import java.util.L
import com.bjtu.entity.NannyU
public interface UserDao {
// 得到所有用户
public List getAllUser();
// 检测用户名是否存在
public boolean isExists(String username);
那么它的具体实现呢?UserDaoImpl
package com.bjtu.daoI import java.util.ArrayL import java.util.L import org.hibernate.S import org.hibernate.SessionF import org.hibernate.T import org.hibernate.query.Q import org.springframework.beans.factory.annotation.A import org.springframework.beans.factory.annotation.Q import org.springframework.orm.hibernate5.support.HibernateDaoS import org.springframework.stereotype.R import com.bjtu.dao.UserD import com.bjtu.entity.NannyU @Repository public class UserDaoImpl extends HibernateDaoSupport implements UserDao { /*****注入*****/ @Autowired @Qualifier(&sessionFactory&) private SessionFactory sessionF /*****bean实例化时执行该方法*******/ @Autowired public void setSessionFactory(){ super.setSessionFactory(sessionFactory); } public UserDaoImpl(){ System.out.println(&UserDaoImpl&); } @SuppressWarnings({ &unchecked&, &rawtypes& }) @Override public List getAllUser() { List userList = new ArrayList(); Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); Query query = session.createQuery(&from NannyUser&); userList = query.getResultList(); tx.commit(); session.close(); return userL } @Override public boolean isExists(String username) { Query query = sessionFactory.openSession() .createQuery(&from NannyUser u where u.username = :username&).setParameter(&username&, username); System.out.println(query.list().size()); return query.list().size()&0?true: } }
我们在Dao层持有一个SessionFactory对象的引用,等待Spring注入。而之前我们在beans.xml文件中已经初始化了sessionFactory,所以它会注入到userDao中,而userDao中又
会注入到nannyUserService中,而nannyUserService又会注入到testController中。这样一环扣一环的逻辑好理解了吧?
总结:至此我们SSH环境已经搭建完毕,有什么问题请留言讨论,有什么错误请指出。Truly, 梦在远方,路在脚下。
SSH三大框架的搭建整合(struts2+spring+hibernate)
SSH说的上是javaweb经典框架,不能说100%要会SSH框架,但是大部分公司都在用,说到框架,都会提到ssh吧,这次就以很简单的注册例子来整合SSH框架。整合框架要注意的是先每个框架单独测通后再整合,不然整合后出现问题比较难排查。
环境:windows + MyEclipse + JDK1.7 + Tomcat7 + mysql
代码已经测通,如果有报错可能是我某些地方没描述清楚,请留言。
这次整合引入的jar包,( 不是最简的,有的包不一定用得上)
补上jar包下载地址:
1、导入jar包
2、配置web.xml
3、创建js页面
4、创建action类
5、配置struts.xml文件
到这里struts2配置完类,在和整合spring前,先单独测试struts2是否正确运行。然后配置spring以及整合struts2
1、导入jar包
2、在web.xml添加spring支持(监听器)
3、在src目录下添加applicationContext.xml文件 管理Action对象的创建
将action的创建交给spring管理,
spring 默认scope 是单例模式,这样只会创建一个Action对象,
而Action要求每次访问都要创建新的Action ,scope=”prototype”就可以保证每次有新的访问都会创建新的action。保证每一个请求有一个单独的Action来处理,避免struts中Action的线程安全问题。
4、修改struts.xml中action引用的类地址,改为在spring中创建action对象的id,这样才真正是把action对象交给spring创建。
和struts2配置的第5步比较
1、导入jar包
2、创建实体类
get/set方法
3、映射文件User.hbm.xml 在同一个包下创建映射文件,命名格式entity.hbm.xml
4、创建dao层、service层(基本的增删改查用于测试)
PS. 说明:Dao实现类继承了hibernateDaoSupport后可以直接获取session,不需要sessionFactory。
5、action层中在前面配置struts2的基础上,增加业务代码(增删改查)
对于userService的获取有两种方式:
get/set方式
6、在applicationContext.xml配置文件配置整合信息
A、(如果使用类注解方式,则需要开启注解扫描)
B、创建Action对象,userService对象,userDao对象
Ps.我这里userDao是get/set方式,Action,userService是注解方式
C、数据库连接(整合spring-hibernate,我是原来的hibernate配置文件写到spring中)
不需要再数据库建表,只要保证有对应的数据库即可,
Ps.数据库的连接信息没有写死到代码中,而是用db.properties配置再倒入,好处是随时更换数据库
db.properties数据
这里hibernate其实已经配好而且整合到spring里面去了,没有单独测试,直接用网页测试。
PS.如果整合顺序是hibernate – spring – struts2 会不会合理些?
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!SSH整合,hibernate注解配置,无hbm.xml,映射出现问题
[问题点数:20分,结帖人Sakura_ZHJ]
本版专家分:0
结帖率 50%
CSDN今日推荐
本版专家分:0
结帖率 50%
本版专家分:23274
2013年1月 Java大版内专家分月排行榜第二
本版专家分:0
结帖率 50%
本版专家分:23274
2013年1月 Java大版内专家分月排行榜第二
本版专家分:180
本版专家分:180
本版专家分:0
结帖率 50%
本版专家分:0
结帖率 50%
本版专家分:48
本版专家分:23274
2013年1月 Java大版内专家分月排行榜第二
本版专家分:614
本版专家分:40
本版专家分:0
结帖率 50%
本版专家分:0
结帖率 50%
匿名用户不能发表回复!|
CSDN今日推荐}

我要回帖

更多关于 spring hibernate 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信