美文网首页Java技术文章
HibernateDaoSupport和HibernateTem

HibernateDaoSupport和HibernateTem

作者: 月明飞 | 来源:发表于2016-03-01 17:40 被阅读0次
    1. 在Spring中使用Hibernate时,一般使用HibernateDaoSupport或HibernateTemplate获得HibernateTemplate对象对数据库进行CURD的操作。下面分别用这两种方式做一个例子。
    2. 在DAO中注入HibernateDaoSupport类的方式。
    • spring配置文件代码:
      <context:annotation-config/>//开启注解
      <context:component-scan base-package="dao,service"/>//扫描注解的包

       //使用commons-dbcp2配置一个数据源
       <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
         <property name="driverClassName" value="com.mysql.jdbc.Driver"/>        
         <property name="url" value="jdbc:mysql:///hibernate"/>
         <property name="username" value="root"/>
         <property name="password" value="java"/>
       </bean>
       //配置Hibernate的sessionFactory
       <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
         <property name="hibernateProperties">
           <props>
               //配置Hibernate
               <prop key="hibernate.show_sql">true</prop>
               <prop key="hibernate.farmat_sql">true</prop>
               <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
               <prop key="hibernate.hbm2ddl.auto">create</prop>
           </props>
         </property>
         <property name="annotatedClasses" value="model.Student"/>//注解的model类
         <property name="dataSource" ref="dataSource"/>
       </bean>
       //需要注入的到DAO中的HibernateTemplate
       <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
          <property name="sessionFactory" ref="sessionFactory"/
       </bean>
      
       <tx:annotation-driven/>//开启事务注解
       <!--把sessionFactory注入到HibernateTransactionManager中、,Hibernate在进行CUD时需要开启事务,但是我们又不直
       接使用Hibernate的session,所以我们需要把Hibernate中的事务交给spring管理 -->
       <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
         <property name="sessionFactory" ref="sessionFactory"/>
       </bean>
      
    • DAO继承HibernateDaoSupport,java代码:
      @Repository
      public class StudentDao {
      @Autowired
      private HibernateTemplate hibernateTemplate;

          public void save(Student student){
            hibernateTemplate.save(student);
           }
        }
      
    • service层代码:
      @Transactional(readOnly=false)
      @Service
      public class StudentService {
      @Autowired
      private StudentDao studentDao;
      public void save(Student student){
      studentDao.save(student);
      }
      }

    • 测试类代码:
      public class Application {
      public static void main(String[] args) {
      ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-hibernate.xml");
      StudentService service = context.getBean(StudentService.class);
      service.save(new Student("月明飞", "nan"));
      }
      }

    1. DAO继承HibernateDaoSupport类的方式,和上面几乎相同,我们只需要在DAO的bean中配置一个SessionFactory,HibernateDaoSupport可以自动为HibernateTemplate赋值,在DAO中使用this.getHibernateTemplate()方法返回一个HibernateTemplate对象。这种方式的缺点就是DAO不能再继承其他的类。

    2. 以上的方式貌似是完美的,可是Spring文档中的Demo却是使用在DAO中注入SessionFactory的方式----sessionFactory.getCurrentSession()返回一个session对象,通过这个对象对数据库进行CURD操作。

    3. model类代码:
      @Entity
      public class Student {
      @Id
      @GeneratedValue(strategy=GenerationType.IDENTITY)
      public int id;

         @Column(unique=true)
         public String name;
         public String sex;
      
         public Student(){}
      
         public Student(String name, String sex) {
            super();
            this.name = name;
            this.sex = sex;
         }
      
        public int getId() {
           return id;
        }
        public void setId(int id) {
           this.id = id;
        }
        public String getName() {
           return name;
        }
        public void setName(String name) {
           this.name = name;
        }
        public String getSex() {
           return sex;
        }
        public void setSex(String sex) {
           this.sex = sex;
        }
       @Override
       public String toString() {
           return "Student [id=" + id + ", name=" + name + ", sex=" + sex + "]";
       }
      }

    相关文章

      网友评论

        本文标题:HibernateDaoSupport和HibernateTem

        本文链接:https://www.haomeiwen.com/subject/vtigkttx.html