转自:http://www.cnblogs.com/hongten/archive/2012/03/10/java_spring_hibernate.html

项目结构:

http://www.cnblogs.com/hongten/gallery/image/112469.html

使用的jar包:

hibernate核心安装包:
hibernate3.jar
lib\rquired\*.jar
lib\optional\encache-1.2.3.jar    (二级缓存)

lib\test\slf4j-log4j12.jar    (hibernate注解安装包)

如下图:

http://www.cnblogs.com/hongten/gallery/image/112470.html

spring安装包:
dist\spring.jar
dist\modules\spring-webmvc-struts.jar
lib\jakarta-commons\commons-loggng.jar
lib\jakarta-commons\commons-dbcp.jar
lib\jakarta-commons\commons-pool.jar
lib\cglib\cglib-nodep-2.1_3.jar
lib\j2ee\common-annotations.jar
lib\log4j-1.2.15.jar

如下图:

http://www.cnblogs.com/hongten/gallery/image/112471.html

/spring+hibernate/src/com/b510/domain/Person.java

 1 package com.b510.domain;
2
3 /**
4 * Person实体类
5 *
6 * @author Hongten
7 *
8 */
9
10 public class Person implements java.io.Serializable {
11
12 // Fields
13
14 /**
15 * 版本号
16 */
17 private static final long serialVersionUID = -47270870639923184L;
18 /**
19 * id号
20 */
21 private Integer id;
22 /**
23 * 姓名
24 */
25 private String name;
26 /**
27 * 年龄
28 */
29 private Integer age;
30 /**
31 * 性别
32 */
33 private String sex;
34
35 // Constructors
36
37 /** default constructor */
38 public Person() {
39 }
40
41 /** minimal constructor */
42 public Person(String name) {
43 this.name = name;
44 }
45
46 /** full constructor */
47 public Person(String name, Integer age, String sex) {
48 this.name = name;
49 this.age = age;
50 this.sex = sex;
51 }
52
53 // Property accessors
54
55 public Integer getId() {
56 return this.id;
57 }
58
59 public void setId(Integer id) {
60 this.id = id;
61 }
62
63 public String getName() {
64 return this.name;
65 }
66
67 public void setName(String name) {
68 this.name = name;
69 }
70
71 public Integer getAge() {
72 return this.age;
73 }
74
75 public void setAge(Integer age) {
76 this.age = age;
77 }
78
79 public String getSex() {
80 return this.sex;
81 }
82
83 public void setSex(String sex) {
84 this.sex = sex;
85 }
86
87 }

/spring+hibernate/src/com/b510/domain/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
5 <hibernate-mapping>
6 <class name="com.b510.domain.Person" table="person" catalog="spring">
7 <id name="id" type="java.lang.Integer">
8 <column name="id" />
9 <generator class="increment" />
10 </id>
11 <property name="name" type="java.lang.String">
12 <column name="name" length="20" not-null="true" />
13 </property>
14 <property name="age" type="java.lang.Integer">
15 <column name="age" />
16 </property>
17 <property name="sex" type="java.lang.String">
18 <column name="sex" length="2" />
19 </property>
20 </class>
21 </hibernate-mapping>

/spring+hibernate/src/com/b510/service/PersonService.java

 1 package com.b510.service;
2
3 import java.util.List;
4
5 import com.b510.domain.Person;
6
7 /**
8 * PersonService服务层
9 *
10 * @author Hongten
11 *
12 */
13 public interface PersonService {
14
15 /**
16 * 保存Person
17 *
18 * @param person
19 */
20 public abstract void save(Person person);
21
22 /**
23 * 更新Person
24 *
25 * @param person
26 */
27 public abstract void update(Person person);
28
29 /**
30 * 获取Person
31 *
32 * @param id
33 * @return
34 */
35 public abstract Person getPerson(Integer id);
36
37 /**
38 * 获取所有Person
39 *
40 * @return
41 */
42 public abstract List<Person> getPerson();
43
44 /**
45 * 删除指定id的Person
46 *
47 * @param id
48 */
49 public abstract void delete(Integer id);
50
51 }

