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

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

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

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


OR-Mapping 设计改进(数据修改改进)


内容介绍:

一、支持条件

二、具体操作内容


一、支持条件

下面继续按照同样的思路来解决数据更新问题。本次可以解决的更新只适合于根据主键的更新形式。

在本操作之中依然需要以下支持:

· 拼凑 SQL 语句,但是这个时候的拼凑 SQL ,可需要判断是否有数据。

例如传 name、age,其就可以更新,但没有传 age 只传了 name ,则只更新而name 不更新,所以要进行有选择地处理。

· 而后中间依然需要根据 PreparedStatement 的实例化对象从 VO 里面取出数据。

· 在 AbstractDAO 抽象类之中追加一个 updateSupport()方法,如下:

@Override

public boolean doUpdate(Member vo) throws Exception {

return super.updateSupport(vo) ;

}

这是最终的代码调用形式,本处实现子类的最终调用形式,一定要通过一个办法解决所有问题。


二、具体操作内容

找到 Abstract,跟上 AbstractDAO,再跟上方法public boolean updateSupport(Object vo) {,如下:

/**

* 实现数据的修改处理操作

* @param vo 要修改的数据,此数据之中一定要包含有id

* @return

*/

public boolean updateSupport(Object vo) {

return false

}

1、建立一个 UpdateSupport 的处理类,这个类负责处理更新的一切事物。

· 在创建 SQL 的时候,如果发现某些数据为 null ,那么不应该出现在更新语句之中;

随后新建一个位,SQL 语句应该找到 UPDATE ,表示名称,跟上 SET,再跟上字段=?,中间会有很多这样的结构,最后再跟上 WHERE ,表示主键字段=?,按照以上操作,应在程序中写入String idColumn = Resource.getId(this.vo.getClass().getName()) ;以及String tableName = this.vo.getClass().getSimpleName() ;,Name 与 SimpleName 二者的区别一个是带包一个是不带包。

再跟上

buf.append(“ UPDATE ”).append(tableName).append(“ SET ”) ;,前后加空格并不影响操作,随后进行操作判断,判断那些值不需要改,

跟上

Field fields [ ] = this.vo.getClass().getDeclaredFields();

id 是最后一个进行保存。在进行判断时,目的是判断里面的值有没有内容。

取得值后,值不等于 null 表示不出现这个值,所以说值不等于 null,说明字段需要更新,如果字段需要更新,将字段加到

this.columnsMap.put(foot ++,fields[x].getName());。操作完成后,再跟上this. columnsMap.put(foot ++,idColumns) ;

加完后,还有buf.append(field[x].fetName()).append(“=?,”);来进行操作,再跟上buf.delete(buf.length() -1,buf.length()) ;,追加

buf.append(“WHERE”).append(idColumn).append(“=?,)

,完成操作。之后在 AbstractDAO 中进行验证,找到UpdateSupport updateSupport = new UpdateSupport(vo) ;,

跟上

System.out.println(updateSupport.createSQL());,再回到测试位,将 Update 改为 Edit ,避免 SQL 的关键字问题,但此做的是关于 Update 的测试,则无需改变。

执行程序的测试位,观察 SQL 语句,在不设置年龄、生日的情况下,又换了结果,则说明设置的内容动态地选择是否要进行某个字段的更新处理。

创建 SQL 后,做法与之前相同,用 Support 的处理操作创建 preparedtatement ,然后与之前相同,运用 columnMap 进行操作。跟上 pstmt.executeUpdate() > 0 ;后,动态生成要保证数据存在,执行后测试通过。

完整程序如下:

package.cn.mldn.util.dao.support;

import cn.mldn.util.BeanValueUtils;

import cn.mldn.util.Resources;

import cn.mldn.util.dao.PreparedStatementUtils;

public class UpdateSupport {

private Object vo ;  // 操作的VO对象

private Map<Integer,String> columnMap = new HashMap<Integer,String>()

public UpdateSupport(Object vo) {

this.vo = vo 

}

public String createSQL() {

StringBuffer buf = new StringBuffer() ;

String idColumn = Resource.getId(this.vo.getClass().getName()) ;

String tableName = this.vo.getClass().getSimpleName() ;

buf.append(“UPDATE”).append(tableName).append(“SET”) ;

int foot = 1

Field fields [ ] = this.vo.getClass().getDeclaredFields();

for (int x = 0 ; x <  fields.length ; x++){

if (idColumn.equals(fields[x].getName())) { 

// 不是id列的才可以进行判断

if(BeanValueUtils.getValue(this.vo, fields[x].getName()fields[x].getType()) !=null) ;

this.columnsMap.put(foot ++,fields[x].getName());

buf.append(field[x].fetName()).append(“=?,”);

}

}

}

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

buf.append(“WHERE”).append(idColumn).append(“=?,)

this. columnsMap.put(foot ++,idColumns) ;

return buf.toString() ;   //保存最终的总的SQL语句

}

}

}

2、在 AbstractDAO 类中追加方法:

整个过程中,要清楚所有的开发代码都是一个原型,然后进行功能完善。任何先期开发都有可能出现系统架构设计不合理的情况。

相关文章
|
存储 数据采集 架构师
谈谈数据项目中的Data mapping(数据映射)
企业数据正变得越来越分散和庞大。与此同时,对企业来说,利用数据并将其转化为可操作的见解,变得比以往任何时候都更加重要。
谈谈数据项目中的Data mapping(数据映射)
|
SQL Java 开发者
OR-Mapping 设计改进(数据删除改进) | 学习笔记
简介:快速学习 OR-Mapping 设计改进(数据删除改进)
|
SQL 开发框架 数据处理
OR-Mapping 设计改进(数据增加改进) | 学习笔记
简介:快速学习 OR-Mapping 设计改进(数据增加改进)
107 0
|
SQL 移动开发 开发者
OR-Mapping 设计改进(查询全部改进) | 学习笔记
简介:快速学习 OR-Mapping 设计改进(查询全部改进)
|
Java 开发者
OR-Mapping 设计改进(主键配置) | 学习笔记
简介:快速学习 OR-Mapping 设计改进(主键配置)
|
开发者
OR-Mapping 设计改进(数据层结构调整) | 学习笔记
简介:快速学习 OR-Mapping 设计改进(数据层结构调整)
|
SQL Oracle Java
OR-Mapping 设计改进(结果集元数据) | 学习笔记
简介:快速学习 OR-Mapping 设计改进(结果集元数据)
|
SQL 开发者
OR-Mapping 设计改进(统计查询改进) | 学习笔记
简介:快速学习 OR-Mapping 设计改进(统计查询改进)
|
XML Java 数据库连接
2021-5-13讲课内容hibernate主键id映射_XML方式
概述 项目结构 Student类 hibernate.cfg.xml log4j.properties Student.hbm.xml StudentTest类 理论 常用的五种方式 1. increment: 2. identity主键自增 3.sequence 序列 4. native 5. uuid
221 0
2021-5-13讲课内容hibernate主键id映射_XML方式
|
SQL Java 数据库连接
Hibernate【映射】知识要点(二)
Hibernate【映射】知识要点
146 0
Hibernate【映射】知识要点(二)