Hibernate查询方式
Hibernate查询方式
-
对象导航查询
根据id查询某个客户,再查询这个客户里面所有的联系人 -
OID查询
根据id查询某一条记录,返回对象 -
3 HQL查询
Query对象,写hql语句实现查询 -
4 QBC查询
Criteria对象 -
5 本地sql查询
SQLQuery对象,使用普通sql实现查询
对象导航查询
- 查询某个客户里面所有联系人过程,使用对象导航实现
//演示对象导航查询
@Test
public void testSelect() {
Configuration configuration = new Configuration();
configuration.configure();
SessionFactory sessionFactory = null;
Session session = null;
Transaction transaction = null;
try{
sessionFactory = configuration.buildSessionFactory();
session = sessionFactory.openSession();
//开启事务
transaction = session.beginTransaction();
//根据cid=1客户,再查询这个客户里面所有联系人
Customer customer = session.get(Customer.class, 1);
//再查询这个客户里面所有联系人
//直接得到客户里面联系人的set集合
//得到set集合,没有发送语句
Set<LinkMan> linkman = customer.getSetLinkMan();
// 发送语句
System.out.println(linkman.size());
//提交事务
transaction.commit();
}catch (Exception e){
//回滚事务
transaction.rollback();
}finally {
//关闭操作
session.close();
sessionFactory.close();
}
}
OID查询
- 根据id查询记录
调用session里面的get方法实现
HQL查询
- hql:hibernate query language,hibernate提供一种查询语言,hql语言和普通sql很相似,区别:普通sql操作数据库表和字段,hql操作实体类和属性
- 常用的hql语句
(1)查询所有: from 实体类名称
(2)条件查询: from 实体类名称 where 属性名称=?
(3)排序查询: from 实体类名称 order by 实体类属性名称 asc/desc - 使用hql查询操作时候,使用Query对象
(1)创建Query对象,写hql语句
(2)调用query对象里面的方法得到结果
查询所有
- 查询所有客户记录
(1)创建Query对象,写hql语句
(2)调用query对象里面的方法得到结果 - 查询所有: from 实体类名称
//演示查询所有
@Test
public void testSelect1() {
Configuration configuration = new Configuration();
configuration.configure();
SessionFactory sessionFactory = null;
Session session = null;
Transaction transaction = null;
try{
sessionFactory = configuration.buildSessionFactory();
session = sessionFactory.openSession();
//开启事务
transaction = session.beginTransaction();
//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());
}
//提交事务
transaction.commit();
}catch (Exception e){
//回滚事务
transaction.rollback();
}finally {
//关闭操作
session.close();
sessionFactory.close();
}
}
条件查询
- hql条件查询语句写法:
from 实体类名称 where 实体类属性名称=? and实体类属性名称=? - 代码
//演示条件查询
@Test
public void testSelect2() {
Configuration configuration = new Configuration();
configuration.configure();
SessionFactory sessionFactory = null;
Session session = null;
Transaction transaction = null;
try{
sessionFactory = configuration.buildSessionFactory();
session = sessionFactory.openSession();
//开启事务
transaction = session.beginTransaction();
//1 创建query对象
//SELECT * FROM t_customer WHERE cid=? AND custName=?
Query query = session.createQuery("from Customer c where c.cid=? and c.custName=?");
//2 设置条件值
// 向?里面设置值
// setParameter方法两个参数
// 第一个参数:int类型是?位置,?位置从0开始
// 第二个参数:具体参数值
//设置第一个?值
query.setParameter(0, 3);
//设置第二个?值
query.setParameter(1, "腾讯");
//3 调用方法得到结果
List<Customer> list = query.list();
for (Customer customer : list) {
System.out.println(customer.getCustMobile()+"::"+customer.getCustName());
}
//提交事务
transaction.commit();
}catch (Exception e){
//回滚事务
transaction.rollback();
}finally {
//关闭操作
session.close();
sessionFactory.close();
}
}
模糊查询
- hql条件查询语句写法:
from 实体类名称 where 实体类属性名称 like ? - 代码
//演示模糊查询
@Test
public void testSelect3() {
Configuration configuration = new Configuration();
configuration.configure();
SessionFactory sessionFactory = null;
Session session = null;
Transaction transaction = null;
try{
sessionFactory = configuration.buildSessionFactory();
session = sessionFactory.openSession();
//开启事务
transaction = session.beginTransaction();
//1 创建query对象
Query query = session.createQuery("from Customer where custName like ?");