Commons里的DButil

今天试用了一下,感觉还不错。说下需求:
直接用jdbc天天开连接,关连接么的头疼。
要将结果转化为xml格式,这个用XStream格式。
用hibernate来搞这个有点杀鸡用牛刀的意思,如果直接用jdbc又有点繁琐。所以试用了一下这个东西。
看代码:
**
* 一直想弄个自己的RowProcessor,没成功....只好改变策略了,在sql语句中将同名列alias掉
* @author Kaka
*
*/
public class DBUtilTest {

public static Connection getConnection2() throws SQLException,
ClassNotFoundException {
Connection conn = null;

// 从配置文件deploy.properties配置数据库连接
// InputStream is = new FileInputStream("deploy.properties");
// Properties prop = new Properties();
// prop.load(is);
String url = "jdbc:mysql:?";
String user = "";
String password = "";
String connString = url + "user=" + user + "&password=" + password;
// System.out.println(connString);
// 或得连接
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(connString);

return conn;
}

public static void main(String[] args) throws SQLException, ClassNotFoundException {
/**
失败的代码
RowProcessor rp=new BasicRowProcessor(new BeanProcessor(){
protected Person processColumn(ResultSet rs,
int index,
Class<?> propType)
{
try {
if(rs.next()){
Person p=new Person();
try {
p.setName(rs.getString("User.Name"));
//    p.setSupplier(rs.getString("supplier.Name"));
//    p.ID=(rs.getInt("User.ID"));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return p;
}
else
return null;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
});
**/
/**
* 有用的就这么几句
*/
ResultSetHandler<List<Person>> h = new BeanListHandler<Person>(Person.class);//结果处理
QueryRunner run = new QueryRunner();//queryRunner
Connection conn = getConnection2(); // open a connection
try{
//注意这里的alias
List<Person> result = run.query(conn, "SELECT User.ID,User.Name,supplier.Name as Supplier FROM User inner join supplier on supplier.Creator=User.ID", h);     
//XStream的alieas
XStream xs=new XStream();
xs.alias("person", Person.class);
//将结果转化为xml格式
System.out.println( xs.toXML(result));;
} finally {
DbUtils.close(conn); 
}



}
}
person类
package db;

public class Person {
int ID;
String name;
String supplier;

public String getSupplier() {
return supplier;
}
public void setSupplier(String supplier) {
this.supplier = supplier;
}
public int getID() {
return ID;
}
public void setID(int iD) {
ID = iD;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

}

因为可能要用到多表的join等操作,所以字段有可能是会有重名的,这时候直接BeanListHandler<Person>(Person.class)使用它貌似不work,就尝试了自己实现RowProcessor,想覆盖掉 BasicRowProcessor 或则BeanProcessor里面相关的方法,搞了半天没搞定,Google了下也没见有人这么搞...郁闷了一下
返回去看文档,说是可以在数据库查询的alias掉....
这个就简单了
不用这么复杂的要写个自己的转换方法。
由于只是test,所以代码极度不规范,见谅见谅
原文地址:https://www.cnblogs.com/macula7/p/1960404.html