工具类HibernateUtil.java:
package com.cz.util;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
final public class HibernateUtil {
private static SessionFactory sessionFactory=null;
//使用线程局部模式
private static ThreadLocal<Session> threadLocal=new ThreadLocal<Session>();
private HibernateUtil(){};
static {
sessionFactory=new Configuration().configure().buildSessionFactory();
}
//获取全新的全新的sesession
public static Session openSession(){
return sessionFactory.openSession();
}
//获取和线程关联的session
public static Session getCurrentSession(){
Session session=threadLocal.get();
//判断是否得到
if(session==null){
session=sessionFactory.openSession();
//把session对象设置到 threadLocal,相当于该session已经和线程绑定
threadLocal.set(session);
}
return session;
}
//统一的一个修改和删除(批量 hql) hql"delete upate ...??"
public static void executeUpdate(String hql,String [] parameters){
Session s=null;
Transaction tx=null;
try {
s=openSession();
tx=s.beginTransaction();
Query query=s.createQuery(hql);
//先判断是否有参数要绑定
if(parameters!=null&& parameters.length>0){
for(int i=0;i<parameters.length;i++){
query.setString(i, parameters[i]);
}
}
query.executeUpdate();
tx.commit();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
// TODO: handle exception
}finally{
if(s!=null&&s.isOpen()){
s.close();
}
}
}
//这里提供一个根据id返回对象的方法
public static Object findById(Class clazz,java.io.Serializable id){
Session s=null;
Transaction tx=null;
Object obj=null;
try {
s=openSession();
tx=s.beginTransaction();
obj=s.load(clazz, id);
tx.commit();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
// TODO: handle exception
}finally{
if(s!=null&&s.isOpen()){
s.close();
}
}
return obj;
}
//统一的添加的方法
public static void save(Object obj){
Session s=null;
Transaction tx=null;
try {
s=openSession();
tx=s.beginTransaction();
s.save(obj);
tx.commit();
} catch (Exception e) {
if(tx!=null){
tx.rollback();
}
throw new RuntimeException(e.getMessage());
// TODO: handle exception
}finally{
if(s!=null && s.isOpen()){
s.close();
}
}
}
//提供一个统一的查询方法(带分页) hql 形式 from 类 where 条件=? ..
public static List executeQueryByPage(String hql,String [] parameters,int pageSize,int pageNow){
Session s=null;
List list=null;
try {
s=openSession();
Query query=s.createQuery(hql);
//先判断是否有参数要绑定
if(parameters!=null&& parameters.length>0){
for(int i=0;i<parameters.length;i++){
query.setString(i, parameters[i]);
}
}
query.setFirstResult((pageNow-1)*pageSize).setMaxResults(pageSize);
list=query.list();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
// TODO: handle exception
}finally{
if(s!=null&&s.isOpen()){
s.close();
}
}
return list;
}
//提供一个统一的查询方法 hql 形式 from 类 where 条件=? ..
public static List executeQuery(String hql,String [] parameters){
Session s=null;
List list=null;
try {
s=openSession();
Query query=s.createQuery(hql);
//先判断是否有参数要绑定
if(parameters!=null&& parameters.length>0){
for(int i=0;i<parameters.length;i++){
query.setString(i, parameters[i]);
}
}
list=query.list();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
// TODO: handle exception
}finally{
if(s!=null&&s.isOpen()){
s.close();
}
}
return list;
}
//提供一个统一的查询方法 总是返回一个对象
public static Object uniqueQuery(String hql,String [] parameters){
Session s=null;
Object obj=null;
try {
s=openSession();
Query query=s.createQuery(hql);
//先判断是否有参数要绑定
if(parameters!=null&& parameters.length>0){
for(int i=0;i<parameters.length;i++){
query.setString(i, parameters[i]);
}
}
obj=query.uniqueResult();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
// TODO: handle exception
}finally{
if(s!=null&&s.isOpen()){
s.close();
}
}
return obj;
}
}
测试类TestMain.java:
package com.cz.view;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import com.cz.util.*;
import com.sina.domain.Course;
import com.sina.domain.Studcourse;
import com.sina.domain.Student;
public class TestMain{
/**
* @param args
*/
public static void main(String[] args) {
//这里我们使用增强的HibernateUtil来完成curd.
/* String hql="select sname,saddress from Student where sdept=? and sage>?";
String parameters[]={"计算机系","3"};
List<Object[]> list= HibernateUtil.executeQuery(hql,parameters);
for(Object[] s: list){
System.out.println(s[0].toString()+" "+s[1].toString());
}*/
//使用工具分页
/* String hql="select sname,saddress from Student order by sage";
String parameters[]=null;
List<Object[]> list= HibernateUtil.
executeQueryByPage(hql, parameters, 2, 3) ;
for(Object[] s: list){
System.out.println(s[0].toString()+" "+s[1].toString());
}*/
/*添加*/
/* Course c=new Course();
c.setCname("servlet");
c.setCid(4L);
HibernateUtil.save(c);*/
//调用修改/删除
/* String hql="update Student set sage=sage+1 where sdept=?";
String parameters[]={"计算机系"};
try {
HibernateUtil.executeUpdate(hql, parameters);
} catch (Exception e) {
System.out.println(e.getMessage());
// TODO: handle exception
}*/
//请显示所有选择了21号课程的学生信息
/* String hql="select student.sname,student.sdept from Studcourse where course.cid=?";
String parameters[]={"21"};
List<Object[]> list=HibernateUtil.executeQuery(hql, parameters);
for(Object[] s:list){
System.out.println(s[0].toString()+" "+s[1].toString());
}*/
/* String hql="from Studcourse where course.cid=21";
List<Studcourse> list=HibernateUtil.executeQuery(hql, null);
//懒加载我们有一个章节详解.
for(Studcourse sc:list){
System.out.println(sc.getGrade()+sc.getStudent().getSname());
}*/
//查询年龄大于10岁的学生 criteria
Session s=HibernateUtil.getCurrentSession();
Transaction tx=s.beginTransaction();
Criteria cri=s.createCriteria(Student.class);
//添加检索条件
cri.add(Restrictions.gt("sage", new Long(10)));
List<Student> list=cri.list();
for(Student s1: list){
System.out.println(s1.getSname());
}
tx.commit();
}
}