现在java的web application一般都有数据库参与,
在修改和新增的时候,要保存字段,
如果让我们都公共来写这些的话,是比较麻烦的。
为什么不让程序来做?
怎么让程序来做?
Reflect提供实现方案。
第一,要做一配置文件,例如:
<auto-property>
<anto class="test.Person">
<operation name="create">
<property name="name" />
<property name="email" />
<property name="sex" />
<property name="address" />
</operation>
<operation name="modify">
<property name="email" />
<property name="sex" />
<property name="address" />
</operation>
.......
</auto>
</auto-property>
auto 标签标明需要自动赋值字段的类,operation指名要进行赋值的时机,property表示要进行赋值的字段。
第二,写reflect的实现。
这里主要是一个方法
public Object convert(Map params,Class clazz);
params:参数的名字和值
clazz:使用到的实体类的class
这里提供一个参考实现:
public Object convert(Map params,Class clazz,Set properties) throws Exception{
BeanInfo info = Introspector.getBeanInfo(clazz);
PropertyDescriptor [] ps = info.getPropertyDescriptors();
Object toReturn = clazz.newInstance();
for(int i=0;i<ps.length;i++){
PropertyDescriptor p = ps ;
if(properties.contains(p.getName())){
//判断参数的类型
//8种原始类型
//和数种经常采用的类型(如 String java.sql.Date 等)
//这里为了简单说明问题,采用String类型
Object[]pvalue = new Object[1];
//假定需要的参数都能传入
pvalue[0] = params.get(p.getName());
p.getWriteMethod().invoke(toReturn,pvalue);
}
}
return toReturn;
}
该方法还不能直接使用---除非都是用String类型的,否则,应该对那些数据类型进行定义。
第三,解析xml配置文件,并调用实现。
使用之前,我们需要对该xml文件进行解析并缓存(缓存原因?每次都解析是不是很浪费?)。
一般,我们使用Servlet或action等,现在就拿servlet作说明。
HttpServletRequest可以获得所有参数和值,确保参数的字段和属性字段的一致性(这样做起来比较简单,代码量小)。
获得字段的列表后,使用reflect的实现的返回值并进行Cast,就直接能进行数据库操作了。
在修改和新增的时候,要保存字段,
如果让我们都公共来写这些的话,是比较麻烦的。
为什么不让程序来做?
怎么让程序来做?
Reflect提供实现方案。
第一,要做一配置文件,例如:
<auto-property>
<anto class="test.Person">
<operation name="create">
<property name="name" />
<property name="email" />
<property name="sex" />
<property name="address" />
</operation>
<operation name="modify">
<property name="email" />
<property name="sex" />
<property name="address" />
</operation>
.......
</auto>
</auto-property>
auto 标签标明需要自动赋值字段的类,operation指名要进行赋值的时机,property表示要进行赋值的字段。
第二,写reflect的实现。
这里主要是一个方法
public Object convert(Map params,Class clazz);
params:参数的名字和值
clazz:使用到的实体类的class
这里提供一个参考实现:
public Object convert(Map params,Class clazz,Set properties) throws Exception{
BeanInfo info = Introspector.getBeanInfo(clazz);
PropertyDescriptor [] ps = info.getPropertyDescriptors();
Object toReturn = clazz.newInstance();
for(int i=0;i<ps.length;i++){
PropertyDescriptor p = ps ;
if(properties.contains(p.getName())){
//判断参数的类型
//8种原始类型
//和数种经常采用的类型(如 String java.sql.Date 等)
//这里为了简单说明问题,采用String类型
Object[]pvalue = new Object[1];
//假定需要的参数都能传入
pvalue[0] = params.get(p.getName());
p.getWriteMethod().invoke(toReturn,pvalue);
}
}
return toReturn;
}
该方法还不能直接使用---除非都是用String类型的,否则,应该对那些数据类型进行定义。
第三,解析xml配置文件,并调用实现。
使用之前,我们需要对该xml文件进行解析并缓存(缓存原因?每次都解析是不是很浪费?)。
一般,我们使用Servlet或action等,现在就拿servlet作说明。
HttpServletRequest可以获得所有参数和值,确保参数的字段和属性字段的一致性(这样做起来比较简单,代码量小)。
获得字段的列表后,使用reflect的实现的返回值并进行Cast,就直接能进行数据库操作了。