`
spring028
  • 浏览: 44679 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Hibernate实现记录的增、删、改和查功能

阅读更多

本节讲述如何使用Hibernate实现记录的增、删、改和查功能。

1 查询

       Hibernate中使用查询时,一般使用Hql查询语句。

HQLHibernate Query Language),即Hibernate的查询语言跟SQL非常相像。不过HQLSQL的最根本的区别,就是它是面向对象的。

使用HQL时需要注意以下几点:

l         大小写敏感

因为HQL是面向对象的,而对象类的名称和属性都是大小写敏感的,所以HQL是大小写敏感的。

Eg.

HQL语句:from Cat as cat where cat.id > 1;from Cat as cat where cat.ID > 1;是不一样的,这点与SQL不同。

l         from子句

Eg. from Cat,该句返回Cat对象实例,开发人员也可以给其加上别名,eg. from Cat as cat,对于多表查询的情况,可参考如下:

from Cat as cat, Dog as dog

其它方面都与SQL类似,在此不再赘述。

接下来讲一个在Hibernate中查询的例子。

1.1简单查询

List list = session.createQuery("from User as user order by user.loginName").list();

1.2带单个参数的查询

List list = session.find("from User as user where user.loginName=?",

                                                          loginName,

                                                          Hibernate.STRING);

1.3多个参数的查询

Eg1. 此例采用“?”占位符的方式

String hql = "from User as user where user.loginName=? and user.orgId=? ";

Query query = session.createQuery(hql);

query.setParameter(1, 'amigo');

query.setParameter(2, new Long(1)) ;

List list = query .list();

Eg2. 此例采用“:paramName”的方式

String hql = "from User as user where user.loginName=:loginName and user.orgId=:orgId ";

Query query = session.createQuery(hql);

query.setParameter('loginName', 'amigo');

query.setParameter('orgId', new Long(1)) ;

List list = query .list();

1.4查询数量

int count  = (Integer) session.createQuery("select count(*) from User").uniqueResult().intValue();

1.5限制查询起始值和数量的查询

这种一般是在记录需要分页的时候需要用到,例如,在如下的代码中,限制查询的开始记录的位置为50,最大查询条数为50

String hql = "from User as user order by user.loginName";

int firstResult= 50;

int maxResults = 50;

Query query = session.createQuery(hql);

query = query.setFirstResult(firstResult);

query.setMaxResults(maxResults);

1.6子查询

在某些情况下,也需要用到子查询,例如在下面的例子中,User为用户对象,UserRole为用户与角色关联对象。如下HQL语句将没有分配角色的用户对象查找出来。

String hql = "from User user where user.loginName"

+ " not in(select ur.user.loginName from UserRole ur) ";

List list = (session.createQuery(hql)).list();

1.7原生SQL查询

对于某些复杂的查询语句,需要调用某种特定的数据库的特定函数才能解决,Hibernate虽然不推荐使用原生SQL语句来查询,因为这将破坏数据库的易移植性,但是Hibernate中也提供了使用原生SQL进行查询的方法,只需要获得连接即可。

Eg. 在下面的例子中,用到了Sql Server数据库中的原生sql语句,如下所示:

String timeUnit = "13";

String sql = "select count(*) count, CONVERT(VARCHAR(" + timeUnit +"),  log.gen_datetime,121) timeUnit " + "from Log log";

SQLQuery query = session.createSQLQuery(sql)

.addScalar("count", Hibernate.INTEGER)

.addScalar("timeUnit", Hibernate.STRING);

List list = query.list();

2 新增

       在数据库中新增记录在Hibernate中不需要使用insert命令,只需要构造新增的对象后,调用Session对象的save(…)方法即可。

2.1新增单个对象

       新增单个对象的实例如下,该实例将在用户表中新增一条记录。

Session session = HibernateSessionFactory.getSession();

         Transaction ts = null;

try {

ts = session.beginTransaction();

                  User user = new User();

                  user.setLoginName("amigo");

                  user.setFullName("阿蜜果");

                  ……

                  session.save(user) ;

                   ts.commit();

} catch (Exception e) {

                  if (ts != null) {

ts.rollback();

}

} finally {

                   HibernateSessionFactory.closeSession();

}

2.2批量新增对象

对于批量新增对象的情况,需要在新增一部分对象后flushclear一次,例如,没批量新增20个对象时手动的flush一次,假设在list为一个用户列表,里面包含很多User对象,那么要将实现这些对象的批量新增,可采用如下方法:

Session session = HibernateSessionFactory.getSession();

Transaction ts = null;

try {

ts = session.beginTransaction();

for (int i = 0; i < list.size(); i++) {

                            User user = (User) list.get(i);

                            session.save(user) ;

                            if (i % 20 == 0) {

         session.flush();

         session.clear();

}

                   }

                   ts.commit();

} catch (Exception e) {

                   if (ts != null) {

ts.rollback();

}

} finally {

                   HibernateSessionFactory.closeSession();

}

3 更新

       hibernate中,更新对象前不需要使用查询语句:update…,一般需要在取得需要更新的持久化对象后,执行Session对象的update(…)方法。例如:

Session session = HibernateSessionFactory.getSession();

Transaction ts = null;

try {

ts = session.beginTransaction();

//取得持久化对象

                   User user = session.get(User.class, "amigo");

                   //对需要修改的属性进行修改

                   user.setFullName("阿蜜果");

                   ……

                   session.update(user) ;

                   ts.commit();

} catch (Exception e) {

                   if (ts != null) {

ts.rollback();

}

} finally {

                  HibernateSessionFactory.closeSession();

}

4 删除

4.1删除单个对象

       一般在取得某对象后,开发人员可以调用Session对象的delete(…)方法删除该对象。

Eg. 下面的实例中取得loginName(主键)为“amigo”的User对象后,将它删除。

Session session = HibernateSessionFactory.getSession();

Transaction ts = null;

try {

ts = session.beginTransaction();

//取得持久化对象

                   User user = session.get(User.class, "amigo");

                   session.delete(user) ;

                   ts.commit();

} catch (Exception e) {

                   if (ts != null) {

ts.rollback();

}

} finally {

                   HibernateSessionFactory.closeSession();

}

4.2批量删除对象

对于批量删除对象的情况,开发人员可以在取得待删除的对象列表后,一个一个的将对象删除,对于每个对象的删除方法,见3.4.1小节。开发人员还可以hql语句来做批量删除。

Eg. 该实例通过delete语句来删除记录,除了loginName为“amigo”的对象为,其余都删除,代码如下所示:

Session session = HibernateSessionFactory.getSession();

Transaction ts = null;

try {

ts = session.beginTransaction();

String hql = "delete User as user where user.loginName != 'amigo'";

Query query = session.createQuery(hql);

int count  = query.executeUpdate();

 ts.commit();

System.out.println("delete count : " + count); //删除条数

} catch (Exception e) {

                   if (ts != null) {

ts.rollback();

}

} finally {

                   HibernateSessionFactory.closeSession();

}

分享到:
评论

相关推荐

    ssh整合开发实现的增删改查功能

    SSH整合开发实现的增删改查功能是Java Web开发中常见的应用场景,SSH指的是Struts2、Spring和Hibernate三个开源框架的组合。这三个框架在企业级应用开发中扮演着重要角色,帮助开发者构建高效、可维护的Web应用。...

    struts+hibernate+mysql做的增删改查小例子

    在这个"struts+hibernate+mysql做的增删改查小例子"中,我们将深入探讨这三个技术如何协同工作来实现数据的CRUD(Create、Read、Update、Delete)操作。 首先,Struts是一个基于MVC设计模式的Java框架,它主要用于...

    struts2+hibernate3实现的增删改查

    在"struts2+hibernate学生信息管理系统"案例中,这些技术被整合起来,实现了对学生成绩、个人信息等的增删改查功能: 1. **实体类**:首先定义学生、课程等实体类,它们对应数据库中的表。 2. **持久化配置**:通过...

    Spring与Hibernate整合实例(博客用户登录增删改查)

    我们将探讨如何将这两个强大的框架——Spring和Hibernate——结合起来,以实现一个博客系统的用户管理功能,包括用户登录、注册、信息修改以及数据的增删改查操作。 **Spring框架** 是一个全面的企业级应用开发框架...

    用struts1实现的增删改查功能

    在这个"用struts1实现的增删改查功能"的例子中,开发者结合了Struts1、Hibernate和Spring这三大流行框架,以实现对数据库数据的基本操作。以下将详细介绍这些技术及其整合方式。 1. **Struts1框架**:Struts1是...

    struts+Hibernate+MySQL简单的增删改查例子

    在实现增删改查功能时,我们需要编写对应的Action类,这些类通常会包含execute方法,根据HTTP请求的参数执行相应的业务逻辑。例如,对于“增加”操作,Action类可能会接收一个User对象,通过Hibernate的save或...

    sping+hibernate+struts2增删改查

    总的来说,Spring、Hibernate和Struts2的组合为Java Web开发提供了一个强大且灵活的平台,使得开发者能够高效地实现"增删改查"等基本业务功能。在学习和实践中,理解这三个框架的核心原理,熟练掌握它们的集成使用,...

    Struts1 Spring Hibernate实现增删改查小项目

    这个"Struts1 Spring Hibernate实现增删改查小项目"提供了一个基础的示例,演示了如何整合这三个框架来构建Web应用。虽然代码质量可能不高,但对于初学者来说,这是一个很好的学习资源,能够理解如何在实际项目中...

    Hibernate+Spring增删改查小例子

    在Java Web开发中,Hibernate和Spring是两个非常重要的框架...通过此示例,你可以学习到如何将这两个框架整合,以及如何实现对数据库的增删改查功能。在实际项目中,还可以进一步探索如分页、缓存、拦截器等高级特性。

    Flex实战-puremvc+java(spring+hibernate)实现增删改查操作

    《Flex实战:PureMVC+Java(Spring+Hibernate)实现增删改查操作》 在本文中,我们将深入探讨如何利用Flex作为前端展示层,结合后端的Java技术栈,包括Spring和Hibernate,来构建一个完整的CRUD(创建、读取、更新、...

    重写hibernate的session简单增删改查

    "重写hibernate的session简单增删改查"是一个针对初学者的实践教程,旨在帮助理解如何在Hibernate中自定义Session的操作,以便更好地控制数据库交互。 一、Hibernate Session Hibernate的Session是与数据库交互的...

    Hibernate实现Oracle中数据的增删改查

    本篇将详细介绍如何使用Hibernate在Oracle数据库中实现数据的增删改查操作。 首先,我们需要了解Hibernate的基本概念。Hibernate是一个对象关系映射(ORM)框架,它通过XML或注解方式将Java类与数据库表进行映射,...

    hibernate与struts增删改查整合实例源代码

    本篇文章将深入探讨`Hibernate`与`Struts`整合实现增删改查功能的实例源代码,以及这两个框架的核心概念和工作原理。 首先,`Hibernate` 提供了一种在Java应用程序中管理和持久化数据的方式,通过将Java对象与...

    springmvc+spring+hibernate实现简单的增删改查和分页

    本项目通过整合这三个框架,实现了基本的数据操作功能,包括增(Add)、删(Delete)、改(Update)和查(Query),以及数据的分页展示。以下是关于这些知识点的详细说明: 1. **Spring MVC**: Spring MVC是...

    struts2和hibernate的增删改查

    综上所述,"struts2和hibernate的增删改查"涉及到Java Web开发中的核心技术和实践,对于想要深入理解Web开发的开发者来说,掌握这两个框架及其整合应用至关重要。通过学习和实践,可以提升开发效率,为项目带来更...

    jAVAfx的增删改查demo文件

    在"jAVAfx的增删改查demo文件"中,我们可以深入学习如何利用JavaFX实现数据管理的基本操作:增加(Add)、删除(Delete)、修改(Modify)和查询(Query)。 1. **JavaFX基础** - JavaFX是Oracle JDK的一部分,...

    struts2+hibernate 增删改查

    以上知识点涵盖了Struts2+Hibernate整合进行增删改查的基础概念和操作流程,通过这样的组合,开发者可以方便地构建出功能完善的Web应用程序。在实际项目中,还需要结合其他技术,如Spring来管理依赖,以及MyBatis等...

    SSH2项目增删改查事例

    在这个"SSH2项目增删改查事例"中,我们可以深入理解如何利用SSH2框架来实现数据库操作的基本功能。 1. **Struts2**:Struts2作为MVC框架,负责处理HTTP请求并分发到相应的Action类,它是业务逻辑的入口。在增删改查...

    一个简单的ssh框架实现的增删改查

    7. 测试代码:可能包含JUnit测试用例,用于验证增删改查功能的正确性。 通过这个项目,你可以学习到如何整合SSH框架,理解它们各自的职责,以及如何在实际开发中应用这些框架来构建一个完整的Web应用。同时,这也是...

Global site tag (gtag.js) - Google Analytics