• 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=?

    运行效果是一样一样的。

  • 相关阅读:
    DDD中的聚合和UML中的聚合以及组合的关系
    服务端高并发分布式架构演进之路
    互联网架构的演变,那些神奇的东西怎么来的?
    WPF 之 创建继承自Window 基类的自定义窗口基类
    IIS 之 在IIS7、IIS7.5中应用程序池最优配置方案
    性能测试工具 之 性能计数器
    IIS 之 线程池最大线程数
    WebService 之 已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize 属性。
    IIS 之 Web 服务器上的 ASP.NET 进程模型设置
    ADO.Net 之 数据库连接池(二)
  • 原文地址:https://www.cnblogs.com/hongten/p/java_spring_hibernate_hibernateTemplate.html
Copyright © 2020-2023  润新知