http://adoze.bokee.com/viewdiary.25672393.html
| Hibernate的所有的操作都是通过Session完成的. 基本步骤如下: 1:通过配置文件得到SessionFactory: SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory(); 2:通过SessionFactory 得到一个Session Session session=sessionFactory.openSession(); 3:通过session进行插入,删除,修改以及查询. 插入例子:(1)声明一个事务;(2)Session执行save()操作;(3)事务提交;(4)关闭Session,可选. public void update(Person p){ Transaction tran=session.beginTransaction(); session.update(p); tran.commit(); // session.close(); } 删除例子(主键删除,推荐使用):(1) 声明删除的SQl语句;(2)创建session的Query对象;(3)设置Query对象的参数;(4)执行Query的executeUpdate()操作;(5)Session事务提交 public void delete(int id){ String hql="delete Person as p where p.id=?"; Query query=session.createQuery(hql); query.setInteger(0,id); query.executeUpdate(); session.beginTransaction().commit(); } 删除例子(对象删除):(1)声明一个事务;(2)Session执行delete()操作;(3)事务提交;(4)关闭Session,可选. Transaction tran = session.beginTransaction(); session.delete(p); session.close(); 查询例子:(跟删除差不多) 查询语句不需要事务提交 (1) 声明删除的SQl语句;(2)创建session的Query对象;(3)设置Query对象的参数; public Persion queryById(int id){ String hql="from Person as p where p.id=?"; Query query=session.createQuery(); List rsList=query.list(); iterator it=rsList.iterator(); Person person=null; while(it.haseNext()){ person=(Person)it.next(); } return person; } 这两种情况都是允许的,hibernate都会发送一条delete语句给数据库。 delete执行之后,如果调用了session.load(), 又可以分为两种情况: 2)在session.flush()之后,如: tx.beginTransaction(); delete执行之后,如果调用了session.save(obj): delete执行之后,如果对obj对象属性的修改,tx.commit()时不会进行dirtyChecking。 |
=====
public Collection findBySQL(String sql){
Session session = null;
Transaction tran = null;
Collection list = null;
try {
session = sessionFactory.openSession();
tran = session.beginTransaction();
SQLQuery sq = session.createSQLQuery(sql);
sq.addEntity(Student.class);
list = sq.list();
tran.commit();
} catch (HibernateException e) {
e.printStackTrace();
tran.rollback();
}finally{
if(session!=null)
session.close();
}
return list;
}
直接用SqlQuery好像不能直接执行 增 删 改 操作,不过,我找了一下,下面的方法可以的。
trans = session.beginTransaction();
Connection conn = session.connection();
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.executeUpdate();
stmt.execute();
trans.commit();