工具类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;
- }
- }
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();
- }
- }