Hibernate 查询数据

 2023-09-10 阅读 24 评论 0

摘要:Hibernate 检索方式 类级别检索:当前对象所有属性值。例如:Customer自己数据关联级别检索:当前对象关联对象数据。例如:Customer 关联 Order 数据 1 检索概述 通过OID检索 get() 立即查询,如果没有返回null。load() 默认延迟检查,如

Hibernate 检索方式

  • 类级别检索:当前对象所有属性值。例如:Customer自己数据
  • 关联级别检索:当前对象关联对象数据。例如:Customer 关联 Order 数据

1 检索概述

  • 通过OID检索
    get() 立即查询,如果没有返回nullload() 默认延迟检查,如果没有结果抛异常。使用以上两个方法进行查询,结果都为持久态对象,持久对象就在一级缓存中。
  • 对象导航图 : 通过持久对象自动获得关联对象。
    例如:customer.getOrderSet().size()

  • 原始SQL语句

    session.createSQLQuery("sql语句") ,理论进行优化,提供性能。建议不用。
  • QBC ,hibernate 提供 纯面向对象查询语句,Query By Criteria,弱化。

  • HQL ,hibernate 提供面向对象查询语句。类似SQL语句(重点)

       HQL 使用对象和对象属性,SQL语句使用表名和字段名称。对象和属性区分大小写的。表名和字段名称不区分大小写。

1 类级别

类级别:查询当前类的所有内容,只查询一次。优化指的是查询时机优化,让空闲时间服务器做出其他处理。session.get(Customer.class ,oid) 通过OID立即检索(查询),如果数据不存在返回null。session.load(Customer.class , oid ) 默认通过OID延迟检索,如果数据不存在将抛异常。

1 Hibernate 加载配制文件 获取session


public class H3Utils {//提供一个工厂 (链式操作)private static SessionFactory factory = new Configuration().configure("android/longs/study/config/hibernate.cfg.xml").buildSessionFactory();/*** 获得线程绑定的session* @return*/public static Session getCurrentSession(){return factory.getCurrentSession();}}

1 查询所有

//HQL 方式
public void queryAllFunction1(){Session session = H3Utils.getCurrentSession();session.beginTransaction();//HQLQuery query = session.createQuery("from Customer");//获取List<Customer> allCustomer = query.list();session.getTransaction().commit();session.close();
}
//HQL 方式public void queryAllFunction2(){Session session = H3Utils.getCurrentSession();session.beginTransaction();//HQL  可以使用别名 , 这里的别名为 c ,可以使用别名来代替 select 中的 * Query query = session.createQuery("select c from Customer as c");//获取List<Customer> allCustomer = query.list();session.getTransaction().commit();session.close();}
//sql 语句方式
public void queryAllFunction3(){Session session = factory.openSession();session.beginTransaction();//2 SQLSQLQuery sqlQuery = session.createSQLQuery("select * from t_customer");// * 必须设置查询结果封装到那个对象中sqlQuery.addEntity(Customer.class);//获取数据 List<Customer> allCustomer = sqlQuery.list();session.getTransaction().commit();session.close();
}
 //QBC方式 
public void queryAllFunction4(){Session session = H3Utils.getCurrentSession();session.beginTransaction();//QBCCriteria criteria = session.createCriteria(Customer.class);//获取数据List<Customer> allCustomer = criteria.list();session.getTransaction().commit();session.close();
}

数据库、


2 通过 id 来查询单个数据

  • hql 方式根据指定id来查询
public void queryCuseromeFromIdToHQL(int id) {Session session = H3Utils.getCurrentSession();session.beginTransaction();//创建 hqlCustomer customer =(Customer) session.createQuery("from Customer c where c.cid = 1").uniqueResult();session.getTransaction().commit();session.close();
}
  • sql方式根据指定id来查询

public void queryCuseromeFromIdToSQL(int id) {Session session = H3Utils.getCurrentSession();session.beginTransaction();//构建sql String sql = "select * from t_customer c where c.cid= "+id;//通过 sql 来查询对应的数据 Customer customer = (Customer) session.createSQLQuery(sql)//执行sql.addEntity(Customer.class)//封装数据的实体类型.uniqueResult();//获取一个对象session.getTransaction().commit();session.close();
}
  • QBC方式根据指定id来查询

public void queryCuseromeFromIdToQBC(int id) {Session session = H3Utils.getCurrentSession();session.beginTransaction();//QBC Customer customer = (Customer) session.createCriteria(Customer.class).add(Restrictions.eq("cid", 1)) //添加约束.uniqueResult();session.getTransaction().commit();session.close();
}


3 排序查询

