因为设想每个表中存储的对象其实是一个POJO对象,这个表的结构就是这个pojo类,增加这个功能的目的是作为方便数据传输来使用的,可以将每个pojo类存贮成 该类的全名+".xml" 后缀的形式.
也想过使用dom4j, 但是主要是学习JAVA基础,不想过多的引入外部包,尽量使用JDK自带的功能.
最简单的 其实就是输出重定向的实现XML写入.
package cn.iamsese.prj.db.helper;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.lang.reflect.Field;
/**
* JAVA Pojo类转成XML文档的辅助器
* cn.iamsese.prj.db.helper
* 下午03:11:34
* @author vb2005xu [JAVA菜鸟]
*/
public class PojoToXMLHelper {
private PojoToXMLHelper(){
}
/** PojoToXMLHelper 静态对象*/
private static PojoToXMLHelper defaultPojoToXMLHelper ;
/**
* 返回 PojoToXMLHelper 类的 单态实例
* @return PojoToXMLHelper
*/
public static synchronized PojoToXMLHelper getDefaultPojoToXMLHelper(){
if (defaultPojoToXMLHelper == null)
return new PojoToXMLHelper();
return defaultPojoToXMLHelper ;
}
/**
* @param args
*/
public static void main(String[] args) {
UserExtendInfoTest testUser = new UserExtendInfoTest();
testUser.setMobilePhone("1234");
PojoToXMLHelper.getDefaultPojoToXMLHelper().tranlate(testUser);
PojoToXMLHelper.getDefaultPojoToXMLHelper().tranlate(new cn.iamsese.prj.db.core.table.USER_Table());
}
/**
* 转换操作实现
* @param obj
*/
public void tranlate(Object obj){
String fileName = MyReflectionHelper.getClassName(obj) + ".xml" ;
PrintStream pout = null ;
try {
pout = new PrintStream(fileName);
} catch (FileNotFoundException e) {
//记录到日志中 -- 尚未实现
System.out.println("不能创建文件流");
e.printStackTrace();
}
//重定向默认的标准I/O
System.setOut(pout);
System.out.println("<?xml version='1.0' encoding='UTF-8'?>");
System.out.println("<properties>");
//
Field[] fieldArray = obj.getClass().getDeclaredFields();
for(Field field : fieldArray) {
String name = field.getName();
//将首字母大写
name = name.substring(0, 1).toUpperCase()+name.substring(1);
//禁止Java访问权限检查,使能够访问private修饰的属性变量
field.setAccessible(true);
Object text = MyReflectionHelper.getFieldValue(obj, field);
System.out.println("<"+name+">" + text + "</"+name+">");
}
System.out.println("</properties>");
if (pout != null){
pout.close();
}
}
}
class UserExtendInfoTest {
private String userName;
private String mobilePhone;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getMobilePhone() {
return mobilePhone;
}
public void setMobilePhone(String mobilePhone) {
this.mobilePhone = mobilePhone;
}
}
所依赖的自定义的反射类MyReflectionHelper是我自定义的,功能尚显不足.
package cn.iamsese.prj.db.helper;
import java.lang.reflect.Field;
/**
* 自定义的反射工具封装类 cn.iamsese.prj.db.helper
* Author: vb2005xu [JAVA菜鸟]
*/
public class MyReflectionHelper {
/**
* 返回指定对象的类全称[包括包名]
* 支持传入这样的参数: JDKLoggerHelper.class
* @param o
* @return className
*/
public static String getClassName(Object o) {
if (o == null)
throw new NullPointerException("传入的对象为null " + o);
String className = o.getClass().getName();
return className;
}
/* -------- 与 类属性相关的[现在定义的方法只能输出类自身的属性,不包括继承来的属性] --------- **/
/**
* 返回指定对象的的指定字段
*
* @param owner
* @param fieldName
* @return Field
*/
public static Field getField(Object owner, String fieldName) {
Field f = null;
try {
f = owner.getClass().getDeclaredField(fieldName);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
return f;
}
/**
* 设置指定对象的指定字段的值
* @param owner
* @param tf
* @param value
*/
public static void setField(Object owner, Field tf, Object value) {
try {
tf.set(owner, value);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
/**
* 设置指定对象的指定字段的值
* @param owner
* @param fieldName
* @param value
*/
public static void setField(Object owner, String fieldName, Object value) {
Field f = getField(owner, fieldName);
setField(owner, f, value);// 调用上边的那个此函数的另一种多态形式
}
/**
* 返回指定对象的指定字段的值
* @param owner
* @param tf
* @return Object
*/
public static Object getFieldValue(Object owner, Field tf) {
Object v = null;
try {
v = tf.get(owner);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return v;
}
/**
* 返回指定对象的指定字段的值
* @param owner
* @param fieldName
* @return Object
*/
public static Object getFieldValue(Object owner, String fieldName) {
Field f = getField(owner, fieldName);
return getFieldValue(owner, f);// 调用上边的那个此函数的另一种多态形式
}
/**
* 命令行输出指定对象,指定属性的值
* @param owner
* @param f
*/
public static void printFieldValue(Object owner, Field f) {
System.out.println(getFieldValue(owner, f));
}
/**
* 命令行输出指定对象,指定属性的值
* @param owner
* @param fieldName
*/
public static void printFieldValue(Object owner, String fieldName) {
System.out.println(getFieldValue(owner, fieldName));
}
public static void printFieldInfo(Object owner, Field f) {
StringBuffer sbuf = new StringBuffer();
sbuf.append("**当前字段信息 [开始]**\n");
sbuf.append("Field name: " + f.getName());
sbuf.append("\n");
sbuf.append("Field type: " + f.getType().getName());
sbuf.append("\n");
sbuf.append("Field value: " + getFieldValue(owner, f));
sbuf.append("\n");
sbuf.append("**当前字段信息 [结束]**\n");
System.out.println(sbuf.toString());
}
public static void printFieldInfo(Object owner, String fieldName) {
Field f = getField(owner, fieldName);
printFieldInfo(owner, f);
}
public static void printObjectFieldsInfo(Object owner) {
System.out.println("+++++" + owner.getClass().getName() + "++++开始\n");
Field[] fields = owner.getClass().getDeclaredFields();
for (Field field : fields) {
printFieldInfo(owner, field);
}
System.out.println("+++++" + owner.getClass().getName() + "++++结束");
}
public String toString() {
return "自定义的反射工具封装类";
}
}
USER_Table.JAVA这个文件,见这个系列的前一篇文章的附件
分享到:
相关推荐
使用PD(PowerDesigner)自动生成Hibernate的POJO文件及xml配置文件
Java的几种对象(PO-VO-DAO-BO-POJO)解释
使用MyEclipse工具生成POJO类和映射文件.hbm.xml
使用xstream解析xml,xml与pojo的双向转化,完整的java 工程 带jar包和测试类,可以直接跑
mybatis自动生成dao pojo xml文件工具(SQL server)
需要在项目pom文件的插件节点里面加上逆向生成插件 将配置文件放在项目根目录 <!--mybatis逆向生成插件--> <groupId>org.mybatis.generator <artifactId>mybatis-generator-maven-plugin <version>1.3.6 <!--...
Feign发送Get请求时,采用POJO对象传递参数的最终解决方案.docx
mybatis自动生成dao pojo xml文件工具(mysql)
maven-guvnor-install-pojo-plugin-1.1.0.17-sources.jar
maven-guvnor-install-pojo-plugin-1.1.0.16-sources.jar
maven-guvnor-install-pojo-plugin-1.1.0.15-sources.jar
maven-guvnor-install-pojo-plugin-1.1.0.14-sources.jar
maven-guvnor-install-pojo-plugin-1.1.0.13-sources.jar
maven-guvnor-install-pojo-plugin-1.1.0.12-sources.jar
maven-guvnor-install-pojo-plugin-1.1.0.11-sources.jar
应该保证的是,使用此模块编写的任何XML也必须使用该模块可读:也就是说,我们的目标是进行完整的XML序列化。 从上面开始:有些XML构造模块将无法处理; 包括JAXB支持的某些情况 但是,此模块可能还支持JAXB无法...
写好配置后,连接数据库,读取所有表,自动生成pojo和mybatis xml增删改查字段信息。剩下的工作就是复制-粘贴-修改。生成的pojo里面只有成员变量没有set/get方法,因为生成代码麻烦但是在eclipse里面添加这个很简单...
[强烈推荐, 文档不多, 很快就可以看完, 看完了, 就会使用play了] 目录 MVC应用程序模型 - 7 - app/controllers - 8 - app/models - 8 - app/views - 8 - 请求生命周期 - 8 - 标准应用程序布局layout - 9 - app...
POJO对象绑定 - 29 - JPA 对象绑定 - 30 - 定制绑定 - 30 - @play.data.binding.As - 30 - @play.data.binding.NoBinding - 31 - play.data.binding.TypeBinder - 31 - @play.data.binding.Global - 32 - 结果类型 -...
mybatis自动生成dao pojo xml文件 (mysql)