因为设想每个表中存储的对象其实是一个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这个文件,见这个系列的前一篇文章的附件
分享到:
相关推荐
使用 MyEclipse 工具生成 POJO 类和映射文件 .hbm.xml MyEclipse 是一款功能强大且流行的集成开发环境(IDE),它提供了许多实用的功能来帮助开发者快速开发应用程序。在本篇文章中,我们将学习如何使用 MyEclipse ...
### 使用PD(PowerDesigner)自动生成Hibernate的POJO文件及xml配置文件 #### 知识点解析 **一、Hibernate框架简介** Hibernate是一个强大的对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互。...
### Feign发送Get请求时,采用POJO对象传递参数的最终解决方案 #### 前言 在Spring Cloud技术栈中,Feign作为一种声明式的HTTP客户端框架,极大地简化了微服务间的HTTP请求调用过程,使其几乎如同调用本地方法一般...
- **用途**:当需要将数据库中的数据转换为Java对象以便于处理时,就会使用到PO。 - **特点**: - 与数据库表结构相对应; - 不包含任何业务逻辑或数据操作行为。 #### 二、VO:Value Object(值对象) 值对象...
在BIRT中,数据源通常可以是数据库连接、XML文件、Web服务等。然而,当数据源为动态生成或者来自复杂的业务逻辑时,直接使用POJO对象作为数据源更为合适。这允许我们直接操作Java对象,避免了中间转换步骤,提高效率...
4. **整合到项目中**:将生成的文件导入到项目中,配置MyBatis的SqlSessionFactory,然后就可以在业务逻辑中直接使用生成的DAO和POJO对象了。 MBG的灵活性体现在其高度可定制化,你可以自定义生成的类和XML文件的...
通过使用MyBatis的代码生成器,我们可以根据数据库表结构自动生成对应的DAO接口、实现类、POJO实体类以及对应的XML配置文件,大大减少了重复性工作。 首先,要使用MyBatis的代码生成器,你需要在项目中引入MyBatis...
1. **解析XML配置文件**:使用Java的DOM或SAX解析器读取`hibernate.cfg.xml`,获取到所有`<class>`标签的相关信息。 2. **获取表名和字段信息**:从每个`<class>`标签中提取出表名,并通过JDBC连接查询数据库获取表...
4. **整合到项目**: 将生成的代码导入到项目中,配置MyBatis的主配置文件(`mybatis-config.xml`),添加Mapper接口和XML文件的路径。 5. **测试功能**: 编写单元测试或者集成测试,确保自动生成的代码能够正常工作...
本项目提供了一个完整的Java工程示例,演示了如何使用XStream实现XML到POJO以及POJO到XML的双向转化,并包含了必要的jar包和测试类,可以直接运行。 XStream是JVM平台上的一个开源库,由XStream Software公司开发,...
Mybatis 自动生成POJO(Plain Old Java Object)、Mapper以及对应的XML配置文件的工具,极大地提高了开发效率,避免了手动编写重复的代码。 POJOs是简单的Java对象,它们代表数据库表中的记录。在Mybatis中,我们...
总的来说,MyBatis XML文件和POJO类的自动生成是一个实用的开发辅助功能,它提升了开发效率,减少了错误的可能性,同时也使得项目结构更加规范。在实际开发中,合理利用这类工具能够极大地提高开发团队的生产力。
MyEclipse中自动生成Hibernate的POJO、DAO和hbm.xml文件 MyEclipse是一款功能强大且流行的集成开发环境(IDE),它提供了许多实用的功能来帮助开发者快速构建和维护项目。其中,MyEclipse提供了对Hibernate的支持,...
- Hibernate:在Hibernate中,POJO作为持久化对象,通过注解或XML配置与数据库表进行映射。查询时,Hibernate将SQL结果自动转化为POJO实例。 - MyBatis:MyBatis允许开发者自由编写SQL,将结果集映射到POJO,提供...
在Android开发中,有时我们需要从服务器获取XML格式的数据,并将其转换为对应的Java对象(POJO,Plain Old Java Object)。这个过程通常称为XML解析。在给定的场景中,"parse xml string from url to POJO"涉及到的...
应该保证的是,使用此模块编写的任何XML也必须使用该模块可读:也就是说,我们的目标是进行完整的XML序列化。 从上面开始:有些XML构造模块将无法处理; 包括JAXB支持的某些情况 但是,此模块可能还支持JAXB无法...
这个压缩包文件“generator”很可能包含了一套MyBatis代码生成器的配置和脚本,用于自动生成DAO接口、POJO(Plain Old Java Object)类以及对应的Mapper XML文件。 首先,我们来了解一下DAO(Data Access Object)...
需要在项目pom文件的插件节点里面加上逆向生成插件 将配置文件放在项目根目录 <!--mybatis逆向生成插件--> <groupId>org.mybatis.generator <artifactId>mybatis-generator-maven-plugin <version>1.3.6 <!--...
Mybatis是一款广受欢迎的Java持久层框架,它简化了数据库操作与对象模型之间的映射,提供了灵活的SQL映射和基于XML或注解的配置方式。在开发过程中,经常需要手动创建POJO(Plain Old Java Object)类来作为数据表的...
maven-guvnor-install-pojo-plugin-1.1.0.17-sources.jar