Spring+Hibernate整合

因为整合spring和hibernate所以,需要用到spring里面复写Hibernate的类以有DI和IOC特性

db.sql

hibernate_basic数据库

表 person

字段

pid pname psex

Person.java

 1 package cn.edu.spring_hibernate;
 2
 3 public class Person {
 4     private Long pid;
 5     private String pname;
 6     private String psex;
 7     public Long getPid() {
 8         return pid;
 9     }
10     public void setPid(Long pid) {
11         this.pid = pid;
12     }
13     public String getPname() {
14         return pname;
15     }
16     public void setPname(String pname) {
17         this.pname = pname;
18     }
19     public String getPsex() {
20         return psex;
21     }
22     public void setPsex(String psex) {
23         this.psex = psex;
24     }
25
26 }

Person.hbm.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4 <hibernate-mapping>
 5     <!--
 6         用来描述一个持久化类
 7         name  类的全名
 8          table 可以不写  默认值和类名一样
 9          catalog  数据库的名称  一般不写
10      -->
11     <class name="cn.edu.spring_hibernate.Person">
12         <!--
13             标示属性  和数据库中的主键对应
14             name  属性的名称
15             column 列的名称
16          -->
17         <id name="pid" column="pid" length="200" type="java.lang.Long">
18             <!--
19                 主键的产生器
20                   就该告诉hibernate容器用什么样的方式产生主键
21              -->
22             <generator class="increment"></generator>
23         </id>
24         <!--
25             描述一般属性
26          -->
27         <property name="pname" column="pname" length="20" type="string">
28         </property>
29
30         <property name="psex" column="psex" length="10" type="java.lang.String"></property>
31     </class>
32 </hibernate-mapping>

PersonDao.java

1 package cn.edu.spring_hibernate;
2 public interface PersonDao {
3     public void savePerson(Person person);
4 }

PersonDaoImpl.java

1 package cn.edu.spring_hibernate;
2 import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
3 //继承HibernateDaoSupport操作数据库,事务管理在配置文件中配,和这个类没关系
4 public class PersonDaoImpl extends HibernateDaoSupport implements PersonDao {
5     @Override
6     public void savePerson(Person person) {
7         this.getHibernateTemplate().save(person);
8     }
9 }

PersonService.java

1 package cn.edu.spring_hibernate;
2 public interface PersonService {
3     public void savePerson(Person person);
4 }

PersonServiceImple.java

 1 package cn.edu.spring_hibernate;
 2 public class PersonServiceImpl implements PersonService {
 3     //这里要写依赖注入,配置文件中可以配置
 4     private PersonDao personDao=new PersonDaoImpl();
 5     public PersonDao getPersonDao() {
 6         return personDao;
 7     }
 8     public void setPersonDao(PersonDao personDao) {
 9         this.personDao = personDao;
10     }
11     @Override
12     public void savePerson(Person person) {
13         personDao.savePerson(person);
14     }
15 }

MyException.java(用于异常处理)

1 package cn.edu.spring_hibernate;
2 public class MyException {
3     public void defineException(Throwable ex){
4         System.out.println(ex.getMessage());
5     }
6 }

test.java

 1 package cn.edu.spring_hibernate;
 2 import org.junit.Test;
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.support.ClassPathXmlApplicationContext;
 5 public class test {
 6     @Test
 7     public void testSpring_Hibernate()
 8     {
 9         ApplicationContext context=new ClassPathXmlApplicationContext("cn/edu/spring_hibernate/config/applicationContext-spring_hibernate.xml");
10         //这里如果 getBean("personDao")会加入数据不成功,因为配置文件中没有对其开启事务处理
11         PersonService personService=(PersonService)context.getBean("personService");
12         Person person=new Person();
13         person.setPname("ssss");
14         person.setPsex("god");
15         personService.savePerson(person);
16     }
17 }

配置文件中

hibernate.cfg.xml (配置文件中第二种配置sessionFactory的时候用到)这种方法方便点

 1 <?xml version=‘1.0‘ encoding=‘utf-8‘?>
 2 <!DOCTYPE hibernate-configuration PUBLIC
 3         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 4         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 5 <hibernate-configuration>
 6     <!--
 7         一个session-factory只能连接一个数据库
 8     -->
 9 <session-factory>
