Query基本用法

先创建一个单例模式

package Dao;

import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
//SessionFactory单态模式
public class HibernateUtil {
	private static Configuration cfg = null;
	private static SessionFactory sf = null;
	//静态代码块
	static {  //在类加载的时候只能执行一次
		try {
			cfg = new Configuration().configure();
			sf = cfg.buildSessionFactory();
		} catch (HibernateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	//获得session工厂
	public static SessionFactory getSessionFactory() {
		return sf;
	}
	//关闭工厂
	public static void closeSessionFactory() {
		sf.close();
	}
	
}


更改ManageUser
sf = HibernateUtil.getSessionFactory();

Session

保证在一个线程中仅存在一个Session实例
1.getCurrentSession (Hibernate 3+);getCurrentSession方法,保证了线程中Session的唯一性;并且可以自动关闭session实例
调用代码:Session session = sessionFactory.getCurrentSession();
使用getCurrentSession需要在hibernate.cfg.xml配置文件中加入
<property name="hibernate.current_session_context_class">thread</property>

Transaction

更改ManageUser
Transaction tx = session.beginTransaction();

Query

1.概述:
Query接口允许你在数据库上执行查询并控制查询如何执行。查询语句使用HQL或者本地数据库的SQL方言编写。
2.调用:Query query = session.createQuery(“from User”);
3.单元测试
保存

	//单独测试方法————保存用户对象
	public void testSaveUser() {
		Configuration cfg = null;
		SessionFactory sf = null;
		Session session = null;
		Transaction ts = null;
		//创建user
		User u = new User();
		u.setName("李四");
		u.setGender("女");
		u.setAge(21);
		u.setBirthday(Date.valueOf("2001-1-1"));
		try {
//			//创建Configuration对象
//			cfg = new Configuration().configure();
//			//创建Session工厂
//			sf = cfg.buildSessionFactory();
			//使用单例模式创建Configuration对象和Session工厂
			sf = HibernateUtil.getSessionFactory();
			//创建Session
			//session = sf.openSession();
			//保证每个读写线程有唯一的session实例
			session = sf.getCurrentSession();
			//创建事务
			ts = session.beginTransaction();
			//持久化操作:session保存对象
			session.save(u);
			//提交事务
			ts.commit();
		} catch (HibernateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			if(ts != null) {
				ts.rollback();
			}
		}finally {
			//关闭session
			//session.close();
			//sf.close();
		}	
	}

查询

//单独测试方法————保存用户对象
	public void testQueryUser() {
		Configuration cfg = null;
		SessionFactory sf = null;
		Session session = null;
		Transaction ts = null;
		try {
			//使用单例模式创建Configuration对象和Session工厂
			sf = HibernateUtil.getSessionFactory();
			//保证每个读写线程有唯一的session实例
			session = sf.getCurrentSession();
			//创建事务
			ts = session.beginTransaction();
			Query query = session.createQuery("from User");
			List<User> users= query.list();
			for(int i=0; i<users.size(); i++) {
				User u = users.get(i);
				System.out.println(u.getName() + " " + u.getAge());
			}
			
			//提交事务
			ts.commit();
		} catch (HibernateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			if(ts != null) {
				ts.rollback();
			}
		}finally {
			//关闭session
			//session.close();
			//sf.close();
		}	
	}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值