  • hql 方式查询排序

public void queryAllDescFunctonForHQL(){Session session = H3Utils.getCurrentSession();session.beginTransaction();//构建HQL语句String hql = "from Customer c order by c.cid desc";// 1 hql , 格式:  order by 属性名  [asc]|descList<Customer> allCustomer = session.createQuery(hql).list();session.getTransaction().commit();
}    
  • sql方式查询排序

public void queryAllDescFunctonForSql(){Session session = H3Utils.getCurrentSession();session.beginTransaction();//构建sql 语句 String sql = "select * from t_customer order by cid desc";// 2 sql List<Customer> allCustomer = session.createSQLQuery(sql).addEntity(Customer.class).list();session.getTransaction().commit();}
  • QBC方式方式查询排序
public void queryAllDescFunctonForQBC(){Session session = H3Utils.getCurrentSession();session.beginTransaction();// 3 qbc 注意OrderList<Customer> allCustomer =session.createCriteria(Customer.class).addOrder(org.hibernate.criterion.Order.desc("cid")).list();session.getTransaction().commit();}


hibernate多表关联查询,

4 查询部分内容

  • hql 方式查询部分内容
//通过hql方式来查询 部分内容 
public void queryPartForHql() {Session session = H3Utils.getCurrentSession();session.beginTransaction();//构建语句 String hql = "select new Customer(cid,name) from Customer";/** hql  查询,默认将查询结果封装到 Object[] 中,但我们需要封装指定对象中* 可以 提供构造方法,将查询结果通过构造方法直接创建对象。* 投影查询,查询结果为脱管态* 注意对应的类 Customer 中要有对应的 构造*/List<Customer> allCustomer = session.createQuery(hql).list();session.getTransaction().commit();session.close();
} 
  • sql方式查询部分内容

//通过SQL方式来查询 部分内容 
public void queryPartForSql() {Session session = H3Utils.getCurrentSession();session.beginTransaction();//构建语句String sql = "select cid,name from t_customer";//查询 List<Customer> allCustomer = session.createSQLQuery(sql).addEntity(Customer.class).list();session.getTransaction().commit();}
  • QBC方式查询部分内容

//通过QBC方式来查询 部分内容 
public void queryPartForQBC() {Session session = H3Utils.getCurrentSession();session.beginTransaction();List<Customer> allCustomer = session.createCriteria(Customer.class)//设置数据封装的类.setProjection(Projections.projectionList().add(Projections.alias(Projections.property("cid"), "cid"))//添加 查询的部分.add(Projections.alias(Projections.property("name"), "name"))//添加 查询的部分).setResultTransformer( new AliasToBeanResultTransformer(Customer.class)).list();session.getTransaction().commit();
}


5 分页查询

  • hql 方式分页查询
 //通过 HQL 分页查询 
public  void queryPageHql() {Session session = H3Utils.getCurrentSession();session.beginTransaction();//1 hql , 不能手动设置limitList<Customer> allCustomer = session.createQuery("from Customer").setFirstResult(0)//查询的页数.setMaxResults(2)//每页查询的个数.list();session.getTransaction().commit();}
  • sql方式分页查询
//通过 sql 分页查询 
public  void queryPageSQL() {Session session = H3Utils.getCurrentSession();session.beginTransaction();//构建 语句 String sql1 = "select * from t_customer ";List<Customer> allCustomer = session.createSQLQuery(sql1).addEntity(Customer.class)//设置数据封装的对象.setFirstResult(0)//设置开始查询的页数.setMaxResults(2)//设置每页可以查询的数据个数.list();// 这里可以使用 limit 方式 来进行查询 String sql2 = "select * from t_customer limit 0,2";List<Customer> allCustomer2 = session.createSQLQuery(sql2).addEntity(Customer.class).list();session.getTransaction().commit();session.close();
}
  • QBC方式分页查询
//通过 QBC 分页查询 
public  void queryPageQBC() {Session session = H3Utils.getCurrentSession();session.beginTransaction();List<Customer> allCustomer = session.createCriteria(Customer.class).setFirstResult(0)//设置开始查询的页数.setMaxResults(2)//设置每页查询的元素的个数.list();session.getTransaction().commit();session.close();
}


6 绑定参数进行查询

  • hql 方式绑定参数查询
//Hql 绑定参数查询 
public void queryParamForHql(int num) {Session session = H3Utils.getCurrentSession();session.beginTransaction();//占位符方式String hql1 = "from Customer c where c.cid = ? ";Customer customer = (Customer) session.createQuery(hql1).setInteger(0, num)//第0个参数 值为num .uniqueResult();//别名方式String hql2 = "from Customer c where c.cid = :xx ";Customer customer2 = (Customer) session.createQuery(hql1).setInteger("xx", num)//第0个参数 值为num .uniqueResult();session.getTransaction().commit();
}
  • sql方式绑定参数查询
//SQL绑定参数查询 
public void queryParamForSql(int id) {Session session = factory.openSession();session.beginTransaction();//构建sql String sql = "select * from t_customer c where c.cid= "+id;//通过 sql 来查询对应的数据 Customer customer = (Customer) session.createSQLQuery(sql)//执行sql.addEntity(Customer.class)//封装数据的实体类型.uniqueResult();//获取一个对象session.getTransaction().commit();}
  • QBC方式绑定参数查询
//QBC绑定参数查询 
public void queryParamForQBC() {Session session = H3Utils.getCurrentSession();session.beginTransaction();//QBC Customer customer = (Customer) session.createCriteria(Customer.class).add(Restrictions.eq("cid", 1)) //添加约束.uniqueResult();session.getTransaction().commit();session.close();session.getTransaction().commit();}

7 聚合函数

public void demo07(){Session session = factory.openSession();session.beginTransaction();//1 hql// * uniqueResult() 如果查询结果数大于1抛异常,如果是1返回结果,如果0返回null//HQL 方式一 Object objCount = session.createQuery("select count(*) from Customer").uniqueResult();//HQL 方式二 Long numCount = (Long)session.createQuery("select count(c) from Customer c").uniqueResult();//2 sqlBigInteger sqlCount = (BigInteger) session.createSQLQuery("select count(cid) from t_customer").uniqueResult();//3 qbcLong numObj = (Long)session.createCriteria(Customer.class).setProjection(Projections.projectionList().add(Projections.rowCount())).uniqueResult();//打印int num = numObj.intValue();System.out.println(num);session.getTransaction().commit();session.close();
}

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/35424.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息