• 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,所以代码极度不规范,见谅见谅
  • 相关阅读:
    webpack-dev-server坑
    项目问题整理(it)
    webupload在IE9-出现的问题解决
    layer close 关闭层IE9-浏览器崩溃问题解决
    Navicat Premium试用期破解方法(转)
    Navicat试用期破解方法(转)
    关于树莓派Pi2通过UART连接攀藤G5传感器的python
    关于Unicode转为str的方法
    python利用wxpy监控微信公众号
    Android app与PC端交互
  • 原文地址:https://www.cnblogs.com/macula7/p/1960404.html
Copyright © 2020-2023  润新知