在编写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");
}
很简陋的一个想法,只望能抛砖引玉.
分享到:
相关推荐
数据库主键设计原则:我在设计主键,会采用字符型的.不采用自动递增,在新增记录时,系统生成主键值.一般为全数字进行存入,至于主键值的生成规则,可以按需求进行规则定义.如果没有特殊的要求,只是为了保持唯一...
介绍数据库中主键设计的方法,以及各种方法的优点和缺陷。希望大家喜欢
数据库主键和外键设计的原则
数据库主键生成,对主键的操作,主键,标识记录,找到记录 主键
获取数据库所有主键获取数据库所有主键获取数据库所有主键获取数据库所有主键获取数据库所有主键获取数据库所有主键
使用Hibernate的Session对象操作数据库 1.初始化Hibernate:在要使用Hibernate的类的方法中实例化Configuration对象并用Configuration对象的configure()方法将hibernate.cfg.xml中的配置加载到内存,即: ...
J2EE\Hibernate技术\Hibernate中对数据库复合主键的支持.pdf
在我们的数据库设计中,不可逃避的就是数据库表的主键,可能有很多朋友没有深入思考过,主键的设计对整个数据库的设计影响很大,因此我们不得不要重视起来。
数据库pl/sql,sql数据库,建立表,主键,和insert及update
oracle数据库主键自动生成
易语言操作数据库教程之EDB教程第一讲。第一讲:。1.数据库有哪些?。单机: ACCESS SQLITE EDB QE(内存操作的数据库)。网络: MySQL PHP+MySQL 。2.EDB的优势。1.EDB 他是易语言自带的数据库格式。2.EDB 便于操作。3....
数据库中表的主键设计原则收藏
主要介绍了java实现数据库主键生成示例,需要的朋友可以参考下
数据库完整性详解,十分详细,附有详细上机图以及步骤。
数据库的主键加约束创建表创建唯一约束创建默认约束
MySQL数据库主键重复原因分析及处理.pdf
Hibernate多数据库支持解决方案 一、 去掉数据库级的外键关联 二、 如何动态加载.hbm.xml文件 ...五、 hibernate主键生成器(数值型主键操作方法) 六、 Oracle 转换 SQL Server 2000注意 七、 对UTF-8数据库的特殊处理
hibernate 无主键表映射资源说明: 1. 简单Demo 2. Demo对应的sql语句 3. 对应博客文档
在FMDatabase的基础上面扩展了一个利用反射机制来新建数据库字段,无需写任何SQL语句,创建表不需要写,增删改查也不需要,只要继承接口然后给个主键及表就可以进行数据库操作,十分方便。 作者注:里面我有写了一个...
关于Hibernate的各种主键生成策略与配置详解