一、对象导航查询

根据id查询某个客户,再查询这个客户里面所有的联系人
//演示对象导航查询
@Test
public void testSelect1() {
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<LinkMan> linkMans = customer.getSetLinkMan();

System.out.println(linkMans.size());

tx.commit();
}catch (Exception e){
tx.rollback();
}finally

二、OID查询

根据id查询某一条记录,返回对象
  即调用session里面的get方法实现
get(Customer.class, 1);

三、hql查询

用Query对象,写hql语句来实现查询
①hql:(hibernate query language,提供一种查询语言,hql语言和普通sql相似。区别在于:普通sql操作数据库表和字段,hql操作实体类和属性)
②常用hql语句
③使用hql查询操作时候,使用Query对象
  (1)创建Query对象,写hql语句
  (2)调用Query对象里面的方法得到结果
Hibernate5.x Query 对象(不提示过时)

Hibernate 学习笔记 之 查询方式_实体类

以下还是使用老版本
/**
* 查询所有
*/
public void testSelect2() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = 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());
}

tx.commit();
}catch (Exception e){
tx.rollback();
}finally
/**
* 条件查询
* from xxx where xx=? and x=?
* from yyy where yy like?
*/
@Test
public void testSelect3() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();

//1. 创建query对象
//select * from t_customer where cid=? and custName=?
Query query =
session.createQuery("from Customer where cid=? and custName=?");
/**
* 2.设置条件值 即 向?中设置
* 第一个参数: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());
}


tx.commit();
}catch (Exception e){
tx.rollback();
}finally
/**
* 模糊查询 like
*/
@Test
public void testSelect4() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();

//1. 创建query对象
//select * from t_customer where cid=? and custName=?
Query query =
session.createQuery("from Customer where custName like ?");

//2 设置?的值
//啦%
query.setParameter(0, "啦%");

//3.调用方法得到结果
List<Customer> list = query.list();
for (Customer customer : list){
System.out.println(customer.getCid() + ":" + customer.getCustName());
}


tx.commit();
}catch (Exception e){
tx.rollback();
}finally
/**
* 排序查询
*/
@Test
public void testSelect5() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();

//1. 创建query对象
Query query =
session.createQuery("from Customer order by id");

//3.调用方法得到结果
List<Customer> list = query.list();
for (Customer customer : list){
System.out.println(customer.getCid() + ":" + customer.getCustName());
}


tx.commit();
}catch (Exception e){
tx.rollback();
}finally
/**
* 分页查询
* mysql里 使用关键字 limit
* select * from t_customer limit 0, 3;
*
* 在hql操作中,在语句里面不能写limit query有两个方法可用
*/

@Test
public void testSelect6() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();

//1. 创建query对象
Query query = session.createQuery("from Customer");

//2.设置分页数据
//2.1设置开始位置
query.setFirstResult(0);
//2.2设置每页记录数
query.setMaxResults(3);

//3.调用方法得到结果
List<Customer> list = query.list();
for (Customer customer : list){
System.out.println(customer.getCid() + ":" + customer.getCustName());
}


tx.commit();
}catch (Exception e){
tx.rollback();
}finally
/**
* 投影查询
*
* 可以查询部分字段
*
* select 实体类属性名称1,实体类属性名称2 from 实体类名称
* select 后面不能写 * , 不支持的
*/
@Test
public void testSelect7() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();

//1. 创建query对象
Query query = session.createQuery("select custName from Customer");

//2.调用方法得到结果
List<Customer> list = query.list();
for (Object object : list){
System.out.println(object);
}


tx.commit();
}catch (Exception e){
tx.rollback();
}finally
/**
* 聚集函数使用
*
* 常用聚集函数:
* count sum avg max min
*/
@Test
public void testSelect8() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();

//1. 创建query对象
Query query = session.createQuery("select count(*) from Customer");

//调用方法得到结果
//query对象里面有方法,直接返回对象形式
Object object = query.uniqueResult();

Long lobj = (Long) object;
int count = lobj.intValue();
System.out.println(count);



tx.commit();
}catch (Exception e){
tx.rollback();
}finally

四、QBC查询

Criteria对象
/**
* 使用QBC时候,
* 不需要写语句,使用方法实现
*
* 操作实体类和属性
*/
/**
* 查询所有
*/
@Test
public void testSelect9() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();

//1. 创建query对象
Criteria criteria = session.createCriteria(Customer.class);

//调用方法得到结果
List<Customer> list = criteria.list();

for(Customer customer : list){
System.out.println(customer.getCid() + ":" + customer.getCustName());
}



tx.commit();
}catch (Exception e){
tx.rollback();
}finally
/**
* 条件查询
*
*/
@Test
public void testSelect10() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();

//1. 创建query对象
Criteria criteria = session.createCriteria(Customer.class);

//2. 使用Criteria对象里面的方法设置条件值
//首先使用add方法,表示设置条件
//在add方法里面使用类的方法实现条件设置
criteria.add(Restrictions.eq("custName", "啦啦"));

//3. 调用方法得到结果
List<Customer> list = criteria.list();

for(Customer customer : list){
System.out.println(customer.getCid() + ":" + customer.getCustName());
}



tx.commit();
}catch (Exception e){
tx.rollback();
}finally
Restrictions的方法表

Hibernate 学习笔记 之 查询方式_实体类_02

/**
* 模糊查询
*
*/
@Test
public void testSelect11() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();

//1. 创建query对象
Criteria criteria = session.createCriteria(Customer.class);

//2. 使用Criteria对象里面的方法设置条件值
//首先使用add方法,表示设置条件
//在add方法里面使用类的方法实现条件设置
criteria.add(Restrictions.like("custName", "%啦"));

//3. 调用方法得到结果
List<Customer> list = criteria.list();

for(Customer customer : list){
System.out.println(customer.getCid() + ":" + customer.getCustName());
}

tx.commit();
}catch (Exception e){
tx.rollback();
}finally
/**
* 排序查询
*
*/
@Test
public void testSelect12() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();

//1. 创建query对象
Criteria criteria = session.createCriteria(Customer.class);

//2. 设置排序规则和对哪个属性进行排序
criteria.addOrder(Order.asc("cid"));

//3. 调用方法得到结果
List<Customer> list = criteria.list();

for(Customer customer : list){
System.out.println(customer.getCid() + ":" + customer.getCustName());
}



tx.commit();
}catch (Exception e){
tx.rollback();
}finally
/**
* 分页查询
*
*/
@Test
public void testSelect13() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();

//1. 创建query对象
Criteria criteria = session.createCriteria(Customer.class);

//2. 设置分页数据
//2.1 设置开始位置
criteria.setFirstResult(0);

//2.2每页显示记录数
criteria.setMaxResults(3);

//3. 调用方法得到结果
List<Customer> list = criteria.list();

for(Customer customer : list){
System.out.println(customer.getCid() + ":" + customer.getCustName());
}



tx.commit();
}catch (Exception e){
tx.rollback();
}finally
/**
* 统计查询
*
*/
@Test
public void testSelect15() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try{
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();

//1. 创建query对象
Criteria criteria = session.createCriteria(Customer.class);

//2. 设置操作
criteria.setProjection(Projections.rowCount());

//3. 调用方法得到结果
Object object = criteria.uniqueResult();
Long lobj = (Long) object;
int count = lobj.intValue();
System.out.println(count);

tx.commit();
}catch (Exception e){
tx.rollback();
}finally

五、本地sql查询

SQLQuery对象,使用普通sql实现查询