1.编写SessionUtil,用来方便的获得SessionFactory和Session
每个SessionFactory根据配置文件中配置的数据库信息来连接数据库,因而会耗费大量资源,所以全局只需要一个即可。可以使用spring来实现,也可以使用单例Util类来保证全局只有一个SessionFactory
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public final class SessionUtil {
private static SessionFactory sessionFactory = null;
static
{
Configuration cfg = new Configuration();
sessionFactory = cfg.configure().buildSessionFactory();
}
private SessionUtil(){}
public static SessionFactory getSessionFactory()
{
return sessionFactory;
}
public static Session getSession()
{
return sessionFactory.openSession();
}
}
2.使用id来实现增删改查
2.1通用模板
因为获取session、打开事务、异常处理等操作是完全相同的,所以可以使用同一个模板来进行操作。
<span style="white-space:pre"> </span>public void xxx()
{
Session session = SessionUtil.getSession();
Transaction tx = session.beginTransaction();
try
{
//具体执行的操作
tx.commit();
}
<pre name="code" class="java"><span style="white-space:pre"> </span>//如果出错需要对事务进行回滚
catch(RuntimeException e){tx.rollback();throw e;}finally{session.close();}}
2.2插入操作
<span style="white-space:pre"> </span>public void save(User user)
{
Session session = SessionUtil.getSession();
Transaction tx = session.beginTransaction();
try
{
session.save(user);
tx.commit();
}
catch(RuntimeException e)
{
tx.rollback();
throw e;
}
finally
{
session.close();
}
}
2.3更新操作
<span style="white-space:pre"> </span>public void update(User user)
{
Session session = SessionUtil.getSession();
Transaction tx = session.beginTransaction();
try
{
session.update(user);
tx.commit();
}
catch(RuntimeException e)
{
tx.rollback();
throw e;
}
finally
{
session.close();
}
}
2.4查询操作
public User queryById(int id)
{
Session session = SessionUtil.getSession();
// Transaction tx = session.beginTransaction();
try
{
User user = (User) session.get(User.class, id);
// tx.commit();
return user;
}
catch(RuntimeException e)
{
// tx.rollback();
throw e;
}
finally
{
session.close();
}
}
2.5删除操作
<span style="white-space:pre"> </span>public void delete(int id)
{
Session session = SessionUtil.getSession();
Transaction tx = session.beginTransaction();
try
{
User user = queryById(id);
session.delete(user);
tx.commit();
}
catch(RuntimeException e)
{
tx.rollback();
throw e;
}
finally
{
session.close();
}
}
因为Hibernate的删除只能根据数据库里存在的pojo来删除,所以,需要先根据id查询到该对象在进行删除。
2.6说明
1> 优点:对所有类,所有表均可用以上方法进行操作
2> 缺点:只能通过id来增删改查