OR-Mapping 设计改进(数据删除改进) | 学习笔记

简介: 简介:快速学习 OR-Mapping 设计改进(数据删除改进)

开发者学堂课程【DAO 开发实战业务分析:OR-Mapping 设计改进(数据删除改进】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/399/detail/5180


OR-Mapping 设计改进(数据删除改进)


内容介绍:

一、简要说明

二、具体内容


一、简要说明

对于现在给出的数据的批量删除处理实际上相对于之前的增加和修改操作要容易许多,因为在整个删除的处理里面就是根据一个指定的 ID,而后使用一个IN操作符进行操作处理而已。

对于删除操作来说,主键跟上的类型有两种。不同的表只要知道表名称与主键名称就可以进行删除。


二、具体内容

1、对于子类(MemberDAOImpl 子类),只需要在方法内部调用一个处理操作即可,如下:

@Override

public boolean doRemoveBatch(Set<String> ids) throws Exception {

return super.removeSupport(ids,Member.class) ;

}

2、随后的重点就需要放在 AbstractDAO 父类里面,如下:

public <T> boolean removeSupport(Set<?> ids,Class<T> cls)

{  

System.out.println(ids.toArray()[0].getClass().getName())

return false ;

}

设置问号,只需要修改,不需要取出,但是是Set集合,Set集合与List集合的最大区别是支不支持取数据,所以取出第0个测试能输出的内容。执行后结果为String类型。

3、定义一个 RemoveSupport 的处理类,这个类需要进行创建 SQL 语句的操作控制,最好通过 PreparedStatement 的动态设计完成。

在进行操作前要传入取出 idType。返回后拼凑语句,DELETE FROM 表名称,WHER 跟上主键列再跟上(),括号里面分为两种值,分别为字符串或数字。

如下:

public <T> boolean removeSupport(Set<?> ids,Class<T> cls){  

RemoveSupport support = new RemoveSupport() ;

String idType = ids.toArray()[0].getClass().getSimpleName()

System.out.println(support.createSQL(type,ids,cls));

return false ;  //可知道id类型

}

然后找到 RemoveSupport,如下:

package cn.mldn.util.dao.support;

import java.util.Set;

public class RemoveSupport  {  //加入泛型保持一致,但过于麻烦,所以保持原型

private Map<Integer,Object> valueMap = new HashMap<Integer, Object>() ;

/**

* 为删除语句之中的PreparedStatement对象设置内容

* @param pstmt

* @param type

*/ 

public void setPreparedStatement(PreparedStatement pstmt,String type) throws Exception {

for(int x = 1;x <= this,valueMap.size() ; x ++) {

if (String“.equals(type)) {           

pstmt.setString(x,this.valueMap.get(x).toString());

} else if (“Integer“.equals(type)) {     pstmt.setInt(x,Intger.parseInt(this.valueMap.get(x).toString()));

}

}

}

/**

* 创建要删除的SQL语句

* @param type ID的数据类型

* @param ids 所有的ID数据

* @param cls VO类型

* @return

*/

public <T> String createSQL(Set<?> ids,Class<T> cls) {  //要接收操作id的所有值,因为需要id设置内容。

StringBuffer buf = new StringBuffer() ;

String tableName = cls.getSimpleName() ;

String idColumn = Resource.getId(cls.getName()) ;

buf.append(“DELETE FROM”).append(tableName).append(“WHERE”).append(idColumn).append(“(“) ;

Iterator<?> iter = ids. iterator() ;

int foot = 1 ;

while (iter.hasNext()) {

buf.append(“?,”) ;

this.valueMap.put(foot ++,iter.next()) ;

}

buf.delete(buf.length() - 1, buf.length()) ;

buf. append(“(“) ;

return buf.toString() ;

}

}

创建 PreparedStatement 时需要用到 Type 。进行执行后仍要进行创建来完善程序,

如下:

public <T> boolean removeSupport(Set<?> ids,Class<T> cls)

{  

RemoveSupport support = new RemoveSupport() ;

String idtype = ids toArray()[0].getClass().getSimpleName()

this.pstmt= this.conn.preparedStatement(support.createSQL(ids,cls)) ;

support.setPreparedStatement(this.pstmt.idType);

return this.pstmt,executeUpdate() == ids.size();

}

回到之前的测试业务位上,执行后操作成功。

对于实际开发之中删除的处理操作流程几乎是固定的。

4、调用操作:

public <T> String createSQL(Set<?> ids,Class<T> cls) {  

StringBuffer buf = new StringBuffer() ;

String tableName = cls.getSimpleName() ;

String idColumn = Resource.getId(cls.getName()) ;

buf.append(“DELETE FROM”).append(tableName).append(“WHERE”).append(idColumn).append(“(“) ;

Iterator<?> iter = ids. iterator() ;

int foot = 1 ;

while (iter.hasNext()) {

buf.append(“?,”) ;

this.valueMap.put(foot ++,iter.next()) ;

}

buf.delete(buf.length() - 1, buf.length()) ;

buf. append(“(“) ;

return buf.toString() ;

}

}

唯一要处理的部分只有主键类型:

Integer、String。

相关文章
|
7月前
|
人工智能 自然语言处理 数据可视化
大模型+BI:一场关乎企业未来生死的数据智能卡位战 | 【瓴羊数据荟】数据MeetUp第四期
随着大模型技术突破,全球企业迎来数据智能革命。Gartner预测,到2027年,中国80%的企业将采用多模型生成式AI策略。然而,数据孤岛与高门槛仍阻碍价值释放。
249 8
大模型+BI:一场关乎企业未来生死的数据智能卡位战 | 【瓴羊数据荟】数据MeetUp第四期
|
存储 Java 开发工具
Warning: Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://sch
构建警告:将新 ns 映射到旧 ns 尝试删除并重新安装 SDK 平台。删除 ~\Android\Sdk\platforms 中的文件夹并下载您需要的 SDK。 编辑:以上以某种方式解决了之前的问题,但是当更新更多外部包时,我再次遇到了同样的问题。这一次,删除 SDK 平台不起作用。相反,我在项目的两个位置更新了 Gradle:
2366 0
|
存储 领域建模 数据库
当谈论DDD到底在谈论什么
DDD领域驱动设计是将业务领域概念和规则映射到软件设计的方法,能打通产品、设计、编码人员的信息壁垒。同时一套设计保持了业务和编码的一一对应。
177 2
|
JavaScript 前端开发 Shell
Shell 脚本编程保姆级教程(上)
Shell 脚本编程保姆级教程(上)
网络中的半双工与全双工
【8月更文挑战第24天】
1425 0
|
监控 负载均衡 中间件
中间件中的gRPC
【6月更文挑战第4天】
168 3
|
机器学习/深度学习 算法 数据挖掘
Python 机器学习算法交易实用指南(一)(1)
Python 机器学习算法交易实用指南(一)
424 4
|
机器学习/深度学习 算法 PyTorch
【PyTorch深度强化学习】带基线的蒙特卡洛策略梯度法(REINFOECE)在短走廊和CartPole环境下的实战(超详细 附源码)
【PyTorch深度强化学习】带基线的蒙特卡洛策略梯度法(REINFOECE)在短走廊和CartPole环境下的实战(超详细 附源码)
312 0
|
前端开发
Nestjs(五)异常处理方式(异常过滤器)
Nestjs(五)异常处理方式(异常过滤器)
268 0
|
关系型数据库 分布式数据库 数据库
PolarDB for PostgreSQL 14:全局索引
PolarDB for PostgreSQL 14 相较于 PostgreSQL 14,提供了更多企业级数据库的特性。本实验将体验其中的全局索引功能。