Hibernate 查询数据

来源:互联网 发布:吉诺比利巅峰数据 编辑:程序博客网 时间:2024/06/07 19:09

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();    //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