我返回一个持久化实体 因为设置了延迟加载 ,所以返回到前台后 有的2级属性没有 
因为代码很多不想修改配置文件
而且也不想在service 把需要的属性取出 放到DTO中再返回前台(配了OnpenSessioninView) 因为实在太他妈的多了
json转换工具 用的是 Gson 各位有没有什么好办法

解决方案 »

  1.   

    直接用JDBC:
    public String selectSingleLineToJson(String sql) {// 查询数据,返回String,再组合成json
    try {
    statement = connection.createStatement();
    resultSet = statement.executeQuery(sql);
    ResultSetMetaData rsmd = resultSet.getMetaData();// 计算字段个数
    int col = rsmd.getColumnCount(); // 获得总列数
    String selectItems[] = new String[col];// 创建对象,存储结果,以返回
    resultSet.next();
    StringBuilder sb = new StringBuilder("{");
    for (int j = 0; j < col; j++)
    sb.append("\"" + rsmd.getColumnName(j + 1) + "\":\""
    + resultSet.getString(j + 1) + "\",");
    sb.delete(sb.length() - 1, sb.length());
    sb.append("}");
    resultSet.close();
    return sb.toString();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    return "{\"flag\":\"false\"}";// 出错处理
    } public String selectMultiLineToJson(String sql) {// 查询数据,返回多个String数组,再组合成json数组
    try {
    statement = connection.createStatement();
    resultSet = statement.executeQuery(sql);
    ResultSetMetaData rsmd = resultSet.getMetaData();//
    int col = rsmd.getColumnCount(); // 获得总列数
    StringBuilder sb = new StringBuilder("[");
    for (int i = 0; resultSet.next(); i++) { sb.append("{");
    for (int j = 0; j < col; j++)
    sb.append("\"" + rsmd.getColumnName(j + 1) + "\":\""
    + resultSet.getString(j + 1) + "\",");
    sb.delete(sb.length() - 1, sb.length());
    sb.append("},");
    }
    sb.delete(sb.length() - 1, sb.length());
    if (sb.toString().equals(""))
    return "[{\"flag\":\"false\"}]";// 结果为空,出错处理;
    sb.append("]");
    resultSet.close();
    //System.out.println(sb.toString());
    return sb.toString();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    return "[{\"flag\":\"false\"}]";// 出错处理
    }
      

  2.   

    gson可能是最好的了,毕竟是google搞得吗。持久化的时候,直接持久化json字符串不久得了,Parse是个很快的过程。
      

  3.   

    我们用的是flexJson,听说好用,可以试试