spring开发_Spring+Hibernate_HibernateTemplate


原有项目:

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

修改的类:

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

HibernateTemplate提供持久层访问模板化,他只需要提供一个SessionFactory的引用,就可以执行持久化操作。

SessionFactory对象可以通过Annotation的@Resource获取,也可以通过设值(setter)方式传入。

我们借助于HIbernateTemplate实现持久层的简洁性,大部分CRUD操作只需要一行代码就可以做到,

完全可以避免Hibernate持久化操作那些繁琐的步骤了。

 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.orm.hibernate3.HibernateTemplate;
 9 import org.springframework.transaction.annotation.Propagation;
10 import org.springframework.transaction.annotation.Transactional;
11 
12 import com.b510.domain.Person;
13 import com.b510.service.PersonService;
14 
15 /**
16  * 使用注解方式进行事务管理
17  * 
18  * @author Hongten
19  * 
20  */
21 @Transactional
22 public class PersonServiceBean implements PersonService {
23     /**
24      * 通过bean.xml配置文件按名称sessionFactory注入属性sessionFactory,
25      * 当sessionFactory注入成功后,我们可以得到Session对象
26 */
27     @Resource
28     private SessionFactory sessionFactory;
29     /**
30      * 定义HibernateTemplate对象,用于执行持久化操作
31 */
32     private HibernateTemplate hibernateTemplate;
33 
34     private HibernateTemplate getHibernateTemplate() {
35         if (hibernateTemplate == null) {
36             hibernateTemplate = new HibernateTemplate(sessionFactory);
37         }
38         return hibernateTemplate;
39     }
40 
41     @Override
42     public void delete(Integer id) {
43         getHibernateTemplate().delete(getPerson(id));
44     }
45 
46     // 在查询的时候,不需要开启事务,并且指定为只读,这样可以提高查询效率
47     @Override
48     @Transactional(propagation = Propagation.NOT_SUPPORTED, readOnly = true)
49     public Person getPerson(Integer id) {
50         return (Person) getHibernateTemplate().get(Person.class, id);
51     }
52 
53     // 在查询的时候,不需要开启事务,并且指定为只读,这样可以提高查询效率
54     @Override
55     @Transactional(propagation = Propagation.NOT_SUPPORTED, readOnly = true)
56     @SuppressWarnings("unchecked")
57     public List<Person> getPerson() {
58         return getHibernateTemplate().find("from Person");
59     }
60 
61     @Override
62     public void save(Person person) {
63         getHibernateTemplate().save(person);
64     }
65 
66     @Override
67     public void update(Person person) {
68         getHibernateTemplate().update(person);
69     }
70 }

运行效果:

 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     update
27         spring.person 
28     set
29         name=?,
30         age=?,
31         sex=? 
32     where
33         id=?
34 Hibernate: 
35     select
36         person0_.id as id0_0_,
37         person0_.name as name0_0_,
38         person0_.age as age0_0_,
39         person0_.sex as sex0_0_ 
40     from
41         spring.person person0_ 
42     where
43         person0_.id=?
44 Hibernate: 
45     select
46         person0_.id as id0_,
47         person0_.name as name0_,
48         person0_.age as age0_,
49         person0_.sex as sex0_ 
50     from
51         spring.person person0_
52 *******************
53 2  hanyuan  21  男
54 3  hongten  21  男
55 4  hongten  21  男
56 5  hello  12  M
57 6  hongten  12  M
58 7  hongten2  12  M
59 8  hw  20  M
60 9  hongten  21  男
61 10  hongten  21  男
62 Hibernate: 
63     select
64         person0_.id as id0_0_,
65         person0_.name as name0_0_,
66         person0_.age as age0_0_,
67         person0_.sex as sex0_0_ 
68     from
69         spring.person person0_ 
70     where
71         person0_.id=?

运行效果是一样一样的。


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号