您的位置:首页 > 其它

Hibernate Dao的使用 Hibernate学习笔记(二)

2009-06-18 21:52 519 查看
/**
* ------------Hibernate 官方推荐的写法,未作任何改动,需要熟记并融汇贯通---------------
*
* 主要是通过一个ThreadLocal实现当前线程共用一个Session
*
* 并不是单态的,可以自己改成单态
*/

package dao;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
public static final SessionFactory sessionFactory;
// sessionFactory的作用是提供session
static {
try {
sessionFactory = new Configuration().configure()
.buildSessionFactory();// 构造一个sessionFactory,通过读取所有的hibernate配置文件
} catch (Throwable ex) {
throw new ExceptionInInitializerError(ex);
}
}

// ThreadLocal 本地线程 , 指当前线程的一个本地副本
public static final ThreadLocal<Session> session = new ThreadLocal<Session>();

// 本方法保证当前线程中只有一个Session的实例,并且获得它
// 可以把Session理解成数据库连接 java.sql.Connection
public static Session currentSession() throws HibernateException {
Session s = session.get();// 从当前线程里面的到hibernate的Session
if (s == null) {// 如果没得到
s = sessionFactory.openSession();// 新建一个
session.set(s);// 并且把它放到当前线程中去
}
return s;
}

// 关闭当前线程中的那一个Session
public static void closeSession() throws HibernateException {
Session s = session.get();
if (s != null) {
s.close();
}
session.set(null);
}
}

下面的是对用户持久类的封装,不知道我这样理解对不对?上面的是参考的官网推荐的写法。

package dao;

import domain.User;

public class UserDao extends HibernateDao<User>
{
public UserDao()
{
super(User.class);
}

}

使用dao更好的对数据库的操作进行了封装。对数据库操作更面向对象。但是不管是使用哪种方法都是有利有弊,还不能更彻底的做到封装,彻底的面向对象。

package app;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

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

import dao.HibernateUtil;
import dao.UserDao;
import domain.Product;
import domain.ProductType;
import domain.Role;
import domain.User;

public class Test
{

public static SessionFactory sessionFactory;

public static void main(String[] args)
{
sessionFactory = HibernateUtil.sessionFactory;

getPage();
}

static void getPage()
{
UserDao dao = new UserDao();
List<User> list = dao.getAllPaged(2, 2);
for(User u :list)
{
System.out.println(u.getName());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: