码迷,mamicode.com
首页 > 编程语言 > 详细

Java Web(3)Hibernate 的增删改查

时间:2015-11-15 13:37:38      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:

1. 在能可以对hibernate 初始化后,就可以通过SessionFactory来获取一个Session来对Object来操作,不用再进行编写SQL语句来通过jdbc的dao来对数据库来操作。例如:

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Demo{
    private static String DBURL="jdbc:mysql://localhost:3306/test";
    private static String DBUSER="root";	
    private static String DBPASSWORD="123456";	
    private static String DBDRIVER="org.gjt.mm.mysql.Driver";	
    private Connection conn=null;	
    public Demo(){    
        try{			
            Class.forName(DBDRIVER);			
            this.conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);		
        }catch(Exception e){			
            e.printStackTrace();		
        }	
    }
    public static void main(String args[]){
        String sql = "select * from user ;";
        PreparedStatement pst = conn.prepareStatement(sql);
        ResultSet re = pstat.executeQuery();
    }
}

使用JDBC来操作数据库,无非就是通过数据库的url和数据库的用户密码,加上数据库对应的JDBC驱动获取一个Connection连接来连接到数据库,然后再通过Connection来获取一个PreparedStatement,通过PreparedStatement来获取一个ResultSet结果集

2. 如何使用Hibernate的话,就是通过一个工具类,来把SessionFactory封装成单例模式,然后可以通过这个工具类获取对SessionFactory的引用来获取Session.

import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
public class HiberanteUtil {
    private static SessionFactory factory;
    static{
        try{
             Configuration cfg  = new Configuration().configure();
             StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
                                              .applySettings(cfg.getProperties()).build();
             factory = cfg.buildSessionFactory(registry);
        }catch (Throwable ex) { 
             System.err.println("Failed to create sessionFactory object." + ex);
             throw new ExceptionInInitializerError(ex); 
      }
    }
    public SessionFactory getSessionFactory( ){
        return this.factory;
    }
}

3.编写一个DAO的操作类

package cn.tian.dao;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import cn.tian.vo.User;

public class UserDaoImpl implements UserDao{
	private SessionFactory factory;
	
	public RoleDaoImpl(SessionFactory sessionFactory){
		this.factory = sessionFactory;
	}
	/*
	数据库添加一行记录
	*/
	@Override
	public Serializable insert(User user) {
		// TODO Auto-generated method stub
		//获取Session
		Session session = factory.openSession();
		//Hiberante事务管理
		 Transaction tx = null;
		 Serializable serializable = null;
		 try {
		     //开启一个新的事务
		     tx = session.beginTransaction();
		     //将对象变成持久状态,相当对insert into 操作
		     serializable = session.save(user);
		     //事务提交
		     tx.commit();
		 }
		 catch (Exception e) {
		     if (tx!=null) tx.rollback();
		     log.debug("UserDao: can‘t insert "+user);
		 }
		 finally {
		     //关闭session会话,释放系统资源
		     session.close();		     
		 }
		 return serializable;
	}
        //更新操作
	@Override
	public Role update(User user) {
		// TODO Auto-generated method stub
		Session session = factory.openSession();
		Transaction tx =  null;
		try{
			tx = session.beginTransaction();
			session.update(user);
			tx.commit();
		}catch(Exception e){
			if(tx!=null)
				tx.rollback();
			log.debug("UserDao: can‘t update "+user);			
		}
		finally{
			session.close();
		}
		return user;
	}
        //删除操作
	@Override
	public Role delete(User user) {
		// TODO Auto-generated method stub
		Session session = factory.openSession();
		Transaction tx = null;
		try{
			tx = session.beginTransaction();
			session.delete(user);
			tx.commit();
		}
		catch(Exception e){
			if(tx!=null)
				tx.rollback();
			log.debug("UserDao: can‘t delete "+user);
		}
		finally{
			session.close();
		}
		return user;
	}
        //查询,获取全部记录
	@Override
	public List<User> getList() {
		// TODO Auto-generated method stub
		String hql = "from User u";
		List<User> list = null;
		Session session = factory.openSession();
		Transaction tx = null;
		try{
			tx = session.beginTransaction();
			Query query = session.createQuery(hql);
			//在这里需要特别注意list的泛型转换,因为hibernate返回的都是Object类型的,需要转换为对应的Class
			list = query.list();
			tx.commit();
			
		}catch(Exception e){
			if(tx!=null)
				tx.rollback();
			log.debug("UserDao: can‘t select from user");
		}finally{
			session.close();
		}
		return list;
	}
        //只查询一条记录
	@Override
	public User get(Long id) {
		// TODO Auto-generated method stub
		Session session = factory.openSession();
		User user = null;
		try{
		        //因为返回的是Object,所以强制转换为对应的Class
			user = (Role)session.get(User.class,id);			
		}catch(Exception e ){
			log.debug("UserDao: can‘t find "+id);
		}
		finally{
			session.close();
		}
		return user;
	}

}

与之对比,在Hibernate对数据库的添加删除修改的时候,比JDBC少了SQL的硬编码,但需要注意其返回的类型转换

Java Web(3)Hibernate 的增删改查

标签:

原文地址:http://my.oschina.net/u/1582029/blog/530484

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!