Hibernate一共有5种查询方式
* OID查询:
根据id查询一个实体
方法:
get和load
*SQL查询:
使用sql语句查询数据库
方法:
第一种:SQLQuery
第二种:session的doWork方法,它可以获取connection
*HQL查询:
使用HQL语句查询数据库
*QBC查询:
使用Criteria对象查询数据库
* 对象导航查询:
public class Dome4 {
/*
* HQL查询:
* 涉及的对象:
* Query
* 获取方式:
* session.createQuery(string hql);
* 参数含义:
* 使用hql语句查询数据库
* hql语句的写法:把表名换成实体类名,把列名换成实体类属性名
*
*
*/
//基本查询
@Test
public void test01(){
Session session = HibernateUtil.getCurrentSession();
Transaction tx = session.beginTransaction();
//获取Query对象
Query<Customer> query = session.createQuery("from Customer");
//获取结果集
List<Customer> list = query.list();
for (int i = 0; i < list.size(); i++) {
Customer customer = list.get(i);
System.out.println(customer.toString());
}
tx.commit();
}
//条件查询
@Test
public void test02(){
Session session = HibernateUtil.getCurrentSession();
Transaction tx = session.beginTransaction();
//获取Query对象
//这里要注意:写hql语句时,里面的列名不再是数据表中的列名,而是实体类的属性名,写的时候不要弄错了
//Query<Customer> query = session.createQuery("from Customer where custName = 'aa' ");
Query<Customer> query = session.createQuery("from Customer where custName = :name ");
query.setParameter("name", "aa");
//获取结果集
List<Customer> list = query.list();
for (int i = 0; i < list.size(); i++) {
Customer customer = list.get(i);
System.out.println(customer.toString());
}
tx.commit();
}
//排序查询
@Test
public void test03(){
Session session = HibernateUtil.getCurrentSession();
Transaction tx = session.beginTransaction();
//获取Query对象
Query<Customer> query = session.createQuery("from Customer");
//获取结果集
List<Customer> list = query.list();
for (int i = 0; i < list.size(); i++) {
Customer customer = list.get(i);
System.out.println(customer.toString());
}
tx.commit();
}
//分页查询
@Test
public void test04(){
Session session = HibernateUtil.getCurrentSession();
Transaction tx = session.beginTransaction();
//获取Query对象
Query<Customer> query = session.createQuery("from Customer");
//分页查询
//设置查询开始记录索引
query.setFirstResult(0);
//设置查询记录的条数
query.setMaxResults(2);
//相当于mysql中的 limit 0,2
//获取结果集
List<Customer> list = query.list();
for (int i = 0; i < list.size(); i++) {
Customer customer = list.get(i);
System.out.println(customer.toString());
}
tx.commit();
}
/*
*
* 统计查询
* 聚合函数:count sum avg max min
*/
@Test
public void test05(){
Session session = HibernateUtil.getCurrentSession();
Transaction tx = session.beginTransaction();
//获取Query对象
Query query = session.createQuery("select count(*) from Customer");
//获取结果集
//当返回的结果唯一时,使用uniqueResult()方法
long sum = (long) query.uniqueResult();
System.out.println(sum);
tx.commit();
}
/*
* 投影查询
*
* 当我们查询时,只需要部分对象,而不是全部,并且希望返回结果用实体类来封装
* 投影查询用法:
*
*/
@Test
public void test06(){
Session session = HibernateUtil.getCurrentSession();
Transaction tx = session.beginTransaction();
//获取Query对象
//Query query = session.createQuery("select custid,custName from Customer");
/*
* 在select语句中使用new语句,并且实体类最好写限定名称即 包名.实体类名
* 在实体类中添加对应参数列表的构造函数
*
*/
Query query = session.createQuery("select new entity.Customer(custid,custName) from Customer");
//获取结果集
List<Customer> list = query.list();
for (int i = 0; i < list.size(); i++) {
Customer customer = list.get(i);
System.out.println(customer.toString());
}
tx.commit();
}
}