Chinaunix首页 | 论坛 | 博客
  • 博客访问: 434476
  • 博文数量: 161
  • 博客积分: 5005
  • 博客等级: 上校
  • 技术积分: 1090
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-20 16:38
文章分类

全部博文(161)

文章存档

2011年(21)

2010年(33)

2009年(89)

2008年(18)

我的朋友

分类: Java

2009-03-22 22:33:43

Hibernate 提供有自己的事务管理实现,然而,在使用Spring整合Hibernate时,建议将事务交由Spring来负责,可以使用编程式的事务管理。

1.User.java

package cn.com.boyang;

public class User {
    private Integer id;
    private String name;
    private Integer age;
   
    public Integer getId() {
        return id;
    }
   
    public void setId(Integer id) {
        this.id = id;
    }
   
    public String getName() {
        return name;
    }
   
    public void setName(String name) {
        this.name = name;
    }
   
    public Integer getAge() {
        return age;
    }
   
    public void setAge(Integer age) {
        this.age = age;
    }
}

2.IUserDAO.java

package cn.com.boyang;

public interface IUserDAO {
    public void insert(User user);
    public User find(Integer id);
}

3.UserDAO.java

package cn.com.boyang;

import org.hibernate.SessionFactory;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.transaction.support.TransactionTemplate;
import org.springframework.orm.hibernate3.HibernateTransactionManager;

public class UserDAO implements IUserDAO {
    private TransactionTemplate transactionTemplate;
    private HibernateTemplate hibernateTemplate;

    public void setSessionFactory(
            SessionFactory sessionFactory) {
        this.transactionTemplate =
            new TransactionTemplate(
                    new HibernateTransactionManager(
                            sessionFactory));
        this.hibernateTemplate = new HibernateTemplate(sessionFactory);
    }
   
    public void insert(User user) {
        final User userData = user;
       
        transactionTemplate.setPropagationBehavior(
                TransactionDefinition.PROPAGATION_REQUIRED);
       
        transactionTemplate.execute(
          new TransactionCallbackWithoutResult() {
                protected void doInTransactionWithoutResult(
                        TransactionStatus status) {
                    try {
                        hibernateTemplate.save(userData);
                    }
                    catch(DataAccessException e) {
                        e.printStackTrace();
                        status.setRollbackOnly();
                    }
                }
            });
    }

    public User find(Integer id) {
        User user =
            (User) hibernateTemplate.get(User.class, id);
       
        return user;
    }
}

4.SpringHibernateDemo.java

package cn.com.boyang;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class SpringHibernateDemo {
    public static void main(String[] args) {
        ApplicationContext context =
            new FileSystemXmlApplicationContext(
                    "src/beans-config.xml");
       
        // 建立DAO物件
        IUserDAO userDAO = (IUserDAO) context.getBean("userDAO");
       
        User user = new User();
        user.setName("caterpillar");
        user.setAge(new Integer(30));
       
        userDAO.insert(user);
       
        user = userDAO.find(new Integer(1));
       
        System.out.println("name: " + user.getName());
    }
}

5.User.hbm.xml


    PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "">

               table="user">

       
           
       

       

       

   

6.beans-config.xml


"">

              class="org.springframework.jdbc.datasource.DriverManagerDataSource">
       
            com.mysql.jdbc.Driver
       

       
            jdbc:mysql://localhost:3306/dbsourcedemo
       

       
            root
       

       
            12345678
       

   

   
              class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
          destroy-method="close">
       
           
       

       
           
                cn/com/boyang/User.hbm.xml
           

       

       
           
               
                    org.hibernate.dialect.MySQLDialect
               

           

       

   


   
       
           
       

   

7.加载包文件。

spring-beans.jar spring-context.jar spring-core.jar spring-dao.jar spring-jdbc.jar spring-hibernate3.jar Hibernate 3.1 Core Libraries mysql-connector-java-5.0.8-bin.jar

8.数据库表结构定义。

create database dbsourcedemo;
use dbsourcedemo;
create table user(
id int(11) not null auto_increment primary key,
name varchar(100) not null default '',
age int
);

阅读(845) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~