spring对hibernate的集成

简介:
所谓spring对hibernate的集成,其实它就做了两方面的工作:
      1.提供了可以在配置文件中进行配置的完成了对数据源和SessionFactory信息进行封装的bean类。比如:对数据源进行封装的类BasicDataSource,对SessionFactory进行封装的类LocalSessionFactoryBean。
      2.提供了对hibernate的一些公共操作进行了封装的类。比如org.springframework.orm.hibernate3.HibernateTemplate。这里,HibernateTemplate并没有完成任何实质性的功能,它也只是对Hibernate中session方法的对应调用。并且,对于Hibernate中session的大多数方法,在HibernateTemplate中都有与之对应的方法。它还提供了一个通用的方法excute()来处理一般情况,但是要求传入一个HibernateCallback接口类型的对象,使程序员可以在实现方法doInHibernate(Session session)中借助spring给提供的session来自己进行Hibernate操作。总之,spring就是要省去我们手动创建hibernate中session的操作以及事务管理。
 
实体类:
public  class Teacher  implements Serializable { 

   private  static  final  long serialVersionUID = 1L; 

   private Integer id; 
   private String name; 
   private String email; 
   private Date birthday; 
   private Double salary; 
     //各属性的setter.getter方法 
}
映射文件:
< hibernate-mapping  package ="com.cernet.spring.hibernate.entity" > 
   < class  name ="Teacher"  table ="s_spring_teacher" > 
     < id  name ="id"  column ="id" > 
       < generator  class ="sequence" > 
         < param  name ="sequence" >s_spring_teacher_id_seq </ param > 
       </ generator > 
     </ id > 
     < property  name ="name"  column ="name"  type ="string" > </ property > 
     < property  name ="email"  column ="email"  type ="string" > </ property > 
     < property  name ="birthday"  column ="birthday"  type ="date" > </ property > 
     < property  name ="salary"  column ="salary"  type ="double" > </ property > 
   </ class > 
</ hibernate-mapping >
Dao实现类:
public  class TeacherDaoImpl  implements TeacherDao { 
   private HibernateTemplate template =  null

   public HibernateTemplate getTemplate() { 
     return template; 
  } 

   public  void setTemplate(HibernateTemplate template) { 
     this.template = template; 
  } 

  @Override 
   public  void delete(Integer id) { 
    Teacher t = (Teacher) template.get(Teacher. class, id); // 到数据库中查指定id对应的记录 
     if (t !=  null) { 
      template.delete(t); 
    } 
  } 

  @Override 
   public  void delete(Teacher t) { 
     if (t.getId() !=  null) { 
      template.delete(t); 
    } 
  } 

  @Override 
   public Teacher getTeacherById(Integer id) { 
     return (Teacher) template.get(Teacher. class, id); 
  } 

