Hibernate查询中分为3种查询:注意:HQL语言,是基于对象进行查询的,不是基于数据库的表。
1)HQL :session.createQuery("")
2)QBC:session.createCriteria() ---标准查询
3)原生态SQL:session.createSQLQuery()
我们需要讲的是HQL(Hibernate Query Language),因为它对于现在来说是常用的,原生态查询的话已经不怎么用了,标准查询一般也用得少吧,也没有什么需要讲的。
三、各种查询示例代码:
1、搭建测试的配置环境(创建实体类)
数据库表:
实体类
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());
}
}
}