Hibernate的Query,SQLQuery,Criteria增删改查操作

Hibernate工具类:

package utils;

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

public class HibernateUtils {
	private static Configuration config;
	private static SessionFactory sessionFactory;
	
	static{
		config = new Configuration().configure();
		sessionFactory = config.buildSessionFactory();
	}
	
	public static Session openSession() {
		return sessionFactory.openSession();
	}

}

Hibernate的Query,SQLQuery,Criteria增删改查操作

package HibernateTest;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.junit.Test;

import utils.HibernateUtils;

public class Test2 {
	@Test
	public void test1() {
		// 使用hql完成查询所有操作
		Session session = HibernateUtils.openSession();
		Query query = session.createQuery("from Customer");// from后面是类名
		List<Customer> list = query.list();
		for (Customer customer : list) {
			System.out.println(customer.getName());
		}
		//System.out.println(list);
		session.close();
		
	}
	
	//插入数据
	@Test
	public void test3() {
		Session session = HibernateUtils.openSession();
		session.beginTransaction();
		for(int i = 0;i < 100;++i) {
			Customer c = new Customer();
			c.setId(i);
			c.setAddress("北京"+i);
			c.setName("张三");
			session.save(c);
		}
		session.getTransaction().commit();
		session.close();
	}
	
	//分页查询
	@Test
	public void test4() {
		Session session = HibernateUtils.openSession();
		session.beginTransaction();
		
		Query query = session.createQuery("from Customer");
		query.setFirstResult(10);
		query.setMaxResults(10);
		
		List<Customer> list = query.list();
		for (Customer customer : list) {
			System.out.println(customer.getAddress());
		}
		session.getTransaction().commit();
		session.close();
	}
	
	// 查询指定列信息
	@Test 
	public void test5() {
		Session session = HibernateUtils.openSession();
		session.beginTransaction();
		
		//方法一:这时我们得到的不在是Customer对象,而是Object[]
		//Query query = session.createQuery("select address,name from Customer");
		//List<Object> list = query.list();
		
		//方法二:使用hibernate中投影查询。我们只需要在Customer类中提供name与address做为参数的构造方法
		Query query = session.createQuery("select new Customer(name,address) from Customer");
		List<Customer> list = query.list();
		
		System.out.println(list);
		session.getTransaction().commit();
		session.close();
	}
	
	//条件查询
	@Test
	public void test6() {
		Session session = HibernateUtils.openSession();
		session.beginTransaction();
		
		//方法一
		//Query query = session.createQuery("from Customer where address = ?");
		//query.setParameter(0, "北京60");
		
		//方法二
		Query query = session.createQuery("from Customer where address = :myaddress");
		query.setParameter("myaddress","北京82");
		
		List<Customer> list = query.list();
		for (Customer customer : list) {
			System.out.println(customer.getId()+"~"+customer.getAddress());
		}
		System.out.println(list);

		//如果结果唯一
//		Customer c = (Customer) query.uniqueResult();
//		System.out.println(c.getAddress());
		
		session.getTransaction().commit();
		session.close();
	}
	
	//执行本地sql
	@Test
	public void test7() {
		Session session = HibernateUtils.openSession();
		session.beginTransaction();
		
		SQLQuery sqlQuery = session.createSQLQuery("select * from t_customer");
		List<Object> list = sqlQuery.list();
		System.out.println(list);
		for (Object object : list) {
			System.out.println(object.getClass());
		}
		
		//将结果封装到Customer中
		sqlQuery.addEntity(Customer.class);
		List<Customer> list1 = sqlQuery.list();
		for (Customer customer : list1) {
			System.out.println(customer.getAddress());
		}
		
		session.getTransaction().commit();
		session.close();
	}
	
	//执行本地sql,条件查询
	@Test
	public void test8() {
		Session session = HibernateUtils.openSession();
		session.beginTransaction();
		
		SQLQuery sqlQuery = session.createSQLQuery("select * from t_customer where address = ?");
		sqlQuery.setParameter(0, "北京1000");
		//将结果封装到Customer中
		sqlQuery.addEntity(Customer.class);
		Customer c = (Customer)sqlQuery.uniqueResult();
		System.out.println(c.getId()+"~"+c.getAddress());
		
		session.getTransaction().commit();
		session.close();
		
	}
	           
	//测试Criteria
	@Test
	public void test9() {
		Session session = HibernateUtils.openSession();
		session.beginTransaction();
		
		//得到Criteria
		Criteria criteria = session.createCriteria(Customer.class);
		
		//查询所有
//		List<Customer> list = criteria.list();
//		for (Customer customer : list) {
//			System.out.println(customer.getAddress());
//		}
		
		
		//分页查询
//		criteria.setFirstResult(10);
//		criteria.setMaxResults(10);
//		List<Customer> list1 = criteria.list();
//		for (Customer customer : list1) {
//			System.out.println(customer.getAddress());
//		}
		
		//多条件查询
		//查询地址
		criteria.add(Restrictions.eq("address", "北京90"));
		List<Customer> list1 = criteria.list();
		for (Customer customer : list1) {
			System.out.println(customer.getAddress());
		}
		//Customer c = (Customer)criteria.uniqueResult();
		//System.out.println(c.getAddress());
		
		
		//查询姓名或地址
		//criteria.add(Restrictions.or(Restrictions.eq("id", 101), Restrictions.eq("address", "北京91")));
//		criteria.add(Restrictions.or(Restrictions.eq("name", "李四"),Restrictions.eq("address","北京92")));
//		List<Customer> list = criteria.list();
//		for (Customer customer : list) {
//			System.out.println(1);
//			System.out.println(customer.getName()+"---"+customer.getAddress());
//		}
//		System.out.println(list);
		session.getTransaction().commit();
		session.close();
	}
	
	//修改数据
	@Test
	public void test10() {
		Session session = HibernateUtils.openSession();
		session.beginTransaction();
		int i;
		for(i = 105;i<202;++i ) {
			//方法一:
			//int sqlQuery = session.createSQLQuery("update t_customer set address = ? where id = ?").setParameter(0, "上海"+i).setParameter(1, i).executeUpdate();	
		
			//方法二:
			SQLQuery sqlQuery = session.createSQLQuery("update t_customer set address = ? where id = ?");
			sqlQuery.setParameter(0, "福州"+i);
			sqlQuery.setParameter(1, i);
			sqlQuery.executeUpdate();	
		}
		//int sqlQuery = session.createSQLQuery("update t_customer set address = ? where id = ?").setParameter(0, "上海102").setParameter(1, 102).executeUpdate();
		//update category set cname = ? where cid = ?
//		sqlQuery.setParameter(0, "上海102");
//		sqlQuery.setParameter(1, 102);
		
		session.getTransaction().commit();
		session.close();
	}
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值