/spring+hibernate/src/com/b510/service/impl/PersonServiceBean.java

 1 package com.b510.service.impl;
2
3 import java.util.List;
4
5 import javax.annotation.Resource;
6
7 import org.hibernate.SessionFactory;
8 import org.springframework.transaction.annotation.Propagation;
9 import org.springframework.transaction.annotation.Transactional;
10
11 import com.b510.domain.Person;
12 import com.b510.service.PersonService;
13
14 /**
15 * 使用注解方式进行事务管理
16 *
17 * @author Hongten
18 *
19 */
20 @Transactional
21 public class PersonServiceBean implements PersonService {
22 /**
23 * 通过bean.xml配置文件按名称sessionFactory注入属性sessionFactory,
24 * 当sessionFactory注入成功后,我们可以得到Session对象
25 */
26 @Resource
27 private SessionFactory sessionFactory;
28
29 @Override
30 public void delete(Integer id) {
31 sessionFactory.getCurrentSession().delete(
32 sessionFactory.getCurrentSession().load(Person.class, id));
33 }
34
35 // 在查询的时候,不需要开启事务,并且指定为只读,这样可以提高查询效率
36 @Override
37 @Transactional(propagation = Propagation.NOT_SUPPORTED, readOnly = true)
38 public Person getPerson(Integer id) {
39 return (Person) sessionFactory.getCurrentSession()
40 .get(Person.class, id);
41 }
42
43 // 在查询的时候,不需要开启事务,并且指定为只读,这样可以提高查询效率
44 @Override
45 @Transactional(propagation = Propagation.NOT_SUPPORTED, readOnly = true)
46 @SuppressWarnings("unchecked")
47 public List<Person> getPerson() {
48 return sessionFactory.getCurrentSession().createQuery("from Person")
49 .list();
50
51 }
52
53 @Override
54 public void save(Person person) {
55 sessionFactory.getCurrentSession().persist(person);
56 }
57
58 @Override
59 public void update(Person person) {
60 sessionFactory.getCurrentSession().merge(person);
61 }
62 }

/spring+hibernate/src/com/b510/test/PersonServiceBeanTest.java

 1 package com.b510.test;
2
3 import org.junit.BeforeClass;
4 import org.junit.Test;
5 import org.springframework.context.ApplicationContext;
6 import org.springframework.context.support.ClassPathXmlApplicationContext;
7
8 import com.b510.domain.Person;
9 import com.b510.service.PersonService;
10
11 public class PersonServiceBeanTest {
12 static PersonService personService;
13
14 @BeforeClass
15 public static void setUpBeforeClass() throws Exception {
16
17 try {
18 ApplicationContext act = new ClassPathXmlApplicationContext(
19 "bean.xml");
20 personService = (PersonService) act.getBean("personService");
21 } catch (Exception e) {
22 e.printStackTrace();
23 }
24 }
25
26 @Test
27 public void testSave() {
28 personService.save(new Person("hongten", 21, "男"));
29 }
30
31 @Test
32 public void testUpdate() {
33 Person person =personService.getPerson(2);
34 person.setName("hanyuan");
35 person.setAge(21);
36 person.setSex("男");
37 personService.update(person);
38 }
39
40 @Test
41 public void testGetPersonInteger() {
42 Person person = personService.getPerson(1);
43 System.out.println(person.getId() + " " + person.getName() + " "
44 + person.getAge() + " " + person.getSex());
45 }
46
47 @Test
48 public void testGetPerson() {
49 java.util.List<Person> list = personService.getPerson();
50 System.out.println("*******************");
51 for (Person person : list) {
52 System.out.println(person.getId() + " " + person.getName() + " "
53 + person.getAge() + " " + person.getSex());
54 }
55 }
56
57 @Test
58 public void testDelete() {
59 personService.delete(1);
60 }
61
62 }

