Hibernate常用API——2

---------------------接上篇------------------------------

3 查询指定列信息

使用投影查询可以得到List<Customer>结果。

我们只须在Customer类中提供name与address作为参数的构造方法就可以了,注意无参数构造也要有。而且HQL语句要写成select new Customer(name,address) from Customer

public class HibernateTest {

    // 查询指定列信息
    @Test
    public void test() {
        Session session = HibernateUtils.openSession();
        session.beginTransaction();

        Query query = session.createQuery("select new Customer(name,address) from Customer"); 
        List<Customer> list = query.list();
        System.out.println(list);

        session.getTransaction().commit();
        session.close();
    }

}

4 条件查询

条件查询,可以使用where关键字。
例,需求:查询name=姓名0的客户。
首先通过无名称参数来完成这个需求。

public class HibernateTest3 {

    // 条件查询,可以使用where关键字
    @Test
    public void test5() {
        Session session = HibernateUtils.openSession();
        session.beginTransaction();

        // 查询name=姓名0的信息
        Query query = session.createQuery("from Customer where name=?"); // 这是一种无名称参数
       //Query query = session.createQuery("from Customer where name=:myname"); // 这是一种有名称参数

        // 要对参数进行赋值
        query.setParameter(0, "姓名0");
        //query.setParameter("myname","姓名0");

        //如果查询结果可以保证就是唯一 的,我们可以使用query. uniqueResult()来得到一个单独对象。
        //Customer customer = (Customer) query.uniqueResult();
        //System.out.println(customer);

        List<Customer> list = query.list();
        System.out.println(list);

        session.getTransaction().commit();
        session.close();
    }

}

5 执行本地sql

SQLQuery sqlQuery=session.createSqlQuery(String sql);
public class HibernateTest3 {

    // 执行本地sql,查询全部
    @Test
    public void test6() {
        Session session = HibernateUtils.openSession();
        session.beginTransaction();

        // 执行 select * from t_customer;
        SQLQuery sqlQuery = session.createSQLQuery("select * from t_customer");

        // 想要将结果封装到Customer对象中
        sqlQuery.addEntity(Customer.class);
        List<Customer> list = sqlQuery.list();
        System.out.println(list);

        session.getTransaction().commit();
        session.close();
    }

}

6 Criteria

Criteria接口与Query接口非常类似,允许创建并执行面向对象的标准化查询。值得注意的是Criteria接口也是轻量级的,它不能在Session之外使用。

得到Criteria:

Criteria criteria = session.createCriteria(Xxx.class);

需求一:查询所有客户。

public class HibernateTest3 {

    // 测试Criteria
    @Test
    public void test8() {
        Session session = HibernateUtils.openSession();
        session.beginTransaction();

        // 得到Criteria
        Criteria criteria = session.createCriteria(Customer.class);

        // 查询所有
        List<Customer> list = criteria.list();
        System.out.println(list);

        session.getTransaction().commit();
        session.close();
    }

}

需求二:分页查询。
分页查询操作与query的方法一样。

需求三:多条件查询。例如查询name=”姓名1”并且address=”上海”的客户。

public class HibernateTest3 {

    // 测试Criteria
    @Test
    public void test8() {
        Session session = HibernateUtils.openSession();
        session.beginTransaction();

        // 得到Criteria
        Criteria criteria = session.createCriteria(Customer.class);

        // 多条件查询
        // 1.查询name='姓名1'
        criteria.add(Restrictions.eq("name", "姓名1")); // where name="姓名1";
        // 2.查询address='上海'
        criteria.add(Restrictions.eq("address", "上海")); // where name="姓名1" and address="上海"
       //组合查询
       //criteria.add(Restrictions.or(Restrictions.eq("name", "姓名1"),Restrictions.eq("address", "上海")));
        Customer customer = (Customer) criteria.uniqueResult();

        session.getTransaction().commit();
        session.close();
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值