OID查询:
get 方法调用时执行,返回实体类对象
load 使用对象时执行,返回代理对象
SQL查询:
SQLQuery ( 一般不用 )
session的doWork方法可以拿到connection
HQL查询:
使用HQL语句查询数据库
把sql语句的表明换成了类名。把字段名换成实体类中的属性
QBC查询:
使用Criteria对象查询
使用对象导航查询:
hibernate中的Query对象(着重)
它是hibernate中的HQL查询方式
HQL:hibernate query language
1.如何获取改对象
session的方法
2.涉及的对象和方法
createQuery(String hql)
3.方法的参数和含义
SQL:select cus_id from customer
HQL:select cusId from Customer
HQL语句是把sql语句的表明换成了类名。把字段名换成实体类中的属性
HQL查询:
查询所有,条件查询,排序查询,分页查询,统计查询,投影查询
import com.utils.HibernateUtils; import org.hibernate.Query; import org.hibernate.Transaction; import org.hibernate.classic.Session; import org.junit.Test; import java.util.List; public class CustomerTestDemo06 { /** * HQL查询 * 把sql语句的表明换成了类名。把字段名换成实体类中的属性 */ //查询所有 @Test public void test01(){ Session s=HibernateUtils.getCurrnetSession(); Transaction tx = s.beginTransaction(); Query query=s.createQuery("from Customer"); List list = query.list(); for (Object o : list) { System.out.println((Customer)o); } tx.commit(); } //按条件查询--1.占位符 @Test public void test02(){ Session s=HibernateUtils.getCurrnetSession(); Transaction tx = s.beginTransaction(); Query query=s.createQuery("from Customer where lovel = ? or name like ?"); query.setString(0,"做县官"); //占位符从0开始的 query.setString(1,"%刘%"); List list = query.list(); for (Object o : list) { System.out.println((Customer)o); } tx.commit(); } //按条件查询--2.给占位符取名字 @Test public void test03(){ Session s=HibernateUtils.getCurrnetSession(); Transaction tx = s.beginTransaction(); //给参数区名 :名 规范是(:属性) Query query=s.createQuery("from Customer where lovel = :a or name like :name"); // query.setString("a","做县官"); //占位符从0开始的 // query.setString("name","%刘%"); //setParameter()方法,此参数类型更灵活 query.setParameter("a","做县官"); query.setParameter("name","%刘%"); List list = query.list(); for (Object o : list) { System.out.println((Customer)o); } tx.commit(); } //排序查询 @Test public void test04(){ Session s=HibernateUtils.getCurrnetSession(); Transaction tx = s.beginTransaction(); //order by 列明 desc Query query=s.createQuery("from Customer order by id desc "); List list = query.list(); for (Object o : list) { System.out.println((Customer)o); } tx.commit(); } /** * 分页查询,hibernate提供高了两个方法: * setFirstResult(),设置开始查询记录索引 * setMaxResults(),设置每页查询条数 * */ @Test public void test05(){ Session s=HibernateUtils.getCurrnetSession(); Transaction tx = s.beginTransaction(); //order by 列明 desc Query query=s.createQuery("from Customer order by id desc "); query.setFirstResult(3); query.setMaxResults(3); List list = query.list(); for (Object o : list) { System.out.println((Customer)o); } tx.commit(); } /** * 统计查询,使用聚合函数: *count sum avg max min */ @Test public void test06(){ Session s=HibernateUtils.getCurrnetSession(); Transaction tx = s.beginTransaction(); //order by 列明 desc Query query=s.createQuery("select count(*) from Customer"); /*List list = query.list(); for (Object o : list) { System.out.println(o); }*/ Object o = query.uniqueResult(); //当返回结果唯一的时候使用此方法 System.out.println(o); tx.commit(); } /** * 投影查询: * 查询结果只需要部分字段,不需要全部不,且希望返回的结果是封装类,而不是Object * 用法:用在HQL语句中new 一个对象,并给对象一哥具体的带参的构造函数 */ @Test public void test07(){ Session s=HibernateUtils.getCurrnetSession(); Transaction tx = s.beginTransaction(); //order by 列明 desc Query query=s.createQuery("select new com.bean.Customer(id,name) from Customer"); List list = query.list(); for (Object o : list) { System.out.println(o); } tx.commit(); } }