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());
}
}
* ------------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());
}
}
相关文章推荐
- Hibernate Dao的使用 Hibernate学习笔记(二)
- 【Hibernate学习笔记-5】@Formula注解的使用
- 【Hibernate学习笔记-5.1】使用@Transient修饰不想持久保存的属性
- 【Hibernate学习笔记-5.2】使用@Temporal修饰日期类型的属性
- hibernate学习笔记12--Hibernate中使用的集合类型
- Hibernate学习笔记 -- day12 使用JPA实现综合案例
- JavaWeb学习之HibernateDaoSupport使用
- SpringMVC学习笔记六:使用 hibernate-validator注解式数据校验
- web学习笔记25-Hibernate基本配置使用
- Java学习笔记之使用反射+泛型构建通用DAO
- Hibernate 集合属性List 的使用----Hibernate 学习笔记总结(一)
- Hibernate学习笔记之----Hibernate基本使用
- {传智播客} (学习笔记)--hibernate的使用和配置
- Spring学习笔记-HibernateTemplate和HibernateDaoSupport
- Hibernate过滤器的使用(学习笔记)
- Hibernate 集合属性List 的使用----Hibernate 学习笔记总结(一)
- Hibernate学习笔记--使用ThreadLocal
- Hibernate学习笔记:使用native sql查询
- JavaWeb学习笔记-mybatis-07-dao开发使用(原始dao方法)
- Hibernate学习之 -- 使用Middlegen-Hibernate-r5创建oracle10g的table的hibernate映射文件,Hibernate学习笔记三 ---持久化类和关系数据