hibernate的查询方式

Hibernate 检索方式

 

Hql查询方式:

以下代码通过查询条件显示数据:

   List list = session.createQuery(

   "from Person p where p.personName = :personName")

   .setString("personName", "scott").list();

 

Hql  like 查询

   List list = session.createQuery(

      "from Person p where p.personName like :personName ")

      .setString("personName", "%a%").list();

 

查询指定范围值:

List list = session.createQuery("from Person p where p.id     > :pid and p.id < :nid")

   .setInteger("pid", new Integer(60))

   .setInteger("nid",new Integer(70))

   .list();

 

for(int i=0;i<list.size();i++){

   Person person = (Person)list.get(i);

   System.out.println("--- id ="+person.getPersonid());

   System.out.println("--- name="+person.getPersonName());

}

在映射文件中定义命名查询语句

Person.hbm.xml 定义如下:

    <query name="findPersonByname">

       <![CDATA[ from Person p where p.personName like :name]]>

</query>

 

程序代码如下:

List list = session.getNamedQuery("findPersonByname")

           .setString("name","%a%").list();

Hql  翻页查询:

   setFirstResult(int firsResult):设定从哪个对象开始检索,参数表示这个对象在查询结果中的索引位置,索引起始值为 0.

   setmaxResult(int maxResult):设定一次最多检索出的对象数目.

以下示例演示了翻页操作 :

      List list = session.createQuery("from Person               p").setFirstResult(5)

           .setMaxResults(5).list();

 

HQL 投影查询:

投影查询是指查询结果仅包括部分实体或者实体的部分属性. 投影是通过 select 关键字来实现的.

 

Hql 投影查询中使用 聚合函数:

 

Query query = session

           .createQuery(

                 "select  max(id) as max,min(id) as min ,sum(id) as sum ,personName from Person group by personName order by personName desc");

List list = query.list();

for (int i = 0; i < list.size(); i++) {

   Object[] object = (Object[]) list.get(i);

   Integer maxid = (Integer) object[0];

   Integer minid = (Integer) object[1];

   Integer sumid = (Integer) object[2];

   String personName = (String)object[3];

}

 

 

也可以返回类实例:

Query query = session.createQuery("select new com.test.pojo.MyPerson(p.personid,p.personName,p.email) from Person p where p.personName like :personName")

           .setString("personName", "%a%");

      List list = query.list();

      Iterator ite = list.iterator();

      while(ite.hasNext()){

        MyPerson myperson = (MyPerson)ite.next();

}

 

 

 

 

QBC (Query  By  Criteria) 查询:

Criteria 接口,Criterion 接口和Expression 类组成。它支持在运行时动态产生查询语句。

 

以下代码返回多条记录:

     List list = session.createCriteria(Person.class)

           .addOrder(

           Order.desc("personName")).list();

 

QBC 显示分页:

List list = session.createCriteria(Person.class)

      .addOrder(Order.desc("personName"))

      .setFirstResult(5)

      .setMaxResults(5).list();

 

QBC 检索单个对象:

      Person person = (Person)                                session.createCriteria(Person.class)

        .setMaxResults(1).uniqueResult();

 

设定查询条件:

List list = session.createCriteria(Person.class)

.add(Restrictions.eq("personName", "jack")).list();

 

以下语句查询不等于 “jack” 的记录

List list = session.createCriteria(Person.class)

      .add(Restrictions

      .not(Restrictions.eq("personName", "jack")))

      .list();

 

以下语句查询指定范围值的记录:

 (gt() 大于, ge()大于等于 ,  lt() 小于,  le()小于等于)

(查询personid 大于67 且小于72的记录)

 

   List list = session.createCriteria(Person.class)

      .add(Restrictions.gt("personid",new Integer(67)))

      .add(Restrictions.le("personid", new Integer(72)))

       .list();

 

 

以下语句查询 Person 表中为空的那些记录:

   List list = session.createCriteria(Person.class)

   .add(Restrictions.isNotNull("tel")).list();

 

以下代码返回 in( ) 列表中相匹配的那些记录

 

String[] personName = { "scott", "mike" };

List list = session.createCriteria(Person.class)

        .add(Restrictions.in("personName", personName))

        .list();

 

 