/spring+hibernate/src/bean.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
4 xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
5 xsi:schemaLocation="http://www.springframework.org/schema/beans
6 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
7 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
8 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
9 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
10 <context:annotation-config />
11
12 <!-- 读取jdbc.properties配置文件 -->
13 <context:property-placeholder location="classpath:jdbc.properties" />
14
15 <!-- 配置数据源 -->
16 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
17 destroy-method="close">
18 <property name="driverClassName" value="${driverClassName}" />
19 <property name="url" value="${url}" />
20 <property name="username" value="${username}" />
21 <property name="password" value="${password}" />
22 <!-- 连接池启动时的初始值 -->
23 <property name="initialSize" value="${initialSize}" />
24 <!-- 连接池的最大值 -->
25 <property name="maxActive" value="${maxActive}" />
26 <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
27 <property name="maxIdle" value="${maxIdle}" />
28 <!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
29 <property name="minIdle" value="${minIdle}" />
30 </bean>
31
32 <bean id="sessionFactory"
33 class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
34 <!-- 配置SessionFactory所需的数据源,注入上面定义的dataSource -->
35 <property name="dataSource" ref="dataSource" />
36
37 <!-- mappingResources属性用来列出全部映射文件 -->
38 <property name="mappingResources">
39 <list>
40 <!-- 配置所有PO映射文件 -->
41 <value>com/b510/domain/Person.hbm.xml</value>
42 </list>
43 </property>
44
45 <!-- 定义hibernate的SessionFactory的属性 -->
46 <property name="hibernateProperties">
47 <value>
48 hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
49 hibernate.hbm2ddl.auto=update
50 hibernate.show_sql=true
51 hibernate.format_sql=true
52 hibernate.cache.use_second_level_cache=true
53 hibernate.cache.use_query_cache=false
54 hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
55 </value>
56 </property>
57 </bean>
58
59 <!-- 配置Hibernate的局部事务管理器,使用HibernateTransactionManager类 -->
60 <!-- 该类是PlatformTransactionManager接口对采用Hibernate的特定实现类 -->
61 <bean id="txManager"
62 class="org.springframework.orm.hibernate3.HibernateTransactionManager">
63 <property name="sessionFactory" ref="sessionFactory" />
64 </bean>
65
66 <!-- 采用注解方式配置事务 -->
67 <tx:annotation-driven transaction-manager="txManager" />
68
69 <bean id="personService" class="com.b510.service.impl.PersonServiceBean"></bean>
70 </beans>

这里我们可以重写占位符配置器:

那么/spring+hibernate/src/bean.xml的另外一种配置方式是:要知道,程序执行是完全相同的。

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
4 xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
5 xsi:schemaLocation="http://www.springframework.org/schema/beans
6 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
7 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
8 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
9 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
10 <context:annotation-config />
11
12 <!--
13 重写占位符配置器,读取jdbc.properties配置文件
14 这时候jdbc.properties配置文件的书写方式如下:
15 dataSource.driverClassName=org.gjt.mm.mysql.Driver
16 dataSource.url=jdbc\:mysql\://localhost\:3307/spring?useUnicode\=true&characterEncoding\=UTF-8
17 dataSource.username=root
18 dataSource.password=root
19 dataSource.initialSize=1
20 dataSource.maxActive=300
21 dataSource.maxIdle=2
22 dataSource.minIdle=1
23
24 dataSource.driverClassName对于dataSource必须是在此xml配置文件中可以找到的bean,
25 否则程序会出错。
26 -->
27 <context:property-override location="classpath:jdbc.properties" />
28 <!-- 配置数据源 -->
29 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
30 destroy-method="close">
31 </bean>
32
33 <bean id="sessionFactory"
34 class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
35 <!-- 配置SessionFactory所需的数据源,注入上面定义的dataSource -->
36 <property name="dataSource" ref="dataSource" />
37
38 <!-- mappingResources属性用来列出全部映射文件 -->
39 <property name="mappingResources">
40 <list>
41 <!-- 配置所有PO映射文件 -->
42 <value>com/b510/domain/Person.hbm.xml</value>
43 </list>
44 </property>
45
46 <!-- 定义hibernate的SessionFactory的属性 -->
47 <property name="hibernateProperties">
48 <value>
49 hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
50 hibernate.hbm2ddl.auto=update
51 hibernate.show_sql=true
52 hibernate.format_sql=true
53 hibernate.cache.use_second_level_cache=true
54 hibernate.cache.use_query_cache=false
55 hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
56 </value>
57 </property>
58 </bean>
59
60 <!-- 配置Hibernate的局部事务管理器,使用HibernateTransactionManager类 -->
61 <!-- 该类是PlatformTransactionManager接口对采用Hibernate的特定实现类 -->
62 <bean id="txManager"
63 class="org.springframework.orm.hibernate3.HibernateTransactionManager">
64 <property name="sessionFactory" ref="sessionFactory" />
65 </bean>
66
67 <!-- 采用注解方式配置事务 -->
68 <tx:annotation-driven transaction-manager="txManager" />
69
70 <bean id="personService" class="com.b510.service.impl.PersonServiceBean"></bean>
71 </beans>

