zoukankan      html  css  js  c++  java
  • sping整合hibernate之二:dao层开发

     在上一篇日志中将hibernate的会话工厂sessionFactory注入到了spring的容器中,但这样还不够,因为hibernate的增删改查是要使用事务机制的, 所以还要在spring中配置事务管理,将hibernate管理事物的权利交给spring,这样,在代码中就无需手动管理事务了。
    1.首先在spring中配置一个hibernate的jdbc
    //applicationContext.xml(spring配置文件) 当然,在此之前要将实体类映射文件配置在sessionFactory
    <!-- 配置hibernateTemplate 相当于jdbc  -->  
    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate">
        <property name="sessionFactory"   ref="sessionFactory"></property> 
    <!-- 注入sessionFactory -->  </bean>
    2.配置事务管理
    <!-- spring事务管理 -->  
    <bean name="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">     
      <property name="dataSource" ref="dataSource" />     
      <property name="sessionFactory" ref="sessionFactory" />  
    </bean>  
      <!-- 为增删改查的方法声明事务,我这里把事务放到dao上的,应该放在service比较好 -->
     <aop:config>   
      <aop:pointcut id="txServices" expression="execution(* com.scitc.ssh.dao..*.*(..))"/>   
      <aop:advisor advice-ref="txAdvice" pointcut-ref="txServices"/>
     </aop:config>
     <tx:advice id="txAdvice" transaction-manager="transactionManager">   <tx:attributes>    <tx:method name="add*" propagation="REQUIRED"/>    <tx:method name="insert*" propagation="REQUIRED"/>    <tx:method name="update*" propagation="REQUIRED"/>    <tx:method name="delete*" propagation="REQUIRED"/>    <tx:method name="create*" propagation="REQUIRED"/>    <tx:method name="find*" propagation="REQUIRED"/>   </tx:attributes>  </tx:advice>
    3.注入dao层的类  
    <!-- 注入dao层需要用hibernateTemplate的类 -->   
    <bean id="BaseDao" class="com.scitc.ssh.dao.BaseDao">    
    <!-- 为此类注入一个属性,这样在类中就可以获取到这个对象 -->      
    <!-- 功能:HibernateTemplate hibernateTemplate = new HibernateTemplate()  -->    
    <property name="hibernateTemplate" ref="hibernateTemplate"></property>     
    </bean>
    4.将事务和数据源,sessionFactory,jdbc,dao层注入这些弄好了之后,就可以写dao层了
     

    完整的sping配置文件applicationContext.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:aop="http://www.springframework.org/schema/aop"
     4     xmlns:context="http://www.springframework.org/schema/context"
     5     xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx"
     6     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
     7        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
     8        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
     9        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
    10        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
    11 
    12     
    13     <!-- 此对象用来读取数据库配置文件jdbc.properties
    14     <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
    15           <property name="location">  
    16               <value>/WEB-INF/jdbc.properties</value>
    17           </property>  
    18     </bean> -->
    19     
    20     <!-- 配置数据源(这里是使用spring默认的数据源,后面会换成c3p0) -->
    21     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    22         <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
    23         <property name="url" value="jdbc:mysql://localhost:3306/ssh"></property>
    24         <property name="username" value="root"></property>
    25         <property name="password" value="123456"></property>
    26     </bean>
    27 
    28     <!-- 配置hibernate的会话工厂sessionFactory-->
    29     <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    30         <property name="dataSource" ref="dataSource"></property>  <!-- 数据源采用上面的 -->
    31         <property name="mappingResources">  <!-- 自动扫描model包下的实体类 -->
    32             <list>
    33                 <value>/com/scitc/ssh/model/User.hbm.xml</value>   
    34             </list>
    35         </property>
    36         <property name="hibernateProperties">
    37             <props>
    38                 <prop key="dialect">org.hibernate.dialect.MySQL5Dialect</prop>
    39                 <!--  <prop key="hibernate.current_session_context_class">thread</prop>-->
    40                 <prop key="hibernate.show_sql">true</prop>
    41                 <prop key="hibernate.format_sql">true</prop>
    42                 <prop key="hibernate.hbm2ddl.auto">update</prop>
    43             </props>
    44         </property>
    45     </bean>     
    46     
    47     <!-- 配置hibernateTemplate 相当于jdbc  -->
    48     <bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate">
    49         <property name="sessionFactory" ref="sessionFactory"></property>  <!-- 注入sessionFactory -->
    50     </bean>
    51     
    52     <!-- spring事务管理 -->
    53     <bean name="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">  
    54        <property name="dataSource" ref="dataSource" />  
    55        <property name="sessionFactory" ref="sessionFactory" />
    56     </bean>  
    57     
    58     <!-- 开启spring的注解 -->
    59     <context:annotation-config />  <!-- 可以不要这个,下面的扫描包可以自动开启注解 -->
    60     
    61     <!-- 自动扫描services层和dao层的注解 -->
    62     <context:component-scan base-package="com.scitc.ssh.services" />
    63     <context:component-scan base-package="com.scitc.ssh.services.impl" />
    64     <context:component-scan base-package="com.scitc.ssh.dao" />
    65     <context:component-scan base-package="com.scitc.ssh.dao.impl" />
    66     
    67     <!-- 声明事务 -->
    68     <aop:config>
    69         <aop:pointcut id="txServices" expression="execution(* com.scitc.ssh.dao..*.*(..))"/>
    70         <aop:advisor advice-ref="txAdvice" pointcut-ref="txServices"/>
    71     </aop:config>
    72     
    73     <tx:advice id="txAdvice" transaction-manager="transactionManager">
    74         <tx:attributes>
    75             <tx:method name="add*" propagation="REQUIRED"/>
    76             <tx:method name="insert*" propagation="REQUIRED"/>
    77             <tx:method name="update*" propagation="REQUIRED"/>
    78             <tx:method name="delete*" propagation="REQUIRED"/>
    79             <tx:method name="create*" propagation="REQUIRED"/>
    80             <tx:method name="find*" propagation="REQUIRED"/>
    81         </tx:attributes>
    82     </tx:advice>
    83     
    84     <!-- 注入dao层需要用hibernateTemplate的类 -->
    85     <bean id="BaseDao" class="com.scitc.ssh.dao.BaseDao">
    86         <!-- 为此类注入一个属性,这样在类中就可以获取到这个对象 -->
    87         <!-- 功能:HibernateTemplate hibernateTemplate = new HibernateTemplate()  -->
    88         <property name="hibernateTemplate" ref="hibernateTemplate"></property>  
    89     </bean>
    90   
    91 </beans>
     
     

    //数据访问层通用类basedao.java
     1 package com.scitc.ssh.dao;
     2 
     3 
     4 import java.util.List;
     5 
     6 import org.springframework.beans.factory.annotation.Autowired;
     7 import org.springframework.context.ApplicationContext;
     8 import org.springframework.context.support.ClassPathXmlApplicationContext;
     9 import org.springframework.orm.hibernate4.HibernateTemplate;
    10 
    11 
    12 import com.scitc.ssh.model.User;
    13 
    14 //数据访问层通用类
    15 public class BaseDao {
    16     
    17     //@Autowired可以自动获取spring创建的对象
    18     @Autowired private HibernateTemplate hibernateTemplate; //这里的属性名一定要和配置中的属性名一致
    19     
    20     //返回hibernateTemplate方法 
    21     public HibernateTemplate getHibernateTemplate(){
    22         return this.hibernateTemplate; 
    23     }
    24 
    25     public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
    26         this.hibernateTemplate = hibernateTemplate;
    27     }
    28     
    29     //添加
    30     public boolean add(Object entity){
    31         this.hibernateTemplate.save(entity);   //hibernateTemplate.save(entity)保存
    32         return true;
    33     }
    34     
    35     //删除
    36     public boolean delete(Object entity){
    37         this.hibernateTemplate.delete(entity);
    38         return true;
    39     }
    40     
    41     //查询全部
    42     @SuppressWarnings("unchecked")
    43     public List<Object> findAll(String queryString){
    44         return (List<Object>) this.hibernateTemplate.find(queryString);
    45         
    46     }
    47     
    48     //修改
    49     public boolean update(Object entity){
    50         this.hibernateTemplate.update(entity);
    51         return true;
    52         
    53     }
    54     
    55 //    //按参数查询
    56 //    public List<Object> findAll(String queryString, Object[] args){
    57 //        List<Object> list = new ArrayList<Object>();
    58 //        this.hibernateTemplate.find(queryString);
    59 //        return list;
    60 //    }
    61     
    62     public static void main(String[] args) {
    63         User user = new User();
    64         user.setU_id(1);
    65         user.setU_name("社会你海哥");
    66         //启动spring
    67         ApplicationContext applicationContexts = new ClassPathXmlApplicationContext("applicationContext.xml");
    68         //获取Ioc容器中的对象
    69         BaseDao baseDao = applicationContexts.getBean("BaseDao", BaseDao.class);
    70 //        baseDao.add(user);
    71         baseDao.update(user);
    72 //        User user2 = (User) baseDao.findAll("from User").get(0);
    73 //        baseDao.delete(user);
    74 //        System.out.println(user2.getU_name());
    75         
    76     }
    77     
    78 }

     
  • 相关阅读:
    【LeetCode】N数和
    用PHP写一个双向队列
    PHP的几种遍历方法
    thinkphp中dump()方法
    【转】PHP对象在内存中的分配
    【转】PHP的执行原理/执行流程
    从头到尾彻底解析哈希表算法
    【转】TCP通信的三次握手和四次撒手的详细流程(顿悟)
    springmvc中拦截器的定义和配置
    springmvc中的异常处理方法
  • 原文地址:https://www.cnblogs.com/liaohai/p/6419686.html
Copyright © 2011-2022 走看看