10     <!--
11         数据库的用户名
12     -->
13     <property name="connection.username">root</property>
14     <!--
15         密码
16     -->
17     <property name="connection.password">friends</property>
18     <!--
19         url
20     -->
21     <property name="connection.url">
22         jdbc:mysql://localhost:3306/hibernate_basic
23     </property>
24
25     <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
26     <!--
27         作用:根据持久化类和映射文件生成表
28         validate
29         create-drop
30         create
31         update
32     -->
33     <property name="hbm2ddl.auto">update</property>
34     <!--
35         显示hibernate内部生成的sql语句
36     -->
37     <property name="show_sql">true</property>
38     <mapping resource="cn/edu/spring_hibernate/Person.hbm.xml" />
39
40 </session-factory>
41 </hibernate-configuration>

jdbc.properties  (配置文件中第一种配置sessionFactory的时候用到)

1 jdbc.driverClassName=com.mysql.jdbc.Driver
2 jdbc.url=jdbc\:mysql\://localhost\:3306/hibernate_basic
3 jdbc.username=root
4 jdbc.password=friends

applicationContext-spring_hibernate.xml

 1 <beans xmlns="http://www.springframework.org/schema/beans"
 2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
 3     xmlns:tx="http://www.springframework.org/schema/tx"
 4     xsi:schemaLocation="http://www.springframework.org/schema/beans
 5         http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
 6         http://www.springframework.org/schema/aop
 7         http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
 8         http://www.springframework.org/schema/tx
 9         http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
10 <!--     配置引入配置文件路径 -->
11     <bean
12         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
13         <property name="locations">
14             <value>classpath:cn/edu/spring_hibernate/config/jdbc.properties</value>
15         </property>
16     </bean>
17
18     <bean id="dataSource" destroy-method="close"
19         class="org.apache.commons.dbcp.BasicDataSource">
20         <property name="driverClassName" value="${jdbc.driverClassName}" />
21         <property name="url" value="${jdbc.url}" />
22         <property name="username" value="${jdbc.username}" />
23         <property name="password" value="${jdbc.password}" />
24     </bean>
25
26     <!--
27         sessionFactory 1、sessionFactoryImpl 2、利用spring的IOC和DI的特征
28         hibernate提供的 sessionFactory没有IOC和DI特征,所以spring重写了这个这个类加入了这两个特征
29     -->
30     <!-- 这是配置sessionFactory的第一种方式 -->
31         <!--
32     <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
33         <property name="dataSouce" ref="dataSource"></property>
34         <property name="mappingResources">
35          导入配置文件
36             <list>
37                 <value>cn/edu/spring_hibernate/Person.hbm.xml</value>
38             </list>
39         </property>
40         <property name="hibernateProperties">
41             <value>hibernate.dialect=org.hibernate.dialect.MySQLDialect</value>
42         </property>
43     </bean>
44     -->
45 <!--     配置sessionFactory的第二种方式 -->
46     <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
47         <property name="configLocation">
48             <value>classpath:cn/edu/spring_hibernate/config/hibernate.cfg.xml</value>
49         </property>
50     </bean>
51 <!--     因为personDaoImpl继承了HibernateDaoSupport,所以必须要注入sessionFactory -->
52     <bean id="personDao" class="cn.edu.spring_hibernate.PersonDaoImpl">
53         <property name="sessionFactory">
54             <ref bean="sessionFactory"/>
55         </property>
56     </bean>
57
58     <bean id="personService" class="cn.edu.spring_hibernate.PersonServiceImpl">
59         <property name="personDao">
60             <ref bean="personDao"/>
61         </property>
62     </bean>
63
64
65     <bean id="myException" class="cn.itcast.spring.jdbc.transaction.MyException"></bean>
66 <!--     spring和hibernate整合提供的事务管理器管理类, -->
67     <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
68         <property name="sessionFactory">
69             <ref bean="sessionFactory"/>
70         </property>
71     </bean>
72     <!--
73         通知 1、告诉spring容器,采用什么样的方法处理事务 2、告诉spring容器,目标方法应该采用什么样的事务处理策略
74     -->
75     <tx:advice id="tx" transaction-manager="transactionManager">
76         <tx:attributes>
77             <!--
78                 save开头的函数名 name规定方法 isolation 默认值为DEFAULT propagation 传播机制 REQUIRED
79             -->
80             <tx:method name="save*" read-only="false" />
81         </tx:attributes>
82     </tx:advice>
83 <!--     本来事务由程序员自己写并且当切面放入,但是这里spring提供了事务处理的通知方法,所以不用程序员写切面了 -->
84     <aop:config >
85         <aop:pointcut expression="execution(* cn.edu.spring_hibernate.PersonServiceImpl.*(..))" id="perform"/>
86         <aop:advisor advice-ref="tx" pointcut-ref="perform" />
87 <!--         指定了切面和通知 -->
88         <aop:aspect  ref="myException">
89             <aop:after-throwing method="defineException" pointcut-ref="perform" throwing="ex"/>
90         </aop:aspect>
91     </aop:config>
92 </beans>

