javaEE Hibernate, HQL查询语句, 面向对象语句查询, createQuery()

HQL查询语句:一般用于多表但不复杂的查询。(Hibernate Query Language)

Criteria查询语句:一般用于单表查询。(Query By Criteria)

原生SQL语句:一般用于复杂的查询。

Test.java:

package cn.xxx.demo;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import cn.xxx.domain.Customer;
import cn.xxx.utils.HibernateUtils;

//测试HQL语句 (Hibernate Query Language) 相当于面向对象的sql。
public class Test {

	@Test
	//基本查询
	public void fun1(){
		Session session = HibernateUtils.openSession();
		Transaction tx = session.beginTransaction();
		//-------------------------------------------
		//1> 书写HQL语句
		//String hql = " select * from cn.xxx.domain.Customer ";  // "select * " 查询所有列,可以省略。 所有包中只有一个Customer类,可以省略包名。 
		String hql = " from Customer "; // 查询所有Customer对象
		//2> 根据HQL语句创建查询对象
		Query query = session.createQuery(hql);
		//3> 根据查询对象获得查询结果
		List<Customer> list = query.list();	// 返回list结果。 结果自动封装成对象(list)。
		//query.uniqueResult(); //接收唯一的查询结果 (结果只有一行)
		
		System.out.println(list);
		//-------------------------------------------
		tx.commit();
		session.close();
		
	}
	
	@Test
	//条件查询
	//HQL语句中,不可能出现任何数据库相关的信息(表名,列名);只会出现对象类名和对象属性名
	public void fun2(){
		Session session = HibernateUtils.openSession();
		Transaction tx = session.beginTransaction();
		//-------------------------------------------
		//1> 书写HQL语句
		String hql = " from Customer where cust_id = 1 "; // 
		//2> 根据HQL语句创建查询对象
		Query query = session.createQuery(hql);
		//3> 根据查询对象获得查询结果
		Customer c = (Customer) query.uniqueResult();
		
		System.out.println(c);
		//-------------------------------------------
		tx.commit();
		session.close();
		
	}
	
	@Test
	//条件查询
	//问号占位符
	public void fun3(){
		Session session = HibernateUtils.openSession();
		Transaction tx = session.beginTransaction();
		//-------------------------------------------
		// ? 问号占位符
		String hql = " from Customer where cust_id = ? "; // 根据id查询Customer对象
		Query query = session.createQuery(hql);
		//设置参数,替换问号占位符
		//query.setLong(0, 1l);
		query.setParameter(0, 1l); // 下标从0开始。 JDBC是从1开始。
		Customer c = (Customer) query.uniqueResult();
		
		System.out.println(c);
		//-------------------------------------------
		tx.commit();
		session.close();
		
	}
	
	@Test
	//条件查询
	//命名占位符
	public void fun4(){
		Session session = HibernateUtils.openSession();
		Transaction tx = session.beginTransaction();
		//-------------------------------------------
		// :cust_id 命名占位符
		String hql = " from Customer where cust_id = :cust_id ";  // 根据id查询Customer对象
		Query query = session.createQuery(hql);
		// 为占位符设置参数
		query.setParameter("cust_id", 1l);
		Customer c = (Customer) query.uniqueResult();
		
		System.out.println(c);
		//-------------------------------------------
		tx.commit();
		session.close();
		
	}
	
	@Test
	//分页查询
	public void fun5(){
		Session session = HibernateUtils.openSession();
		Transaction tx = session.beginTransaction();
		//-------------------------------------------
		String hql = " from Customer  "; 
		Query query = session.createQuery(hql);
		//设置分页信息 limit ?,?
		query.setFirstResult(0);  // 跳过几条
		query.setMaxResults(10);  // 每页几条
		
		List<Customer> list = query.list();
		System.out.println(list);
		//-------------------------------------------
		tx.commit();
		session.close();
		
	}
}

猜你喜欢

转载自blog.csdn.net/houyanhua1/article/details/81054958