`

hibernate的数据库访问例子

阅读更多
Hibernate 是一种强大,高性能的以对象到关系型数据库的持久化服务.开发人员可以基础语言
(包括关联,继承,多态,组合及java的集合框架),开发持久层.
====================================需要导入的Hibernate类包======================================
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.ProjectionList;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;

==================================创建启动配置文件对象和会话工厂对象===============================
 private static Configuration configuration;
 private static SessionFactory sessionFactory;
 static {
  try
  {
   configuration=new Configuration();//创建启动配置文件对象
   configuration.configure("firsthibernate/hibernate.cfg.xml");//对应配置文件路径
   sessionFactory=configuration.buildSessionFactory();//创建会话实例
  }catch(Exception ex)
  {
   ex.printStackTrace();
  }
 }

==================================将持久化对象保存到数据库========================================
首先实例化一个持久化对象,然后设置持久化对象setXXX方法,最后调用事务处理方法
 public void saveStudents(Students students) throws Exception
 {
  Session session =sessionFactory.openSession();//启动一个会话对象用来保存用户会话信息
  Transaction transaction=null;//定义事务对象
  try
  {
   transaction=session.beginTransaction();//使用会话对象的方法,创建事务
   session.save(students);//save方法用来将持久化对象信息保存到数据库
   transaction.commit(); //提交事务,执行查询语句
  }catch(Exception ex)
  {
   if (transaction!=null)
   {
    transaction.rollback();//回滚事务,撤消查询语句
   }
   throw ex;
  }
  finally
  {
   session.close();//关闭会话状态,清空资源
  }
 }
==================================查询数据对象类的条件查询语句====================================
 public List findAllStudents() throws Exception
 {
  Session session =sessionFactory.openSession();//启动一个会话对象用来保存用户会话信息
  Transaction transaction=null;//定义事务对象
  Query qu=null;  //Hibernate 查询接口,能够执行复杂的HQL查询语句
  List studentsList=null; //用来保存所有的持久化类对象,数据的集合
  try
  {
   transaction =session.beginTransaction();//使用会话对象的方法,创建事务
   qu=session.createQuery("from Students where Age=?");//使用会话对象的方法,创建查询接口对象
   //注意:这里Students是持久化类对象,而非数据库表名,Age对应持久化对象的属性
   qu.setInteger(0, new Integer(12));//设置一个Integer类型的查询条件参数
   studentsList=qu.list();//获取持久化对象信息,以List集合的方式返回信息
   transaction.commit();//提交事务,执行查询语句
  }
  catch(Exception ex)
  {
   if (transaction!=null)
   {
    transaction.rollback();//回滚事务,撤消查询语句
   }
   throw ex;
  }
  finally
  {
   session.close();//关闭会话状态,清空资源
  }
  return studentsList;
 }

===================================删除持久化对象信息===============================================
删除时需要先查询出持久化对象的所有信息,最后调用事务处理方法
 public void deleteInfo(Students student) throws Exception 
 {
  Session session =sessionFactory.openSession();//启动一个会话对象用来保存用户会话信息
  Transaction transaction=null;//定义事务对象
  try
  {
   transaction=session.beginTransaction();//使用会话对象的方法,创建事务
   session.delete(student);//delete用来删除持久对象所对应的数据库中的记录
   transaction.commit(); //提交事务,执行查询语句    
  }
  catch(Exception ex)
  {
   if (transaction!=null)
   {
    transaction.rollback();//回滚事务,撤消查询语句
   }
   throw ex;
  }
  finally
  {
   session.close();//关闭会话状态,清空资源
  }
 }
===================================更新持久化对象信息===================================================
修改时需要先查询出持久化对象的所有信息,然后再修改持久化对象的setXXX方法,最后调用事务处理方法
 public void updateInfo(Students student) throws Exception 
 {
  Session session =sessionFactory.openSession();//启动一个会话对象用来保存用户会话信息
  Transaction transaction=null;//定义事务对象
  try
  {
   transaction=session.beginTransaction();//使用会话对象的方法,创建事务
   session.update(student);//udpate方法根据持久化对象的标实符来更新持久化对象所对应的数据库数据
   transaction.commit();//提交事务,执行查询语句
  }catch(Exception ex)
  {
   if (transaction!=null)
   {
    transaction.rollback();
   }
   throw ex;
  }
  finally
  {
   session.close();//回滚事务,撤消查询语句
  }
 }

=======================================查询持久化对象的所有信息===============================================
   transaction=session.beginTransaction();//创建事务,获取开始会话的事务对象
   query=session.createQuery("from Students");//查询出所有的持久化对象信息,方案1
   
   /*query=session.createQuery("from Students s where s.name=? and s.age=?");//按姓名和年龄查询持久化对象,方案2
   query.setString(0, "XiaoHong");  //对应HQL语句中条件值?,根据属性类型,从0参数开始
   query.setInteger(1, new Integer(20));//对应HQL语句中条件值?,根据属性类型,参数1*/
   
   /*query=session.createQuery("from Students s where s.name=:setName and s.age=:setAge");//以:号定义查询参数,方案3
   query.setString("setName", "Tom");  //对应HQL语句中条件参数setName,对应属性类型
   query.setInteger("setAge", new Integer(18));//对应HQL语句中条件参数setAge,对应属性类型*/
   
   //对查询结果进行排序
   //query=session.createQuery("from Students s order by s.name asc");//按姓名对查询结果排序,方案4
   
   //query=session.createQuery("from Students s order by s.name desc");//按姓名对查询结果进行降序,方案5
   
   //对查询结果进行混合排序
   //该混合查询只能以名称按升序的方式进行排序,按年龄降序的查询无效
   //query=session.createQuery("from Students s order by s.name asc,s.age desc");//按姓名升序年龄降序的方式进行排序,方案6
   
   //对查询对果进行分页
   /*query=session.createQuery("from Students");//从起始结果开始,查询出5个满足条件的结果,方案7
   query.setFirstResult(0); //查询结果的起绐位置
   query.setMaxResults(5);  //查询出最多5个满足条件的结果*/
   
   /*query=session.createQuery("from Students");//从起始结果开始,查询出5个满足条件的结果,方案8
   query.setFirstResult(5); //查询结果的位置6开始
   query.setMaxResults(5);  //查询出最多5个满足条件的结果*/
      
   //查询年龄在20岁到30岁之间的学生,方案13
   //query=session.createQuery("from Students s where s.age between 17 and 30");
   
   //查询名称为Andy或Tom或Jian名称的学生,方案14
   //query=session.createQuery("from Students s where s.name in ('Andy','Tom','Jian'))");
   
   //字符串区配运算符(like)
   //查询A开头y结尾的学生信息,方案15
   //query=session.createQuery("from Students s where s.name like 'A%y'");
   
   //查询名称为An开头,长度为4的学生信息,方案16
   //query=session.createQuery("from Students s where s.name like 'An__'");
   
   //对查询结果去掉重复项,方案17
   //query=session.createQuery("select distinct s.name from Students s");

   //分组查询
   //分组查询年龄相同的学生
   //query=session.createQuery("select s.age,count(s.id) from Students s group by s.age");
   
   //加上条件的分组查询年龄相同的学生
   query=session.createQuery("select s.age,count(s.id) from Students s group by s.age having(s.age<20)");
   
   objectList=query.list();//获取查询的持久化对象信息,以集合的方式返回
   Iterator iterator=objectList.iterator();
   while (iterator.hasNext())    
   {
    Object[] obj=(Object[])iterator.next();
    Integer age=(Integer)obj[0];
    Integer count=(Integer)obj[1];
    System.out.println("年龄:"+age+"\t数量:"+count);
   }
   
   //objectList=query.list();//获取查询的持久化对象信息,以集合的方式返回
   transaction.commit();//提交事务,执行数据库操作

===========================================查询持久化对象的单个信息===============================================
   transaction=session.beginTransaction();//创建事务,获取开始会话的事务对象
   //查询持久化对象的单个信息,方案10
   /*query=session.createQuery("from Students");
   query.setMaxResults(1); //查询出最多一个满足条件的结果
   student=(Students)query.uniqueResult();//查询出单个持久化对象信息*/
   
   //查询名称为tom的学生,名称不区分大小,方案11
   /*query=session.createQuery("from Students s where lower(s.name)='tom'");
   query.setMaxResults(1); //查询出最多一个满足条件的结果
   student=(Students)query.uniqueResult();//查询出单个持久化对象信息*/
   
   //查询名称为tom的学生,名称不区分大小,方案12
   query=session.createQuery("from Students s where upper(s.name)='tom'");
   query.setMaxResults(1); //查询出最多一个满足条件的结果
   student=(Students)query.uniqueResult();//查询出单个持久化对象信息

   //设置结果集为1,返回一满足条件的对象
   Criteria criteria=session.createCriteria(Students.class);
   criteria.setMaxResults(1);
   student=(Students)criteria.uniqueResult();//查询出单个持久化对象信息
   
   
   transaction.commit();//提交事务,执行数据库操作

============================================QBC查询方式======================================================
 public List qbcInfo() 
 {
  Session session=sessionFactory.openSession();//创建会话对象,用来保存持久化对象的信息
  Transaction transaction=null;
  Query query=null;//查询接口对象
  List objectList=null;
  try
  {
   transaction=session.beginTransaction();//创建事务,获取开始会话的事务对象
   //QBC查询方式,以持久类为对象查询
   //Criteria criteria=session.createCriteria(Students.class);
   
   //以学生名升序年龄降序的方式进行排序  
   //criteria.addOrder(Order.asc("name"));
   //criteria.addOrder(Order.desc("age"));
   
   //分页查询结果,从第6个查询结果开始,查询满足条件的最多5个参数
   //criteria.setFirstResult(5);
   //criteria.setMaxResults(5);
   
   //查询学生名为Andy的持久化对象   
   //criteria.add(Restrictions.eq("name", "Andy"));
   
   //查询年龄在17岁到20岁之间的持久化对象信息
   //criteria.add(Restrictions.gt("age", new Integer(17)));
   //criteria.add(Restrictions.lt("age", new Integer(20)));
   
   //查询年龄等于20或者为Null的持久化对象
   //criteria.add(Restrictions.or(Restrictions.eq("age", new Integer(20)),
   //   Restrictions.isNull("age")));
   
   //查询学生的平均年龄
   /*criteria.setProjection(Projections.avg("age"));        
   objectList=criteria.list(); 
   Iterator iterator=objectList.iterator();
   Object obj=(Object)iterator.next();    
   System.out.println("平均年龄为:"+obj);*/
   
   //对年龄进行分组查询
   ProjectionList projectionList=Projections.projectionList();
   projectionList.add(Projections.groupProperty("age"));//以年龄进行分组
   projectionList.add(Projections.rowCount()); //统计人数
   Criteria criteria=session.createCriteria(Students.class);
   criteria.setProjection(projectionList);//查询每个年龄各有多少人      
   objectList=criteria.list(); 
   Iterator iterator=objectList.iterator();
   while (iterator.hasNext())
   {
    Object[] obj=(Object[])iterator.next();
    System.out.println("分组年龄:"+obj[0]+"\t人数:"+obj[1]);
   }
   
   transaction.commit();//提交事务,执行数据库操作 
  }


============================================(关联映射)内连接查询==================================================
 public static List selectInfo(){
  Session session=getSession();
  Transaction transaction=null;
  Query query=null;
  List studentsList=null;
  try{
   transaction=session.beginTransaction();
   query=session.createQuery("from Booklist b inner join b.students s where b.booklistIndex<3");
   studentsList=query.list();
   Iterator iterator=studentsList.iterator();
   while (iterator.hasNext()){
    Object[] objList=(Object[])iterator.next();   
    Booklist booklists=(Booklist)objList[0];
    Students student=(Students)objList[1];
    System.out.print("借书ID:"+booklists.getId()+"\t借书数量:"+booklists.getBooklistIndex());
    System.out.println("学员Id:"+student.getId()+"\t学员姓名:"+student.getName()+"\t学员年龄:"+student.getAge());
   }
   transaction.commit();   
  }catch(Exception ex){
   if (transaction!=null){
    transaction.rollback();
   }
   ex.printStackTrace();
  }finally{
   closeSession();
  }
  return studentsList;
 }
=========================================hibernate中执行SQL====================================
import org.hibernate.SQLQuery;
import org.hibernate.Session;

SQLQuery query1=session.createSQLQuery(sql1); //执行第1个SQL
int sun1=query1.executeUpdate();
分享到:
评论

相关推荐

    springMVC4+Hibernate4整合例子

    总结来说,"springMVC4+Hibernate4整合例子"是一个典型的Java Web项目,通过Maven管理依赖,Eclipse作为开发工具,使用SpringMVC处理请求,Hibernate进行数据操作。整个过程涉及到大量的配置和代码编写,但一旦设置...

    hibernate+struts实现数据库查询的例子

    这个“hibernate+struts实现数据库查询的例子”是针对初学者的一个实践教程,旨在展示如何整合这两个框架来实现数据库的查询操作。下面将详细介绍这两个框架及其整合使用的方式。 `Hibernate`是Java平台上的一款...

    简单的springmvc+hibernate的例子orcale数据库

    在这个"简单的springmvc+hibernate例子orcale数据库"中,我们将深入探讨这两个框架如何协同工作,以及Oracle数据库在其中的角色。 首先,SpringMVC作为Spring框架的一部分,提供了一个模型-视图-控制器(MVC)架构...

    Spring Hibernate 集成的例子

    标题“Spring Hibernate集成的例子”暗示我们将探讨如何将这两个框架整合到一个项目中,实现数据访问层与业务逻辑层的无缝对接。这个例子可能是通过创建一个简单的Java项目,然后引入Spring和Hibernate的相关库,...

    hibernate的简单例子

    Hibernate 是一个开源的对象关系映射(ORM)框架,它允许开发者用面向对象的方式来处理数据库操作。在Java编程环境中,Hibernate 提供了一种桥梁,将复杂的SQL语句与Java对象之间进行解耦,使得开发者可以更专注于...

    myeclipse+mysql+hibernate+struts2增删改查

    在IT行业中,构建一个完整的Web应用常常涉及到多个技术的整合,本项目就是一个很好的例子,它采用了"Myeclipse+MySQL+Hibernate+Struts2"的技术栈来实现数据的增删改查功能。这是一个典型的企业级应用架构,适用于...

    用Hibernate做的例子

    【标题】:“用Hibernate操作数据库的例子” 在Java开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它简化了数据库与Java对象之间的交互。本示例将深入讲解如何利用Hibernate进行数据库操作,尽管可能...

    Hibernate 的第一个例子

    通过这个"Hibernate的第一个例子",我们了解了如何配置Hibernate,创建实体类,设置数据库连接,以及如何进行基本的保存操作。这只是一个起点,Hibernate的完整功能远不止这些,包括关联映射、缓存机制、性能优化等...

    第一个EJB访问数据库例子

    - Bean类,实现了EJB接口并包含数据库访问逻辑。 - 测试代码,用于验证EJB功能的正确性,可能包括数据库查询和更新操作。 综上所述,"第一个EJB访问数据库例子"这个项目将引导我们了解如何在EJB环境中设置和使用...

    Spring与Hibernate整合小例子

    而Hibernate则是一个ORM(Object-Relational Mapping)工具,它简化了数据库操作,将Java对象映射到关系数据库表,实现了对象-关系的解耦。 "Spring与Hibernate整合"是为了实现业务逻辑层和数据访问层的高效协作。...

    高效率的dw+spring+hibernate分页演示例子

    - 使用Hibernate进行数据访问:定义实体类,创建映射文件,并利用Hibernate的Criteria或HQL进行分页查询。 - DWR集成:配置DWR的`dwr.xml`文件,暴露Java方法供JavaScript调用,可能包括获取分页数据的接口。 - 页面...

    Hibernate 的小例子

    在"Hibernate 的小例子"中,我们将深入探讨如何使用Hibernate进行数据库操作。** **一、Hibernate 概述** Hibernate 提供了一种透明的接口,使得Java对象能够被持久化到关系型数据库中。它通过XML配置文件或注解来...

    Hibernate的小例子

    9. **缓存机制**:Hibernate有第一级缓存和第二级缓存,可以提高数据读取效率,减少对数据库的访问。 10. **异常处理**:了解Hibernate常见的运行时异常,如ConstraintViolationException,HibernateException等,...

    android hibernate demo例子

    通过分析和学习这个"android hibernate demo例子",开发者可以了解如何在Android项目中实现ORM,如何处理数据库操作,以及如何在Eclipse环境下调试和测试这些操作。这对于需要处理大量数据存储和检索的Android应用来...

    spring4+hibernate4整合例子

    这个整合例子展示了如何在Eclipse环境中将这两个框架结合在一起,实现一个完整的数据访问层。接下来,我们将深入探讨Spring4、Hibernate4以及JUnit测试的重要知识点。 首先,Spring4作为一款全面的轻量级应用框架,...

    Hibernate 联接池 proxool例子和jar包

    在IT行业中,数据库连接池是优化数据库访问性能的重要技术之一,而Hibernate作为一款流行的Java对象关系映射(ORM)框架,提供了与各种连接池的集成,包括Proxool。本篇将详细介绍如何在Hibernate中使用Proxool作为...

    Struts2+spring+hibernate项目模板例子

    在`applicationContext.xml`中,我们可以定义bean的配置,包括数据库连接池、DAO(数据访问对象)、Service等。Spring AOP允许我们编写切面代码,比如事务管理,使得代码更加模块化。此外,Spring还集成了Hibernate...

    Hibernate3入门例子

    通过这个简单的Hibernate3入门例子,你可以了解到如何在Java Web应用中使用Hibernate进行数据库操作,包括环境搭建、配置、实体类设计、映射文件编写以及基本的CRUD操作。随着对Hibernate的深入学习,你会发现它能极...

    Hibernate连接Mycat例子详解.zip

    `Hibernate连接Mycat例子详解.zip`提供的资源是一个很好的学习材料,它涵盖了从Mycat的配置、数据分片,到Hibernate的配置、实体操作等一系列步骤,帮助开发者理解如何在Java应用中集成这两种技术,实现高效的数据...

Global site tag (gtag.js) - Google Analytics