/spring+hibernate/src/jdbc.properties

1 driverClassName=org.gjt.mm.mysql.Driver
2 url=jdbc\:mysql\://localhost\:3307/spring?useUnicode\=true&characterEncoding\=UTF-8
3 username=root
4 password=root
5 initialSize=1
6 maxActive=300
7 maxIdle=2
8 minIdle=1

运行结果:

 1 log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext).
2 log4j:WARN Please initialize the log4j system properly.
3 Hibernate:
4 select
5 max(id)
6 from
7 person
8 Hibernate:
9 insert
10 into
11 spring.person
12 (name, age, sex, id)
13 values
14 (?, ?, ?, ?)
15 Hibernate:
16 select
17 person0_.id as id0_0_,
18 person0_.name as name0_0_,
19 person0_.age as age0_0_,
20 person0_.sex as sex0_0_
21 from
22 spring.person person0_
23 where
24 person0_.id=?
25 Hibernate:
26 select
27 person0_.id as id0_0_,
28 person0_.name as name0_0_,
29 person0_.age as age0_0_,
30 person0_.sex as sex0_0_
31 from
32 spring.person person0_
33 where
34 person0_.id=?
35 Hibernate:
36 select
37 person0_.id as id0_,
38 person0_.name as name0_,
39 person0_.age as age0_,
40 person0_.sex as sex0_
41 from
42 spring.person person0_
43 *******************
44 2 hanyuan 21 男
45 3 hongten 21 男
46 Hibernate:
47 select
48 person0_.id as id0_0_,
49 person0_.name as name0_0_,
50 person0_.age as age0_0_,
51 person0_.sex as sex0_0_
52 from
53 spring.person person0_
54 where
55 person0_.id=?

haibernate 配置资源的XML配置方式:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory> <property name="hibernate.connection.url" >jdbc:mysql://localhost/EducationCRM?useUnicode=true&characterEncoding=utf-8</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><!--方言 -->
<property name="hibernate.show_sql">false</property><!--是否打印SQL语句 -->
<property name="hibernate.format_sql">true</property><!--在控制台和log4j 优化打印的语句 -->
<property name="hibernate.hbm2ddl.auto">update</property><!--自动跟新 --> <property name="sessionInfoName">sessionInfo</property>
<property name="uploadFieldName">filedata</property>
<property name="uploadFileMaxSize">20971520</property>
<property name="uploadFileExts">txt,rar,zip,doc,docx,xls,xlsx,jpg,jpeg,gif,png,swf,wmv,avi,wma,mp3,mid</property>
<property name="uploadDirectory">attached</property> <!-- 配置mapping示例 -->
<mapping class="com.educationcrm.dao.BuyVipCard"/> </session-factory>
</hibernate-configuration>

  