  @SuppressWarnings( "unchecked"
  @Override 
   public List<Teacher> getTeachersByName(String name) { 
    String hql =  "from Teacher as t where t.name=?"
    Object args[] = { name }; //对应占位符的参数值 
     return (List<Teacher>) template.find(hql, args); 
  } 

  @SuppressWarnings( "unchecked"
  @Override 
   public List<Teacher> getTeachers() { 
    String hql =  "from Teacher"
     return template.find(hql); 
  } 

  @Override 
   public  void insert(Teacher t) { 
    template.saveOrUpdate(t); 
  } 

  @Override 
   public  void update( final Teacher t) { 
    template.execute( new HibernateCallback() { 
       public Object doInHibernate(Session session) 
           throws HibernateException, SQLException { 
        session.saveOrUpdate(t); //这里借助spring给提供的session来完成hibernate操作 
         return  null
      } 
    }); 
  } 
}
配置文件:
<beans> 
  <!-- 配置数据源信息 --> 
  <bean id= "dataSource" 
     class= "org.apache.commons.dbcp.BasicDataSource"
    <property name= "driverClassName"
      <value>oracle.jdbc.driver.OracleDriver</value> 
    </property> 
    <property name= "url"
      <value>jdbc:oracle:thin:@localhost:1521:orcl10</value> 
    </property> 
    <property name= "username"
      <value>scott</value> 
    </property> 
    <property name= "password"
      <value>yf123</value> 
    </property> 
  </bean> 
  <!-- 配置Hibernate的SessionFactory信息 --> 
  <bean id= "sessionFactory" 
     class= "org.springframework.orm.hibernate3.LocalSessionFactoryBean"
    <property name= "dataSource"
      <ref local= "dataSource" /> 
    </property> 
    <property name= "hibernateProperties"
      <props> 
        <prop key= "hibernate.show_sql"> true</prop> 
        <prop key= "hibernate.format_sql"> true</prop> 
        <prop key= "hibernate.dialect"
          org.hibernate.dialect.Oracle9Dialect 
        </prop> 
      </props> 
    </property> 
    <property name= "mappingResources"
      <list> 
        <value> 
          com/cernet/spring/hibernate/entity/Teacher.hbm.xml 
        </value> 
      </list> 
    </property> 
  </bean> 
  <!-- 配置spring给提供的Hibernate模板类 --> 
  <bean id= "template" 
     class= "org.springframework.orm.hibernate3.HibernateTemplate"
    <property name= "sessionFactory"
      <ref bean= "sessionFactory" /> 
    </property> 
  </bean> 
  <bean id= "dao" 
     class= "com.cernet.spring.hibernate.dao.TeacherDaoImpl"
    <property name= "template"
      <ref bean= "template" /> 
    </property> 
  </bean> 
</beans>


     本文转自NightWolves 51CTO博客,原文链接: http://blog.51cto.com/yangfei520/251236 ,如需转载请自行联系原作者


相关文章
|
3月前
|
Java Maven Docker
gitlab-ci 集成 k3s 部署spring boot 应用
gitlab-ci 集成 k3s 部署spring boot 应用
|
5天前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
33 8
|
5月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
定时任务在企业应用中至关重要,常用于异步数据处理、自动化运维等场景。在单体应用中,利用Java的`java.util.Timer`或Spring的`@Scheduled`即可轻松实现。然而,进入微服务架构后,任务可能因多节点并发执行而重复。Spring Cloud Alibaba为此发布了Scheduling模块,提供轻量级、高可用的分布式定时任务解决方案,支持防重复执行、分片运行等功能,并可通过`spring-cloud-starter-alibaba-schedulerx`快速集成。用户可选择基于阿里云SchedulerX托管服务或采用本地开源方案(如ShedLock)
159 1
|
1月前
|
XML Java API
Spring Boot集成MinIO
本文介绍了如何在Spring Boot项目中集成MinIO,一个高性能的分布式对象存储服务。主要步骤包括:引入MinIO依赖、配置MinIO属性、创建MinIO配置类和服务类、使用服务类实现文件上传和下载功能,以及运行应用进行测试。通过这些步骤,可以轻松地在项目中使用MinIO的对象存储功能。
|
2月前
|
消息中间件 Java Kafka
什么是Apache Kafka?如何将其与Spring Boot集成?
什么是Apache Kafka?如何将其与Spring Boot集成?
80 5
|
2月前
|
消息中间件 Java Kafka
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
64 1
|
2月前
|
消息中间件 监控 Java
您是否已集成 Spring Boot 与 ActiveMQ?
您是否已集成 Spring Boot 与 ActiveMQ?
62 0
|
3月前
|
前端开发 Java 程序员
springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j
这篇文章是关于如何在Spring Boot项目中集成Swagger2和Knife4j来生成和美化API接口文档的详细教程。
345 1
|
3月前
|
存储 前端开发 Java
Spring Boot 集成 MinIO 与 KKFile 实现文件预览功能
本文详细介绍如何在Spring Boot项目中集成MinIO对象存储系统与KKFileView文件预览工具,实现文件上传及在线预览功能。首先搭建MinIO服务器,并在Spring Boot中配置MinIO SDK进行文件管理;接着通过KKFileView提供文件预览服务,最终实现文档管理系统的高效文件处理能力。
493 11
|
3月前
|
Java Spring
springboot 学习十一:Spring Boot 优雅的集成 Lombok
这篇文章是关于如何在Spring Boot项目中集成Lombok,以简化JavaBean的编写,避免冗余代码,并提供了相关的配置步骤和常用注解的介绍。
149 0