1.为什么使用XBlink?
两个项目进行交互,交互方式使用XML。
使用XBlink可以简化此工作。
XBlink项目地址:http://code.google.com/p/xblink/
2.使用方法
首先把XBlink的jar包加入项目的CLASSPATH
在项目中写好两个通用的工具类,内容如下:
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.List;
import org.nutz.log.Log;
import org.nutz.log.Logs;
import org.xblink.XBlink;
import test.AppUser;
/**
* 数据库数据转XML
*
*
*/
@SuppressWarnings("unchecked")
public class DataToXML {
public static Log log = Logs.get();
/**
* 转换用户数据到XML
*
* @throws Exception
*/
public static void buildAppUserUseXBlink(String fileNamePath,List<AppUser> userList) throws Exception{
if(null != userList){
log.info("用户表(app_user)数据转换...");
outPutXMLUseXBlink(userList, new Class[]{AppUser.class}, fileNamePath, "appUser.xml");
}
}
/**
* 使用XBlink生成XML
*
* @param o 准备序列化得对象
* @param classes 对象以及相关对象的class类型
* @param path 路径
* @param fileName 文件名称(只是文件名称)
* @throws Exception
*/
public static void outPutXMLUseXBlink(Object o,Class[] classes,String path,String fileName) throws Exception{
File file = new File(path);
boolean exists = file.exists();
if (exists == false) {
file.mkdirs();
}
String outPath = path + "/" + fileName;
File f = new File(outPath);
FileOutputStream fos = new FileOutputStream(f);
OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
XBlink.registerClassesToBeUsed(classes);
XBlink.toXml(o, osw);
osw.close();
}
}
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import org.nutz.log.Log;
import org.nutz.log.Logs;
import org.xblink.XBlink;
import util.PropertiesManager;
/**
* 将XML转换成对象
*
*
*/
@SuppressWarnings("unchecked")
public class XMLToData {
public static Log log = Logs.get();
/**
* 从XML转换成对象
*
* @param classes 类
* @param fileName XML文件名
* @return Object
* @throws Exception
*/
public static Object getObjectFromXMLUseXBlink(Class[] classes,String fileName) throws Exception{
Object tempObj = getObjectFromXMLUseXBlink(classes, PropertiesManager.SAVE_PATH, fileName);
return tempObj;
}
/**
* 从XML转换成对象
*
* @param classes 类
* @param path 路径
* @param fileName XML文件名
* @return Object
* @throws Exception
*/
public static Object getObjectFromXMLUseXBlink(Class[] classes,String path,String fileName) throws Exception{
path = path + "/" +fileName;
File f = new File(path);
if(f.exists()){//文件存在
FileInputStream fis = new FileInputStream(f);
InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
XBlink.registerClassesToBeUsed(classes);
Object tempObj = XBlink.fromXml(isr);
isr.close();
return tempObj;
}else{
return null;
}
}
}
接下来就是配置model了,配置的关键如下(具体查看XBlink官网):
import lombok.Data;
import org.nutz.dao.entity.annotation.Id;
import org.nutz.dao.entity.annotation.Table;
import org.xblink.annotation.XBlinkConverter;
import org.xblink.annotation.XBlinkOmitField;
import org.xblink.core.convert.converters.singleValue.BooleanConverter;
import org.xblink.core.convert.converters.singleValue.DateConverter;
import org.xblink.core.convert.converters.singleValue.IntegerConverter;
import org.xblink.core.convert.converters.singleValue.LongConverter;
@Table("app_user")
@Data
public class AppUser {
@XBlinkOmitField
@Id
private Long id;
private String username;
private String password;
private String confirmPassword;
private String passwordHint;
private String firstName;
private String lastName;
private String email;
private String phoneNumber;
private String website;
private String address;
@XBlinkConverter(value=IntegerConverter.class)
private Integer version;
@XBlinkConverter(value=BooleanConverter.class)
private boolean enabled;
@XBlinkConverter(value=BooleanConverter.class)
private boolean accountExpired;
@XBlinkConverter(value=BooleanConverter.class)
private boolean accountLocked;
@XBlinkConverter(value=BooleanConverter.class)
private boolean credentialsExpired;
@XBlinkConverter(value=LongConverter.class)
private Long userLevel;
private String birthday;
private String sex;
private String duty;
private String language;
private String mobilePhone;
private String company;
@XBlinkConverter(value=DateConverter.class)
private Date expireTime;
@XBlinkConverter(value=BooleanConverter.class)
private boolean isAdmin;
private String memo;
private String uuId;
private String fullName ;
}
其中,@XBlinkOmitField 是不在生成的XML中显示,@XBlinkConverter 是格式转换,很好理解的。
接着就是如何调用了,具体如下:
/**
* 收集用户信息
*
* @param folder 生成的用户XML地址
* @throws Exception
*/
public static void make(String folder) throws Exception{
List<AppUser> ul = BaseDao.getDao().query(AppUser.class,Cnd.where("id", "<=", "15"),null);
DataToXML.buildAppUserUseXBlink(folder, ul);
}
写到这,剩下的事情也就知道该知道怎么做了吧。
运行下项目,控制台大概输出如下:
生成的XML结果如下:
3.说明下
1)这个例子里面还使用了Nutz框架
2)在model里面使用了 lombok ,省掉了写get和set方法
3)写的不好,凑合看吧