Hibernate学习之路(6) Hibernate5种查询方式

Hibernate一共有5种查询方式
* OID查询:
根据id查询一个实体
方法:
get和load
*SQL查询:
使用sql语句查询数据库
方法:
第一种:SQLQuery
第二种:session的doWork方法,它可以获取connection
*HQL查询:
使用HQL语句查询数据库
*QBC查询:
使用Criteria对象查询数据库
* 对象导航查询:

public class Dome4 {
     /*
     * HQL查询:
     * 涉及的对象:
     *  Query
     * 获取方式:
     *  session.createQuery(string hql);
     * 参数含义:
     *  使用hql语句查询数据库
     *  hql语句的写法:把表名换成实体类名,把列名换成实体类属性名
     * 
     * 
     */
    //基本查询
    @Test
    public void test01(){
    Session session = HibernateUtil.getCurrentSession();
    Transaction tx = session.beginTransaction();
    //获取Query对象
    Query<Customer> query  = session.createQuery("from Customer");
    //获取结果集
    List<Customer> list = query.list();
    for (int i = 0; i < list.size(); i++) {
        Customer customer = list.get(i);
        System.out.println(customer.toString());
    }
    tx.commit();
    }

    //条件查询
    @Test
    public void test02(){
    Session session = HibernateUtil.getCurrentSession();
    Transaction tx = session.beginTransaction();
    //获取Query对象
    //这里要注意:写hql语句时,里面的列名不再是数据表中的列名,而是实体类的属性名,写的时候不要弄错了

    //Query<Customer> query  = session.createQuery("from Customer where custName = 'aa' ");

    Query<Customer> query  = session.createQuery("from Customer where custName = :name ");
    query.setParameter("name", "aa");

    //获取结果集
    List<Customer> list = query.list();
    for (int i = 0; i < list.size(); i++) {
        Customer customer = list.get(i);
        System.out.println(customer.toString());
    }
    tx.commit();
    }

    //排序查询
    @Test
    public void test03(){
    Session session = HibernateUtil.getCurrentSession();
    Transaction tx = session.beginTransaction();
    //获取Query对象
    Query<Customer> query  = session.createQuery("from Customer");
    //获取结果集
    List<Customer> list = query.list();
    for (int i = 0; i < list.size(); i++) {
        Customer customer = list.get(i);
        System.out.println(customer.toString());
    }
    tx.commit();
    }

    //分页查询
    @Test
    public void test04(){
    Session session = HibernateUtil.getCurrentSession();
    Transaction tx = session.beginTransaction();
    //获取Query对象
    Query<Customer> query  = session.createQuery("from Customer");
    //分页查询
    //设置查询开始记录索引
    query.setFirstResult(0);
    //设置查询记录的条数
    query.setMaxResults(2);
    //相当于mysql中的    limit 0,2

    //获取结果集
    List<Customer> list = query.list();
    for (int i = 0; i < list.size(); i++) {
        Customer customer = list.get(i);
        System.out.println(customer.toString());
    }
    tx.commit();
    }

    /*
     * 
     * 统计查询
     * 聚合函数:count sum avg max min
     */

    @Test
    public void test05(){
    Session session = HibernateUtil.getCurrentSession();
    Transaction tx = session.beginTransaction();
    //获取Query对象
    Query query  = session.createQuery("select count(*) from Customer");
    //获取结果集
    //当返回的结果唯一时,使用uniqueResult()方法
    long sum = (long) query.uniqueResult();
    System.out.println(sum);

    tx.commit();
    }

    /*
     * 投影查询
     * 
     * 当我们查询时,只需要部分对象,而不是全部,并且希望返回结果用实体类来封装
     * 投影查询用法:
     *  
     */
    @Test
    public void test06(){
    Session session = HibernateUtil.getCurrentSession();
    Transaction tx = session.beginTransaction();
    //获取Query对象
    //Query query  = session.createQuery("select custid,custName from Customer");
    /*
     * 在select语句中使用new语句,并且实体类最好写限定名称即   包名.实体类名
     * 在实体类中添加对应参数列表的构造函数
     * 
     */
    Query query  = session.createQuery("select new entity.Customer(custid,custName) from Customer");
    //获取结果集
    List<Customer> list = query.list();
    for (int i = 0; i < list.size(); i++) {
        Customer customer = list.get(i);
        System.out.println(customer.toString());
    }
    tx.commit();    
    }



}

猜你喜欢

转载自blog.csdn.net/qecode/article/details/80934585
今日推荐