bugstar

导航

24.Hibernate-各种类型的查询.md

1.查询的类别

按照查询的方式分为面向对象和非面向对象

  • 面向对象

    • HQL查询:面向对象方式,可以跨数据库,但是需要SQL基础。最常用的方式。查询的对象是类和类的属性,不是表和字段!

    • Criteria查询:面向对象方式,可以跨数据库,不需要SQL基础

  • 非面向对象方式

    • SQL查询:非面向对象方式,不可以跨数据库,可以执行复杂的SQL语句

2.实例

上个例子中的App类改造后:

package per.liyue.code.hibernatehello;


import java.util.List;


import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Restrictions;
import org.junit.Test;


public class AppQuery {
	private static SessionFactory sessionFactory;


	static {
		sessionFactory = new Configuration().configure().buildSessionFactory();
	}


	/*
	* HQL查询
	*/
	@Test
	public void HQLDemo() {
		Session session = sessionFactory.openSession();
		Transaction transcation = session.beginTransaction();


		// 面向对象方式:使用SQL方式的查询,但是查询的对象不是表,而是类,查询的条件不是字段,而是类的属性
		Query query = session.createQuery("from Employee where empName = '李四'");
		List<Employee> list = query.list();
		System.out.println("**********使用HQL查询");
		System.out.println(list);


		transcation.commit();
		session.close();
		sessionFactory.close();
	}


	/*
	* Criteria查询
	*/
	@Test
	public void CriteriaDemo() {
		Session session = sessionFactory.openSession();
		Transaction transcation = session.beginTransaction();


		// 面向对象方式:使用Criteria查询,和SQL无关
		Criteria criteria = session.createCriteria(Employee.class);
		// 条件查询类的属性
		criteria.add(Restrictions.eq("empId", 2));
		List<Employee> list = criteria.list();
		System.out.println("**********使用Criteria查询");
		System.out.println(list);


		transcation.commit();
		session.close();
		sessionFactory.close();
	}


	/*
	* SQL查询
	*/
	@Test
	public void SqlDemo() {
		Session session = sessionFactory.openSession();
		Transaction transcation = session.beginTransaction();


		//非面向对象查询:适合复杂的SQL语句,但是不跨数据库!!!
		String sql = "select * from employee as e where e.EmpId = 6";
		//如果不加封装,那么查询出来的list不是想要得到的值
		//SQLQuery query = session.createSQLQuery(sql);
		SQLQuery query = session.createSQLQuery(sql).addEntity(Employee.class);
		List list = query.list();
		System.out.println("**********使用SQL查询");
		System.out.println(list);


		transcation.commit();
		session.close();
		sessionFactory.close();
	}
}


posted on 2018-03-06 10:17  bugstar  阅读(101)  评论(0编辑  收藏  举报