JSONObjectRowMapper.java
package com.qcd.db;
import org.springframework.jdbc.core.RowMapper;
import com.alibaba.fastjson.JSONObject;
import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
public class JSONObjectRowMapper implements RowMapper<JSONObject>, Serializable {
public JSONObjectRowMapper(){
super();
}
@Override
public JSONObject mapRow(ResultSet resultSet, int rowNum) throws SQLException {
// 数据库中每行的数据对象
JSONObject rowObj = null;
try {
// ResultSetMetaData 有关 ResultSet 中列的名称和类型的信息。
ResultSetMetaData rsmd = resultSet.getMetaData();
// 每读取一行,新建对象
// 获取表列数
int columnCount = rsmd.getColumnCount();
// 初始化的时候就定好长度可有效提高性能, 参数 true 默认排序有助于签名验证
rowObj = new JSONObject(columnCount,true);
// 列从1开始,要等于
for (int i = 1; i <= columnCount; i++) {
// 获取列名
String columnName = rsmd.getColumnLabel(i);
// 取数据
Object value = resultSet.getObject(columnName);
// 添加到rowObj中
rowObj.put(columnName, value);
}
} catch (SQLException e) {
e.printStackTrace();
}
return rowObj;
}
}
使用方法
@Autowired
@Qualifier("local_JdbcTemplate")
public NamedParameterJdbcTemplate local_JdbcTemplate;
void Main(){
String sql ="SELECT * from user limit :startrow, :pagesize";
MapSqlParameterSource pars = new MapSqlParameterSource();
pars.addValue("startrow", startrow);
pars.addValue("pagesize", pagesize);
List<JSONObject> reportdatas = local_JdbcTemplate.query(sql, pars,new JSONObjectRowMapper());
}
如果你需要获得的 字段名 严格按照字母排序, 可以使用下面这个版本.
package com.qcd.db;
import org.springframework.jdbc.core.RowMapper;
import com.alibaba.fastjson.JSONObject;
import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Comparator;
public class JSONObjectOrderRowMapper implements RowMapper<JSONObject>, Serializable {
public JSONObjectOrderRowMapper (){
super();
}
@Override
public JSONObject mapRow(ResultSet resultSet, int rowNum) throws SQLException {
// 数据库中每行的数据对象
JSONObject rowObj = null;
try {
// ResultSetMetaData 有关 ResultSet 中列的名称和类型的信息。
ResultSetMetaData rsmd = resultSet.getMetaData();
int columnCount = rsmd.getColumnCount();
// 初始化的时候就定好长度可有效提高性能, 默认排序有助于签名验证
rowObj = new JSONObject(columnCount,true);
//重新排序key值
ArrayList<String> sortarray = new ArrayList<String>();
for (int i = 1; i <= columnCount; i++) {
sortarray.add(rsmd.getColumnLabel(i));
}
sortarray.sort(Comparator.naturalOrder());
for (int i = 0; i < columnCount; i++) {
String columnName = sortarray.get(i);
rowObj.put(columnName, resultSet.getObject(columnName));
}
} catch (SQLException e) {
e.printStackTrace();
}
return rowObj;
}
}
参考文章:
https://blog.youkuaiyun.com/qq_41204927/article/details/82153857