以下代码返回不等于 in( ) 列表中的那些记录

String[] personName = { "scott", "mike" };

List list = session.createCriteria(Person.class)

.add(Restrictions.not(

      Restrictions.in("personName", personName)))

.list();

 

以下代码演示了  between 用法

List list = session.createCriteria(Person.class)

           .add(Restrictions.between("personid",

            new Integer(47), new Integer(65)))

           .list();

 

以下代码演示了字符串模糊查询:

List list = session.createCriteria(Person.class)

.add(Restrictions.

like("personName", "a", MatchMode.ANYWHERE)).list();

 

 

以下代码演示了逻辑与 的用法 .(返回 person 表中

           pesonName “jack” 并且 personid  大于 71 的记录)

List list = session.createCriteria(Person.class)

   .add(

      Restrictions.and(

      Restrictions.eq("personName","jack"),

      Restrictions.ge("personid",new Integer(71))))

   .list();

 

 

以下代码演示了QBC 迫切左外连接.

FetchMode.DEFAULT ,表示采用映射文件中配置得检索策略.

FetchMode.JOIN

             覆盖映射文件中配置的检索策略,在程序中显示指定

迫切左外连接检索策略.

FetchMode.LAZY :覆盖映射文件中配置的检索策略,中程序中

          显示指定 延迟检索策略

     List list = session.createCriteria(Person.class)

    .setFetchMode("adds",FetchMode.JOIN)

    .add(Restrictions.eq("personName", "jack"))

    .list();

 

以下代码演示了 QBC 内联接

              List list = session.createCriteria(Adds.class)

      .createAlias("person", "p")

      .add(Restrictions.like("p.personName", "a", MatchMode.ANYWHERE))

      .add(Restrictions.like("this.addName", "an", MatchMode.ANYWHERE))

      .list();

 

 

 

投影查询是指查询结果仅包括部分实体或者实体的部分属性. 投影是通过 select 关键字来实现的.

 

以下代码通过投影查询返回记录数量:

 

List list = session.createCriteria(Person.class)

.setProjection(Projections.rowCount())

           .add(

Restrictions.like("personName", "a", MatchMode.ANYWHERE))

           .list();

      for(int i=0;i<list.size();i++){

        Integer count = (Integer)list.get(i);

        System.out.println("--- count ="+count);

      }

 

 

 

 

 

以下代码通过 QBC 投影查询返回指定的列:

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

criteria.setProjection(Projections.projectionList().add(

           Projections.property("personName")).add(

           Projections.property("email")));

      List list = criteria.list();

      Iterator ite = list.iterator();

      while (ite.hasNext()) {

         Object[] object = (Object[])ite.next();

         String personName = (String)object[0];

         String email = (String)object[1];

      }

 

 

 

在投影查询中使用 聚合函数:

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

      criteria.setProjection(

           Projections.projectionList()

           .add(Projections.max("personid"))

           .add(Projections.min("personid"))

           .add(Projections.sum("personid"))

           .add(Projections.property("personName"))

           .add(Projections.avg("personid"))

           .add(Projections.count("personid"))

           .add(Projections.groupProperty("personName")))

           .addOrder(Order.asc("personName"));

      List list = criteria.list();

      for(int i = 0;i<list.size();i++){

        Object[] object = (Object[])list.get(i);

        Integer maxValue = (Integer)object[0];

        Integer minValue = (Integer)object[1];

        Integer sumValue= (Integer)object[2];

        String personname = (String)object[3];

        Double avgValue = (Double)object[4];

        Integer countValue = (Integer)object[5];

       

      }

 

 

以下代码演示了两个表关联后作投影查询:

List list = session.createCriteria(Person.class)

.createAlias("adds","a")

.add(Restrictions.like

                    ("personName", "a", MatchMode.ANYWHERE))

.add(Restrictions.like

                 ("a.addName", "an", MatchMode.ANYWHERE))

.setProjection(Projections.projectionList()

        .add(Projections.property("personid"))

        .add(Projections.property("personName"))

        .add(Projections.property("a.addsid"))

        .add(Projections.property("a.addName")))

           .list();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值