Spring+hibernate 配置实例的更多相关文章

  1. spring+hibernate 配置多个数据源过程 以及 spring中数据源的配置方式

    spring+hibernate 配置多个数据源过程 以及 spring中数据源的配置方式[部分内容转载] 2018年03月27日 18:58:41 守望dfdfdf 阅读数:62更多 个人分类: 工 ...

  2. Spring MVC+Spring +Hibernate配置事务,但是事务不起作用

    最近做项目,被一个问题烦恼了很久.使用Spring MVC+Spring +Hibernate开发项目,在使用注解配置事务管理,刚开始发现无论如何数据库都无法更新,但是可以从数据库查询到数据.怀疑是配 ...

  3. Spring+Hibernate配置多数据源

    配置说明 在实际应用中,经常会用到读写分离,这里就这种情况进行Spring+Hibernate的多数据源配置.此处的配置只是让读的方法操作一个数据库,写的方法操作另外一个数据库. 注:我这里的配置JD ...

  4. 16~25.spring+hibernate简单实例 .连接数据库并进行增删改查

    1.概念 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQ ...

  5. spring注解配置实例

    在spring中使用注解配置前需要先在配置文件指定需要扫描的包. 通过注解的方式依赖注入,可以不用创建set方法,也不用在xml文件中申明注入关系. 实例结构如下: 整个流程是: 先创建好数据库的表对 ...

  6. spring +spring+ hibernate配置1

    这种配置方式是将Spring .SpringMVC.Hibernate三个模块分开配置,交叉引用!hibernate连接配置使用.properties文件 web.xml配置 <web-app ...

  7. Spring MVC配置实例

    1.下载Jar文件,添加到项目 lib文件夹中. 使用eclipse新建 Web 项目.下载导入相关的 jar 和 Tomcat.我的java版本是JDK1.8 对应的 Tomcat 版本是 8.0. ...

  8. Spring + Quartz配置实例

    Spring为创建Quartz的Scheduler.Trigger和JobDetail提供了便利的FactoryBean类,以便能够在Spring 容器中享受注入的好处.此外Spring还提供了一些便 ...

  9. Strut2 spring hibernate 整合

    一.创建web项目工程 wzz 点击finish 2.添加spring Jar包   AOP,Core,Persistence Core ,web jar 点击next 点击Finish 3.配置Da ...

随机推荐

  1. 7.利用canvas和js画一个渐变的

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. java压缩文件中文名乱码问题

    import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; 改为 import org.apache.tools.zip. ...

  3. 关于时间:UTC时间、GMT时间、本地时间、Unix时间戳

    1.UTC时间 与 GMT时间我们可以认为格林威治时间就是时间协调时间(GMT=UTC),格林威治时间和UTC时间均用秒数来计算的. 2.UTC时间 与 本地时UTC + 时区差 = 本地时间时区差东 ...

  4. Delphi 帮助的使用

  5. RubyGems 库发现了后门版本的网站开发工具 bootstrap-sass

    安全研究人员在官方的 RubyGems 库发现了后门版本的网站开发工具 bootstrap-sass.该工具的下载量高达 2800 万次,但这并不意味着下载的所有版本都存在后门,受影响的版本是 v3. ...

  6. fork树

    i son/pa ppid pid fpid parent parent parent child child parent child parent parent child child child ...

  7. 认识JWT(转)

    1. JSON Web Token是什么 JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的.自包含的方式,用于作为JSON对象在各方之间安全地传输信息.该 ...

  8. ubuntu 设置apt-get 代理

    1 添加apt-get 代理配置文件 sudo vi /etc/apt/apt.conf.d/proxy.conf 2 添加内容 Acquire::http::Proxy "http://w ...

  9. Quartz(一)

    1 Quartz介绍 定时任务,无论是互联网公司还是传统的软件行业都是必不可少的,Quartz是好多优秀的定时任务开源框架的基础的. 我们应用最简单和最基础的配置,不需要太多参数,就可以轻松掌握企业中 ...

  10. DRF介绍,DRF项目开发,DRF项目的视图类的dispatch源码解析

    目录 一.DRF介绍 1. 什么是DRF 2. 为什么要用DRF (1)使用DRF的原因 (2)站在开发者的角度来说用DRF的好处(暂时列举这么多) 二.用DRF开发后端项目 三.APIView请求生 ...