在编写CRUD的DAO中,有不少类似的批处理update操作。对多个不同的表这么重复写一次,每次都只是表名有所不同也麻烦。 能否抽象出来统一简化呢?
我经研究给出以下简单的解决方案:
/* written by Wooce Yang,2009/10/09
* 执行依据数据库主键的update操作
* */
public void updateByID(String id, String setFieldStr) {
createQuery("update " + entityClass.getSimpleName() + " set " + setFieldStr + " where " + BeanUtil.getFieldByAnnotation(entityClass, Id.class).getName() + "=" + id + ")").executeUpdate();
}
/* written by Wooce Yang,2009/10/09
* 执行依据数据库主键的批处理update操作
* Entity Class须在主键字段处加上@Id的annotation
* */
public void updateByIDs(String[] ids, String setFieldStr) {
String idsStr = "";
for (int i = 0; i < ids.length; i++) {
if (i > 0)
idsStr += ",";
idsStr += ids[i];
}
createQuery("update " + entityClass.getSimpleName() + " set " + setFieldStr + " where " + BeanUtil.getFieldByAnnotation(entityClass, Id.class).getName() + " in (" + idsStr + ")").executeUpdate();
}
BeanUtil.java:
import java.lang.reflect.Field;
/**
* Author: Wooce Yang
* Date: 2009-10-9
* Time: 15:43:33
*/
public class BeanUtil {
public static Field getFieldByAnnotation(Class beanClass, Class annotationClass) {
Field[] fields = beanClass.getDeclaredFields();
for (Field field : fields) {
if (field.isAnnotationPresent(annotationClass)) {
return field;
}
}
return null;
}
}
同时,要在Entity类中的作为identity的那个字段上加上@Id annotation,上述
BeanUtil类才能工作。例如:
public class Project {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long projectId;
这样,在业务逻辑层只写这样的代码就可以了,很简单吧:
public void deleteProject(String id) {
projectDao.updateByID(id, "deleted=1");
}
public void deleteProjects(String[] ids) {
projectDao.updateByIDs(ids, "deleted=1");
}
很简陋的一个想法,只望能抛砖引玉.
分享到:
相关推荐
在IT行业中,Hibernate是一个非常流行的Java对象关系映射(ORM)框架,它简化了数据库与Java应用程序之间的数据交互...通过理解并实践上述步骤,你可以有效地管理和操作数据库,同时享受到Hibernate带来的便捷和效率。
虽然这种方式需要编写更多代码,但可以提供更高的灵活性和对数据库操作的控制。而Hibernate等ORM工具则提供了更高级的抽象,简化了开发过程,适合大型项目或快速开发。根据项目需求和团队能力,开发者可以选择最适合...
在探讨Hibernate中联合主键的使用时,我们首先需要理解什么是联合主键以及它在Hibernate框架中的实现方式。联合主键(Composite Primary Key),是指在数据库表中使用两个或多个字段共同作为主键来唯一标识每一行...
在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者通过面向对象的方式操作数据库,极大地简化了数据库操作。在提供的代码片段中,我们可以看到一个`HibernateDao`类,它是对Hibernate...
Hibernate 是一个流行的对象关系映射(ORM)框架,它允许开发者使用 Java 对象来操作数据库,而无需直接编写 SQL 查询。在上述代码中,我们看到了四个核心的 Hibernate 操作:插入(insert)、删除(delete)、更新...
在Java开发中,Hibernate是一个非常流行的持久化框架,它简化了与数据库的交互,使得开发者...同时,它们也体现了Hibernate对SQL操作的封装,使得开发者可以更加专注于业务逻辑的实现,而不是底层的数据库交互细节。
Hibernate通过提供一组API和元数据来实现ORM,它允许开发者使用面向对象的编程方式来操作数据库。其核心组件包括SessionFactory、Session、Query等。SessionFactory是线程安全的,负责创建Session实例;Session是与...
DAO类封装了对数据库的所有操作,内部使用JavaBean进行数据封装。这样,业务逻辑层只需要与DAO交互,而无需关心具体的数据库操作细节。 7. **ORM框架**:虽然可以手动使用JavaBean和JDBC进行数据库操作,但现代开发...
在IT行业中,数据库操作是应用程序开发中的重要环节,而Hibernate作为一种强大的对象关系映射(ORM)框架,极大地简化了Java开发者对数据库的操作。本篇将详细介绍一个基于Hibernate封装的增删改查工具类,该工具类...
它通过XML配置文件或注解来定义对象与数据库表之间的映射关系,使得开发者可以像操作普通Java对象一样操作数据库。在这个项目中,Hibernate被用来管理雇员和部门两个数据库表,实现CRUD(创建、读取、更新、删除)...
Java自定义的类似ORM的数据库操作框架是一种高效且灵活的数据访问解决方案,旨在简化数据库的交互过程,类似于流行的ORM(对象关系映射)框架,如Hibernate和MyBatis。ORM框架的核心理念是将数据库操作转化为面向...
总结来说,Hibernate的基础封装和关系映射涉及到对象状态的管理以及对象到数据库的持久化操作。理解并熟练运用`save()`、`update()`、`saveOrUpdate()`、`persist()`和`merge()`,可以帮助我们更高效地在ORM框架下...
Hibernate内部对JDBC进行了轻量级封装,使得数据操作更加便捷,并提供了丰富的API供开发者使用。 3. **实体类的创建**: 在Hibernate中,你需要创建一个代表数据库表的Java类,例如`User.java`。这类被称为实体类...
本篇将深入探讨Hibernate方法的实现,包括其基本概念、配置、实体类、会话工厂以及各种操作数据库的方法。 1. **Hibernate基础** Hibernate是基于Java的持久层框架,通过XML配置文件或注解来定义对象与数据库表...
在实际项目中,我们通常会创建一个DAO(Data Access Object)层来封装数据库操作。例如,可以创建一个`HibernateUserDAO`类,包含上述的CRUD方法。 ```java public class HibernateUserDAO { private ...
Hibernate是一个强大的对象关系映射(ORM)框架,它在Java开发中扮演着重要角色,使得开发者可以使用面向对象的方式来操作数据库。Hibernate的核心理念是将Java类(POJOs,即Plain Old Java Objects)与数据库中的表...
Hibernate基于JDBC,但对JDBC进行了封装,使我们能够在不直接编写SQL语句的情况下,通过对象模型与数据库交互。 核心接口: 1. Session接口:Session是Hibernate的主要工作接口,它负责执行对象的创建(Create)、...
在这个“hibernate单表操作”视频教程中,我们将深入理解如何使用Hibernate对单一数据库表进行基本的增删改查操作。 首先,我们要了解Hibernate的核心概念。它通过XML配置文件或者注解来建立对象与数据库表之间的...
Hibernate 是一个开源的对象关系映射(ORM)框架,它为Java开发人员提供了一种方便的方式来操作数据库。这个“Hibernate 框架测试版本”包含了一个简化的示例,旨在帮助初学者了解并掌握Hibernate的基本用法。通过此...
通过提供一组丰富的API,Hibernate使得开发者能够在应用中轻松地管理和操作数据库数据。以下是对这些API的详细解析: 1. **访问数据库操作接口** - **Session**:这是与数据库交互的主要接口,提供了对数据库的...