Hibernate 查询数据
来源:互联网 发布:吉诺比利巅峰数据 编辑:程序博客网 时间:2024/06/07 19:09
Hibernate 检索方式
- 类级别检索:当前对象所有属性值。例如:Customer自己数据
- 关联级别检索:当前对象关联对象数据。例如:Customer 关联 Order 数据
1 检索概述
- 通过OID检索
get() 立即查询,如果没有返回null。 load() 默认延迟检查,如果没有结果抛异常。 使用以上两个方法进行查询,结果都为持久态对象,持久对象就在一级缓存中。
对象导航图 : 通过持久对象自动获得关联对象。
例如: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(); //HQL Query 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 SQL SQLQuery 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(); //QBC Criteria 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(); //创建 hql Customer 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]|desc List<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 注意Order List<Customer> allCustomer = session.createCriteria(Customer.class) .addOrder(org.hibernate.criterion.Order.desc("cid")) .list(); session.getTransaction().commit();}
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 , 不能手动设置limit List<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 sql BigInteger sqlCount = (BigInteger) session.createSQLQuery("select count(cid) from t_customer").uniqueResult(); //3 qbc Long 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();}
0 0
- Hibernate学习:Hibernate数据查询
- Hibernate数据查询
- Hibernate数据查询
- Hibernate数据查询 (转帖)
- Hibernate数据查询
- Hibernate查询视图数据
- Hibernate数据查询
- Hibernate 数据查询
- Hibernate数据查询
- Hibernate数据查询
- Hibernate数据查询
- Hibernate数据查询
- Hibernate数据查询教程
- Hibernate数据查询
- Hibernate数据查询-->简介
- Hibernate数据查询
- Hibernate数据查询
- Hibernate-数据查询-4
- 最小生成树模版题
- C++四种类型转换
- C++多态之动态绑定
- 构建高并发高可用的电商平台架构实践3
- 各类排序算法复杂度、稳定性比较
- Hibernate 查询数据
- Android 测试环境搭建(Win7)
- scala(一)/Haskel(一)
- 整理一下算法和数据结构
- 《ACM程序设计》书中题目 N
- 解决C++ 无法从void 转换为LRESULT的方法详解
- Hibernate 修改数据
- 《打造高绩效团队》读书笔记
- google API Design Guide