Spring+Hibernate整合

时间: 2024-10-31 07:34:07

Spring+Hibernate整合的相关文章

spring+hibernate整合:报错org.hibernate.HibernateException: No Session found for current thread

spring+hibernate整合:报错信息如下 org.hibernate.HibernateException: No Session found for current thread at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:106) at org.hibernate.internal.SessionFactoryImpl.getC

Spring+Hibernate整合配置 --- 比较完整的spring、hibernate 配置

Spring+Hibernate整合配置 分类: J2EE2010-11-25 17:21 16667人阅读 评论(1) 收藏 举报 springhibernateclassactionservletmysql 在公司一直没有什么机会直接折腾SSH“原生态”的SSH当今比较流行的轻量级的框架,用着公司的框架也是郁闷异常,今天没事整整原来用过的一个项目的配置,发现就算是自己曾经用过的东西,如果较长时间不返过去重新学习,许多你半熟不熟的知识就是异常陌生.下面贴上我的一些配置,暂且权当备份吧. web

spring mvc+spring + hibernate 整合(三)

前面我们已整合了spring + hibernate,并建立了个用户的增加的实例,通过了单元测试,能正常增加数据.今天我们就来集成spring mvc以便建立web界面来输入数据并提交,后台再保存入库.关于spring mvc的一些基础理论及使用方法,网上有很多的资料,我这里就不多说了,下面我们进入实战.     因为我们项目会用到很多的图片.js代码.css样式文件等.我们在webapp目录下建立个static目录,统一对这些文件进行管理 一:web.xml配置 它提供了我们应用程序的配置设定

Struts+Spring+Hibernate整合入门详解

标签: strutshibernatespringbeanactionimport 2007-08-12 16:05 36280人阅读 评论(13) 收藏 举报 分类: STRUTS&SPRING&HIBERNATE(12) Java 5.0 Struts 2.0.9 spring 2.0.6 hibernate 3.2.4 作者:  Liu Liu 转载请注明出处 基本概念和典型实用例子. 一.基本概念       Struts:作为基于 MVC 模式的 Web 应用最经典框架,两个项目

spring mvc+spring + hibernate 整合(二)

在上篇文章中,我建立了工程并配置了spring + hibernate.今天我们检验下上篇文章的成果,如何检查呢?那就是进行单元测试.本篇文章就让大家和我一起来就前面的建的工程进行单元测试.     本项目使用Junit进行单元测试,需要引用单元测试的包,在的工程建立中已有了如何引入单元测试的依赖,这里就不多说了.要进行单元单元测试,我们就按下面的步骤进行 一:建立实体 本例是刚弄开始学习,所以表不弄得太复杂,我们就以用户登录为例:建立一个用户对象,拥有用户名和密码两个属性,密码开始也使用名文的

Strut2 spring hibernate 整合

一.创建web项目工程 wzz 点击finish 2.添加spring Jar包   AOP,Core,Persistence Core ,web jar 点击next 点击Finish 3.配置Database Driver 我使用的是JTDS jar包,jtds在配置url地址时与使用sql Seriver的url地址有点不太一样,然后直接点击Finish即可 4.添加hibernate 配置 点击next 选择使用Spring的applicationContext.xml,点击next 选

java框架篇---spring hibernate整合

在会使用hibernate 和spring框架后 两个框架的整合就变的相当容易了, 为什么要整合Hibernate?1.使用Spring的IOC功能管理SessionFactory对象 LocalSessionFactoryBean2.使用Spring管理Session对象  HibernateTemplate3.使用Spring的功能实现声明式的事务管理 第一步:搭建hibernate环境(包括引入hibernate的jar,包配置数据源,建立类和表的映射),为什么这么做.我觉得hiberna

spring mvc+spring + hibernate 整合(一)

一:创建maven工程,引入需要的依赖包,创建项目的工程包 二:整合spring和hibernate 1.建立sql server数据库访问的jdbc配置文件. 这个配置文件主要是用来将sql server的连接参数放在外面配置,当参数有变动时只需要修改配置文件,不需要修改web-inf下的spring.xml文件 不建立也可以,如果不建立则spring.xml中的数据源配置就如建立数据源配置中的代码1. jdbcUrl = jdbc:sqlserver://localhost:1433;Dat

SpringMVC+Spring+hibernate整合及分页

1. 新建web project 2. 引入jar, 3. 创建包com.tgb.web.controller, 下面创建包(dao,entity,service, config,spring,hibernate) config-> spring-core.xml,spring-servlet.xml,spring-hibernate.xml 1) config下 springmvc配置文件 spring-servlet.xml <?xml version="1.0" en