Hibernate查询

Hibernate查询中分为3种查询:注意:HQL语言,是基于对象进行查询的,不是基于数据库的表。

                 1)HQL :session.createQuery("")

                 2)QBC:session.createCriteria()  ---标准查询

                 3)原生态SQL:session.createSQLQuery()


      我们需要讲的是HQL(Hibernate Query Language),因为它对于现在来说是常用的,原生态查询的话已经不怎么用了,标准查询一般也用得少吧,也没有什么需要讲的。


三、各种查询示例代码:

1、搭建测试的配置环境(创建实体类)

        数据库表:

          Hibernate查询 



         实体类

            package com.entity;
            public class Person {


     private int pid;
     private String pname;
     private int page;
     public Person() {
  super();
       }
     public Person(String pname, int page) {
 super();
 this.pname = pname;
 this.page = page;
        }
    public int getPid() {
return pid;
        }
    public void setPid(int pid) {
this.pid = pid;
        }
    public String getPname() {
return pname;
        }
    public void setPname(String pname) {
this.pname = pname;
         }
    public int getPage() {
return page;
       }
   public void setPage(int page) {
this.page = page;
     }

      }


 

2、配置映射文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2017-11-6 16:38:16 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
    <class name="com.entity.Person" table="PERSON">
        <id name="pid" type="int">
            <column name="PID" />
            <generator class="native" />
        </id>
        <property name="pname" type="java.lang.String">
            <column name="PNAME" />
        </property>
        <property name="page" type="int">
            <column name="PAGE" />
        </property>
    </class>
</hibernate-mapping>


3、在hibernate配置文件中加载映射文件

<mapping resource="com/entity/Person.hbm.xml"></mapping>


4、在测试类中进行查询

package com.test;


import java.util.List;


import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;


import com.entity.Person;


public class TestHQL {

private SessionFactory sessionFactory;
private Session session;
private Transaction transaction;

@Before
public void before(){
//加载配置文件
Configuration configuration=new Configuration().configure();
sessionFactory = configuration.buildSessionFactory();
session = sessionFactory.openSession();
transaction = session.beginTransaction();

}


@After
public void after(){
//提交事物
transaction.commit();
session.clear();
sessionFactory.close();
}
private static final Logger log=Logger.getLogger(TestHQL.class);


//查询
@Test
public void testhql(){

//查询所有
// List<Person> person=session.createQuery("from Person").list();   //这里是查询实体类的名字,HQL查询都是对实体类进行查询,需要查询的条件也是实体类命名的属性


// for (Person person2 : person) {
// log.info(person2.getPname()+"   "+person2.getPage());
// }


//查询一个列
// List<String> li=session.createQuery("select pname from Person").list();
// for (String string : li) {
// //log.info(string);
// System.out.println(string);
// }


//查询某几列    查询结果来源于多张表
// List<Object[]> many=session.createQuery("select pname,page from Person").list();
// for (Object[] objects : many) {
// String pname=objects[0].toString();
// int page=Integer.parseInt(objects[1].toString());
// log.info(pname+"   "+page);
// }

//查询构造方法
// List<Person> per=session.createQuery("select new Person(pname,page) from Person").list();
// for (Person person : per) {
// log.info(person.getPname()+"   "+person.getPage());
// }


// List<Person> getall=session.createCriteria(Person.class).list();
// for (Person person : getall) {
// log.info(person.getPname()+"   "+person.getPage());
// }

}

//通过条件查询
@Test
public void testHQL(){

//查询15-20岁之间
//     List<Person> getage=session.createQuery("from Person where page between 15 and 20").list();
// for (Person person : getage) {
// System.out.println(person);
// }

//   List<Person> getage=session.createQuery("from Person where page between ? and ?").setInteger(0, 15).setInteger(1, 20).list();
// for (Person person : getage) {
// log.info(person.getPname());
// }

// List<Person> getage=session.createQuery("from Person where page between :min and :max").setInteger("min", 15).setInteger("max", 30).list();
// for (Person person : getage) {
// log.info(person.getPname());
// }


//聚合函数查询
// int page=Integer.parseInt(session.createQuery("select max(page) from Person ").uniqueResult().toString());
// log.info(page);
//

// int page=Integer.parseInt(session.createQuery("select sum(page) from Person ").uniqueResult().toString());
//    log.info(page);
//


   //分页
// int currentpage=1;
// int pagesum=2;
// List<Person> persons=session.createQuery("from Person").setFirstResult((currentpage-1)*pagesum).setMaxResults(pagesum).list();
// for (Person person : persons) {
// log.info(person.getPname()+"  "+person.getPage());
// }



//根据年龄排序
List<Person> get=session.createQuery("from Person order by page desc").list();
for (Person person : get) {
log.info(person.getPname());
}

}


}