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 BI
将 Spring 微服务与 BI 工具集成:最佳实践
本文探讨了 Spring 微服务与商业智能(BI)工具集成的潜力与实践。随着微服务架构和数据分析需求的增长,Spring Boot 和 Spring Cloud 提供了构建可扩展、弹性服务的框架,而 BI 工具则增强了数据可视化与实时分析能力。文章介绍了 Spring 微服务的核心概念、BI 工具在企业中的作用,并深入分析了两者集成带来的优势,如实时数据处理、个性化报告、数据聚合与安全保障。同时,文中还总结了集成过程中的最佳实践,包括事件驱动架构、集中配置管理、数据安全控制、模块化设计与持续优化策略,旨在帮助企业构建高效、智能的数据驱动系统。
195 1
将 Spring 微服务与 BI 工具集成:最佳实践
|
5月前
|
XML 人工智能 Java
Spring Boot集成Aviator实现参数校验
Aviator是一个高性能、轻量级的Java表达式求值引擎,适用于动态表达式计算。其特点包括支持多种运算符、函数调用、正则匹配、自动类型转换及嵌套变量访问,性能优异且依赖小。适用于规则引擎、公式计算和动态脚本控制等场景。本文介绍了如何结合Aviator与AOP实现参数校验,并附有代码示例和仓库链接。
309 0
|
5月前
|
安全 Java 数据库
第16课:Spring Boot中集成 Shiro
第16课:Spring Boot中集成 Shiro
751 0
|
5月前
|
消息中间件 存储 Java
第15课: Spring Boot中集成ActiveMQ
第15课: Spring Boot中集成ActiveMQ
467 0
|
6月前
|
人工智能 Java 测试技术
Spring Boot 集成 JUnit 单元测试
本文介绍了在Spring Boot中使用JUnit 5进行单元测试的常用方法与技巧,包括添加依赖、编写测试类、使用@SpringBootTest参数、自动装配测试模块(如JSON、MVC、WebFlux、JDBC等),以及@MockBean和@SpyBean的应用。内容实用,适合Java开发者参考学习。
633 0
|
9月前
|
安全 Java Apache
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 身份和权限认证
本文介绍了 Apache Shiro 的身份认证与权限认证机制。在身份认证部分,分析了 Shiro 的认证流程,包括应用程序调用 `Subject.login(token)` 方法、SecurityManager 接管认证以及通过 Realm 进行具体的安全验证。权限认证部分阐述了权限(permission)、角色(role)和用户(user)三者的关系,其中用户可拥有多个角色,角色则对应不同的权限组合,例如普通用户仅能查看或添加信息,而管理员可执行所有操作。
454 0
|
9月前
|
安全 Java 数据安全/隐私保护
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 三大核心组件
本课程介绍如何在Spring Boot中集成Shiro框架,主要讲解Shiro的认证与授权功能。Shiro是一个简单易用的Java安全框架,用于认证、授权、加密和会话管理等。其核心组件包括Subject(认证主体)、SecurityManager(安全管理员)和Realm(域)。Subject负责身份认证,包含Principals(身份)和Credentials(凭证);SecurityManager是架构核心,协调内部组件运作;Realm则是连接Shiro与应用数据的桥梁,用于访问用户账户及权限信息。通过学习,您将掌握Shiro的基本原理及其在项目中的应用。
335 0
|
3月前
|
监控 Cloud Native Java
Spring Integration 企业集成模式技术详解与实践指南
本文档全面介绍 Spring Integration 框架的核心概念、架构设计和实际应用。作为 Spring 生态系统中的企业集成解决方案,Spring Integration 基于著名的 Enterprise Integration Patterns(EIP)提供了轻量级的消息驱动架构。本文将深入探讨其消息通道、端点、过滤器、转换器等核心组件,以及如何构建可靠的企业集成解决方案。
257 0
|
5月前
|
Java 关系型数据库 数据库连接
Spring Boot项目集成MyBatis Plus操作PostgreSQL全解析
集成 Spring Boot、PostgreSQL 和 MyBatis Plus 的步骤与 MyBatis 类似,只不过在 MyBatis Plus 中提供了更多的便利功能,如自动生成 SQL、分页查询、Wrapper 查询等。
422 3