由于业务需要,可能存在以下类似model,比如正式表 零时表
那么在很多时候,正式表的model的属性要copy到零时表中,有时候又涉及到对比,如果只涉及一次这种类似的操作,自己set也就无所谓,但类似业务多了,就需要抽象了,反射式比较好的方式,能抽象提取这些操作
用commons的beanUtils 与spring的工具类封装了一个BeanUtilss
public class BeanUtilss {
/**
* 该方法对比不同Bean实例中具有相同属性值是否相等,只对比neww中的属性
* @param neww--系统对象
* @param old--目标对象
*/
public static boolean isChange(Object neww,Object old) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException{
if(neww==null||old==null){
throw new IllegalArgumentException();
}
boolean chanage=false;
Map newwMap=new PropertyUtilsBean().describe(neww);
Map oldMap=new PropertyUtilsBean().describe(old);
newwMap.remove("class");
oldMap.remove("class");
for(Object key:newwMap.keySet()){
if(!equals(newwMap.get(key),oldMap.get(key))){
return true;
}
}
return chanage;
}
/**
* 该方法对比不同Bean实例中具有相同属性值是否相等,只对比neww中的属性
* old属性为neww属性加前缀在preFix
* @param neww--系统对象
* @param old--目标对象
*/
public static boolean isChange(Object neww,Object old,String PreFix) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException{
boolean chanage=false;
Map newwMap=new PropertyUtilsBean().describe(neww);
Map oldMap=new PropertyUtilsBean().describe(old);
newwMap.remove("class");
oldMap.remove("class");
for(Object key:newwMap.keySet()){
if(!equals(newwMap.get(key),oldMap.get(PreFix+key))){
return true;
}
}
return chanage;
}
/**
* spring的BeanUtils功能增强,增加属性规则,copy目标Bean属性加preFix
* @param orig
* @param dest
* @param PreFix
* @param ignoreProperties
*/
public static void CopyProperties(Object orig,Object dest,String PreFix,String[] ignoreProperties) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException{
Map<String,Object> newwMap=new PropertyUtilsBean().describe(orig);
newwMap.remove("class");
Map<String,Object> map=new HashMap<String,Object>();
for(String key:newwMap.keySet()){
map.put(PreFix+key, newwMap.get(key));
}
BeanUtils.copyProperties(map, dest, ignoreProperties);
}
private static boolean equals(Object orig,Object dest){
if(orig==null&&dest!=null){
return false;
}
if((orig instanceof String)&& (dest instanceof String)){
if(StringUtils.isEmpty((String)orig)&&StringUtils.isEmpty((String)dest))
return true;
}
return orig.equals(dest);
}
}
分享到:
相关推荐
对 sqlite 的使用进行简单封装,仅涉及简单的单表 增删改查 , 基于 FMDB,操作基于 model ,数据库表字段与 model 属性一一对应,对 model 整体进行操作, 根据 model 对象自动建表,字段类型只支持 NSString , NSIteger ,...
但由于ControllerContext只有一个model属性可以传递数据,程序员必须把所有需要的数据都打包在一个对象里面设置到model属性里。这种麻烦自然而然会导致这样的可能用法,直接把Controller本身设置为model,这又回到了...
只需定义一个Objective-C类,该类继承自JSONModel,并标注属性类型,然后就可以直接将JSON字符串转化为这个类的实例。这样,你就可以在Model层直接使用这些对象,无需手动解析JSON。 MJExtension是另一个常用的...
:model是v-bind:model的缩写,是绑定自定义属性.它只是将父组件的数据传递给子组件,并没有实现父组件和子组件数据之间的双向绑定。 所以在form表单标签中,并没有向子组件传递数据,所以在input标签中获取不到数据...
1.input 输入框 v-model 绑定的字段名需要根据后台返回的数据动态生成,此时就不可以用 v-model绑定,而是用传统的方法 value 动态绑定,并且用子组件绑定向父组件传递值和事件。 代码如下: //子组件 <input ...
对于XML文件的解析,通常使用如Apache Commons Digester这样的库,它可以自动匹配XML结构并执行相应的操作,如创建对象、设置属性等,简化了代码编写。在上述的`digester-rules`示例中,定义了当解析到`action-...
例如,对于一个数据库表,自动生成的MODEL类会包含该表的所有字段作为类的属性,并且可能还包括一些基本的CRUD(Create, Read, Update, Delete)操作。 在描述中提到的“部分数据存储数据结构”,这可能指的是特定...
通过链接数据库并读取表结构,工具可以生成对应的Model类,这些类通常包含属性来映射数据库字段,并可能包含一些基本的CRUD(Create、Read、Update、Delete)操作方法。 在描述中提到,“可以在exe程序当前目录新建...
在自定义Model时,有时JSON的键名与Model的属性名不一致,这时需要手动定义字段映射,例如使用`@property (nonatomic, strong) NSString * (^keyMapper)(NSString *)`来指定JSON键到Model属性的映射。 6. 类型转换...
本项目以`ModelTest`为例,探讨了如何在Xcode环境中有效地使用Swift构建和操作Model。 首先,理解Model的基本概念。Model是应用中的数据模型,它封装了数据和相关的操作。在Swift中,你可以创建一个类或者结构体来...
- 创建:类似Model,通过`Backbone.Collection.extend()`创建Collection类,实例化时传入一组Model或Model的JSON表示。 - 存储Model:Collection可以通过`add()`、`remove()`等方法添加、移除Model,或者通过`...
这些类通常包含属性,这些属性与数据库表的列相对应,以及可能的方法来处理数据操作。通过这种方式,CodeModel能够帮助开发者快速构建数据访问层(DAL)或实体框架(Entity Framework)。 实现IComparable接口是...
在这个例子中,`v-model`被用来连接`<input>`元素和Vue实例的`inputValue`属性。当你在输入框中输入内容时,`inputValue`的值会实时更新,同时在页面下方的`<p>`元素中展示出来。 除了文本输入框,`v-model`还支持...
其中,"SmartModel"是Laravel中ORM(对象关系映射)的一部分,用于简化数据库操作。 首先,让我们了解什么是ORM。ORM允许开发者使用面向对象的方式来处理数据库操作,无需编写SQL语句。在Laravel中,ORM主要由...
1. **模型层(Model)**:这是应用的核心部分,负责处理业务逻辑和数据操作。在这个用户注册登录的场景中,Model可能会包含User类,该类定义了用户的属性如用户名、密码等,并提供相应的操作方法,如注册、验证、登录...
如果需要自定义,可以在Model类中定义`protected $table`属性。 5. **生成带有字段注释的Model**:某些IDE或插件支持根据数据库表结构自动生成带注释的Model文件,这可以帮助开发者快速了解Model对应表的字段信息。...
在iOS开发中,经常需要将接收到的JSON数据转换为模型对象(Model),以便于操作和显示。"iOS json一键转换Model"是一个针对这个问题的工具库,它提供了方便快捷的方法,帮助开发者快速地将JSON字符串转化为自定义的...
4. **属性注解**:为了使生成的Model类与数据库更好地交互,你可能还需要添加特定的注解,比如`[Key]`标识主键,`[Column]`指定列名,`[Required]`表示非空约束等。这些注解来自于System.ComponentModel....
对于`model-log`,命令可能类似于`composer require example/model-log`。 2. **配置**:安装完成后,需要配置扩展包,这可能涉及注册服务提供者、门面,以及定义日志存储的数据库表结构。 3. **事件监听**:...