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

/**
 * ------------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());
  }
 }

 

 

posted @ 2009-06-18 21:52  java程序代码  阅读(157)  评论(0编辑  收藏  举报