以HQL查询语句为主的练习。支持源码下载哦!
package com.athl.test;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;
import org.junit.Test;
import com.athl.entity.Person;
import com.athl.utils.HibernateUtils;
public class Mytest {
/**
* 准备测试数据
*/
//@Test
public void save(){
//获取Session对象
Session session=HibernateUtils.getSession();
Transaction t =null;
try {
//开启事务
t = session.beginTransaction();
for(int i=1;i<10;i++){
//执行save操作
session.save(new Person("p"+i,(int)Math.round(Math.random()*100)));
}
//事务提交
t.commit();
} catch (Exception e) {
e.printStackTrace();
//事务回滚
t.rollback();
}
}
/**
* SQL面向二维表(SQLQuery接口,是Query接口的子接口)
*/
@SuppressWarnings("unchecked")
@Test
public void query_SQL(){
//获取Session对象
Session session=HibernateUtils.getSession();
Transaction t =null;
try {
//开启事务
t = session.beginTransaction();
//String sql = "select * from h_person";
String sql = "select * from h_person order by age desc";
//执行操作
List<Person> lp = session.createSQLQuery(sql).addEntity(Person.class).list();
for(Person p : lp){
System.out.println(p);
}
//事务提交
t.commit();
} catch (Exception e) {
e.printStackTrace();
//事务回滚
t.rollback();
}
}
/**
* 面向对象(Query接口)
*/
@Test
public void query_HQL(){
//获取Session对象
Session session=HibernateUtils.getSession();
Transaction t =null;
try {
//开启事务
t = session.beginTransaction();
/*查询所有*/
//String hql = "from Person";
//List<Person> lp = session.createQuery(hql).list();
/*list()与iterate()的区别:
* 1. list()会一次性查出所有符合条件的数据;
* iterate()首先查出所有符合条件数据的id,然后根据id逐个查具体数据.
* 2. list()不会使用缓存机制;
* iterate()会使用缓存机制.
* 优化:
* 第一次 使用list(),以后的查询则用iterate().
*/
/*排序*/
//String hql = "from Person order by age desc";
//List<Person> lp = session.createQuery(hql).list();
/*动态参数*/
//String hql = "from Person where age>? and age<?";
//List<Person> lp = session.createQuery(hql).setInteger(0, 50).setInteger(1, 70).list();
//String hql = "from Person where age>:age";
//List<Person> lp = session.createQuery(hql).setInteger("age", 80).list();
//List<Person> lp = session.createQuery(hql).setParameter("age", 80).list();
/*分页查询*/
//String hql = "from Person";
//int pageNo = 2;//页码
//int dataNum = 3;//每页数据数量
//int starIndex = (pageNo - 1) * dataNum;
//List<Person> lp = session.createQuery(hql).setFirstResult(starIndex).setMaxResults(dataNum).list();
/*模糊查询*/
//String hql = "from Person where age like :age";
//List<Person> lp = session.createQuery(hql).setString("age", "%2%").list();
/*投影查询(entity中要有相应的构造函数)*/
//String hql = "select new Person(pname,age) from Person";
//List<Person> lp = session.createQuery(hql).list();
//for(Person p : lp){
// System.out.println(p);
//}
/*单一查询*/
//String hql = "from Person where id = :id";
//Person p = (Person) session.createQuery(hql).setInteger("id", 3).uniqueResult();
//System.out.println(p);
/*聚合函数*/
//String hql = "select count(*) from Person";
//Long count = (Long) session.createQuery(hql).uniqueResult();
//System.out.println(count);
/*分组查询*/
//String hql="select age from Person group by age having count(age)>?";
//List<Integer> list = session.createQuery(hql).setInteger(0, 1).list();
//System.out.println(list);
/*命名查询(在类映射文件中配置HQL语句)<query name="queryById">from Person where id = :id</query>*/
Person p = (Person) session.getNamedQuery("queryById").setInteger("id", 3).uniqueResult();
System.out.println(p);
//事务提交
t.commit();
} catch (Exception e) {
e.printStackTrace();
//事务回滚
t.rollback();
}
}
/**
* QBC纯面向对象(Criteria接口,与Query接口无关)
*/
@Test
@SuppressWarnings("unchecked")
public void query_QBC(){
//获取Session对象
Session session=HibernateUtils.getSession();
Transaction t =null;
try {
//开启事务
t = session.beginTransaction();
//执行操作
//List<Person> lp = session.createCriteria(Person.class).list();
List<Person> lp = session.createCriteria(Person.class).addOrder(Order.desc("age")).list();
for(Person p : lp){
System.out.println(p);
}
//事务提交
t.commit();
} catch (Exception e) {
e.printStackTrace();
//事务回滚
t.rollback();
}
}
}