Hibernate查询方式
1 对象导航查询
(1)根据id查询某个客户,再查询这个客户里面所有联系人
2 OID查询
(1)根据id查询某一条记录,返回对象
3 hql查询
(1)Query对象,写hql语句实现查询
4 QBC查询
(1)Criteria对象
5本地sql查询
(1)SQLQuery对象,使用普通sql实现查询
对象导航查询
1 查询某个客户里面所有联系人过程,使用对象导航实现
2 代码
//演示对象导航查询
@Test
public void testSelect() {
SessionFactory sessionFactory=null;
Session session =null;
Transaction tx=null;
try {
sessionFactory =HibernateUtils.getSessionFactory();
session=sessionFactory.openSession();
tx=session.beginTransaction();
//根据cid=1客户,再查询这个客户所有联系人
Customer customer=session.get(Customer.class, 1);
//再查询这个客户里面所有联系人
//直接得到客户里面联系人的set集合
Set<LinkMan> linkman=customer.getSetLinkMan();
System.out.println(linkman.size());
tx.commit();
}catch(Exception e) {
tx.rollback();
}finally {
session.close();
sessionFactory.close();
}
}
OID查询
(1)调用session里面的get方法实现Customer customer=session.get(Customer.class, 1);
HQL查询
1 hql:hibernate query language,hibernate提供一种查询语言,hql语言和普通sql很相似,区别:普通sql操作数据库表和字段,hql操作实体类和属性。
2常用的hql语句
3 使用hql查询操作时候,使用Query对象,
(1)创建Query对象写hql语句
(2)调用query对象里面的方法得到结果
查询所有
1 查询所有客户的记录
(1)创建Query对象写hql语句
(2)调用query对象里面的方法得到结果
2 查询所有: from 实体类名称
//1创建query对象
Query query=session.createQuery("from Customer");
//2调用方法得到结果
List<Customer>list =query.list();
for(Customer customer : list)
{
System.out.println(customer.getCid()+"::"+customer.getCustName());
}
条件查询
1 hql条件查询语句写法:
(1)from 实体类名称 where 实体类属性名称=? and 实体类属性名称=?
//1创建query对象
//select * from t_customer where cid=? and custName=?
Query query =session.createQuery("from Customer where cid=? and custName=?");
//2设置条件值
//向?里面设置值
//setParameter方法两个参数,第一个参数:int类型是?位置,第二个参数:具体参数值,?位置从0开始
query.setParameter(0, 1);
query.setParameter(1,"创智博客");
//3调用方法得到结果
List<Customer>list =query.list();
for(Customer customer : list)
{
System.out.println(customer.getCid()+"::"+customer.getCustName());
}
from实体类名称 where 实体类属性名称 like ?
//1创建query对象
Query query =session.createQuery("from Customer c where c.custName like ?");
//2设置条件值
//向?里面设置值
//setParameter方法两个参数,第一个参数:int类型是?位置,第二个参数:具体参数值,?位置从0开始
query.setParameter(0,"%播%");
//3调用方法得到结果
List<Customer>list =query.list();
for(Customer customer : list)
{
System.out.println(customer.getCid()+"::"+customer.getCustName());
}
排序查询
1 hql排序语句写法
(1)from实体类名称 order by 实体类属性名称 asc /desc
//1创建query对象
Query query =session.createQuery("from Customer order by cid desc");
//2调用方法得到结果
List<Customer>list =query.list();
for(Customer customer : list)
{
System.out.println(customer.getCid()+"::"+customer.getCustName());
}
分页查询
1 mysql实现分页
(1)使用关键字limit实现
select8 from t_customer limit 0,4
2 在hql中实现分页
(1)在hql操作中,在语句里面不能写limit,hibernate的Query对象封装两个方法实现非也操作。
//1创建query对象
//写查询所有语句
Query query =session.createQuery("from Customer");
//2设置分页数据
//2.1设置开始位置
query.setFirstResult(0);
//2.2设置每页记录数
query.setMaxResults(2);
//调用方法得到结果
List<Customer>list =query.list();
for(Customer customer : list)
{
System.out.println(customer.getCid()+"::"+customer.getCustName());
}
投影查询
1 投影查询:查询不是所有字段值,而是部分字段的值
2 投影查询hql语句写法:
(1)select 实体类属性名称1,实体类属性名称2 from 实体类名称
(2)select后面不能写*,不支持。
3具体实现
//1创建query对象
//写查询所有语句
Query query =session.createQuery("select custName from Customer");
//2调用方法得到结果
List<Object>list =query.list();
for(Object object : list)
{
System.out.println(object);
}
聚集函数使用
1 常用的聚集函数
(1)count,sum,avg,max,min
2 hql聚集函数语句写法
(1)查询记录数
select count(*) from 实体类名称
//1创建query对象
//写查询所有语句
Query query =session.createQuery("select count(*) from Customer");
//2调用方法得到结果
//query对象里面有方法,直接放回对象形式
Object obj=query.uniqueResult();
Long lobj=(Long)obj;
//返回int类型
int count=lobj.intValue();
System.out.println(count);