首页>代码>spring+spring jdbc+spring mvc整合easyui搭建的SQL查询器>/remotesql/src/main/java/org/virtus/study/remotesql/app/base/data/JdbcDaoSupportEx.java
package org.virtus.study.remotesql.app.base.data; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcDaoSupport; import org.springframework.jdbc.support.rowset.SqlRowSet; import org.virtus.study.remotesql.app.base.data.service.SQLPersister; import org.virtus.study.remotesql.app.base.ex.DatabaseNotSupportException; /** * 描述 :spring jdbc 扩展 * * @author Sylar * */ @SuppressWarnings({ "unchecked", "rawtypes" }) public class JdbcDaoSupportEx extends NamedParameterJdbcDaoSupport implements SQLPersister{ private final static int DBTYPE_ORACLE=0; private final static int DBTYPE_MYSQL=1; private int dbmsType=DBTYPE_ORACLE; public void setDbType(String type) { this.dbmsType=type.indexOf("oracle")>=0 ? DBTYPE_ORACLE : DBTYPE_MYSQL; } /** * 描述 : * * @author Sylar * @param sql * @param param * @return */ @Override public Map getOrderedRow(String sql, Object... param) { SqlRowSet rs = this.getJdbcTemplate().queryForRowSet(sql, param); if(rs == null) { return null; } Map result = new LinkedHashMap(); int columnCount = rs.getMetaData().getColumnCount(); for(int i=1; i<=columnCount; i++) { //rs.getMetaData().getColumnName(i) 获取不到别名 改用getColumnLabel //rs.first()判断是否有数据 result.put(rs.getMetaData().getColumnLabel(i), rs.first() ? rs.getString(i) : null); } return result; } /** * 描述 : * * @author Sylar * @param sql * @param params * @return */ @Override public List<?> find(String sql, Object... params) { return this.getJdbcTemplate().query(sql, params, new QueryRowMapper()); } /** * 描述 : * * @author Sylar * @param pageNow * @param pageSize * @param sql * @param params * @return */ @Override public Pager findPagination(int pageNow, int pageSize, String sql, Object... params) { String countSQL = " SELECT count(*) c FROM (" + sql + ") count"; int recordCount = Integer.parseInt(this.getOne(countSQL, params)); int m = (recordCount % pageSize); int pageCount = (int) (recordCount - m) / pageSize + (m > 0 ? 1 : 0); if (pageCount <= 0) pageCount = 1; if (pageNow > pageCount) pageNow = pageCount; if (pageNow <= 0) pageNow = 1; String pageSql = this.getPaginationSql(sql, pageNow, pageSize); Pager pager = new Pager(pageNow, pageSize); pager.setRows(find(pageSql, params)); pager.setRecordCount(recordCount); pager.setPageCount(pageCount); return pager; } /** * 描述 : * * @author Sylar * @param sql * @param pageNow * @param pageSize * @return */ private String getPaginationSql(String sql, int pageNow, int pageSize) { int startPos = (pageNow - 1) * pageSize; switch(this.dbmsType) { case DBTYPE_ORACLE: return this.getPageSqlOracle(sql, startPos, pageSize); case DBTYPE_MYSQL: return this.getPageSqlMysql(sql, startPos, pageSize); } throw new DatabaseNotSupportException("database type is not supported"); } /** * 描述 : * * @author Sylar * @param sql * @param startPos * @param pageSize * @return */ private String getPageSqlMysql(String sql, int startPos, int pageSize) { StringBuffer buff = new StringBuffer(); buff.append(sql).append(" LIMIT ").append(startPos).append(", ").append(pageSize); return buff.toString(); } /** * 描述 : * * @author Sylar * @param sql * @param startPos * @param pageSize * @return */ private String getPageSqlOracle(String sql, int startPos, int pageSize) { StringBuffer buff = new StringBuffer(); int endPos = startPos + pageSize; buff.append("SELECT * FROM (SELECT A.*, ROWNUM rn FROM (").append(sql).append(") a "); buff.append(" WHERE ROWNUM <=").append(endPos).append(") b WHERE b.rn>").append(startPos); return buff.toString(); } /** * 描述 : * * @author Sylar * @param sql * @param params * @return */ @Override public int executeNonQuery(String sql, Object... params) { return this.getJdbcTemplate().update(sql, params); } /** * 描述 : * * @author Sylar * @param sql * @param params * @return */ @Override public String getOne(String sql, Object... params) { SqlRowSet rs = this.getJdbcTemplate().queryForRowSet(sql, params); return rs.next() ? rs.getString(1) : null; } }
最近下载更多
vicgong LV4
2022年5月23日
423256321 LV4
2021年1月7日
爱自己的修罗 LV7
2020年9月29日
cs1994814814 LV8
2020年4月21日
17600446733 LV21
2019年12月23日
花开为君顾 LV6
2019年11月18日
1106547553 LV10
2019年5月5日
zhangxu1111 LV11
2019年1月18日
但愿一生只爱一人 LV7
2018年11月27日
ReynLi LV8
2018年7月31日
最近浏览更多
JIJI994 LV1
5月21日
chen影
2023年10月27日
暂无贡献等级
huangjie123456 LV5
2023年8月7日
sunhao111111 LV2
2023年7月27日
Dominick LV14
2023年6月20日
akbar2020 LV9
2022年8月27日
vicgong LV4
2022年5月23日
wyg1414530637
2022年4月1日
暂无贡献等级
刘亦菲9527 LV15
2022年2月12日
缘------ LV9
2021年8月31日