标签:
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的硬编码,但需要注意其返回的类型转换
标签:
原文地址:http://my.oschina.net/u/1582029/blog/530484