加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

JdbcTemplate简易封装

发布时间:2020-05-30 16:08:24 所属栏目:Java 来源:互联网
导读:JdbcTemplate简易封装

下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。

脚本之家小编现在分享给大家,也给大家做个参考。

在本篇博文中,我们将对SpringJDBC提供的JdbcTemplate进行简易封装,使其更加的易用,更加贴近上篇博文中对于SQL管理的设计。
packagecom.kiiwow.framework.database.jdbc;

importjava.sql.ResultSet;
importjava.sql.ResultSetMetaData;
importjava.sql.SQLException;
importjava.util.Date;
importjava.util.HashMap;
importjava.util.Map;

importorg.springframework.jdbc.core.simple.ParameterizedRowMapper;

/**
*
*RowMapper
*@authorleon.gan
*@param<T>
*/
publicabstractclassRowMapper<T>implementsParameterizedRowMapper<T>{

privateMap<String,Integer>columnIndexes;

/**
*每次实际取值之前先判断列名是否在结果集中存在
*/
protectedintfindColumn(ResultSetresultSet,StringcolumnName)throwsSQLException{
if(columnIndexes==null){
buildIndexes(resultSet);
}
Integerindex=columnIndexes.get(columnName);
if(index==null)return-1;
returnindex;
}

/**
*将结果集中的列名和一个迭代数字放入map中映射
*/
privatevoidbuildIndexes(ResultSetresultSet)throwsSQLException{
columnIndexes=newHashMap<String,Integer>();
ResultSetMetaDatameta=resultSet.getMetaData();
intcount=meta.getColumnCount();
for(inti=1;i<count+1;i++){
Stringcolumn=meta.getColumnName(i);
columnIndexes.put(column.toLowerCase(),i);
}
}

protectedStringgetString(ResultSetresultSet,Stringcolumn)throwsSQLException{
returngetString(resultSet,column,null);
}

protectedStringgetString(ResultSetresultSet,Stringcolumn,StringdefaultValue)throwsSQLException{
intcolumnIndex=findColumn(resultSet,column);
if(columnIndex>0)returnresultSet.getString(columnIndex);
returndefaultValue;
}

protectedDategetDate(ResultSetresultSet,Stringcolumn)throwsSQLException{
returngetDate(resultSet,null);
}

protectedDategetDate(ResultSetresultSet,DatedefaultValue)throwsSQLException{
intcolumnIndex=findColumn(resultSet,column);
if(columnIndex>0)returnresultSet.getTimestamp(columnIndex);
returndefaultValue;
}

protectedintgetInt(ResultSetresultSet,Stringcolumn)throwsSQLException{
returngetInt(resultSet,0);
}

protectedintgetInt(ResultSetresultSet,intdefaultValue)throwsSQLException{
intcolumnIndex=findColumn(resultSet,column);
if(columnIndex>0)returnresultSet.getInt(columnIndex);
returndefaultValue;
}

protecteddoublegetDouble(ResultSetresultSet,Stringcolumn)throwsSQLException{
returngetDouble(resultSet,0);
}

protecteddoublegetDouble(ResultSetresultSet,doubledefaultValue)throwsSQLException{
intcolumnIndex=findColumn(resultSet,column);
if(columnIndex>0)returnresultSet.getDouble(columnIndex);
returndefaultValue;
}

publicabstractTmapRow(ResultSetresultSet,introwNum)throwsSQLException;
}
packagecom.kiiwow.framework.database.jdbc;

importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.util.List;

importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
importorg.springframework.jdbc.core.JdbcTemplate;

importcom.kiiwow.framework.log.LogNameConstants;
importcom.kiiwow.framework.util.StopWatch;

/**
*
*JDBCAccess
*
*JDBC执行工具类,仅对原生方法添加了日志记录,并调整了形参列表的顺序,同时使用自定义的RowMapper来替换原生RowMapper
*
*@authorleon.gan
*/
publicclassJDBCAccess{

privatefinalLoggerlogger=LoggerFactory.getLogger(LogNameConstants.SQL_LOGGER);

privateJdbcTemplatejdbcTemplate;

public<T>List<T>find(Stringsql,RowMapper<T>rowMapper,Object...params){
StopWatchwatch=newStopWatch();
try{
returnjdbcTemplate.query(sql,params,rowMapper);
}finally{
logger.debug("find,sql={},params={},elapsedTime={}",newObject[]{sql,watch.elapsedTime()});
}
}

public<T>TfindUniqueResult(Stringsql,Object...params){
StopWatchwatch=newStopWatch();
try{
returnjdbcTemplate.queryForObject(sql,rowMapper);
}finally{
logger.debug("findUniqueResult,watch.elapsedTime()});
}
}

publicintfindInteger(Stringsql,Object...params){
StopWatchwatch=newStopWatch();
try{
returnjdbcTemplate.queryForInt(sql,params);
}finally{
logger.debug("findInteger,watch.elapsedTime()});
}
}

publicStringfindString(Stringsql,newRowMapper<String>(){
@Override
publicStringmapRow(ResultSetresultSet,introwNum)throwsSQLException{
returnresultSet.getString(1);
}
});
}finally{
logger.debug("findString,watch.elapsedTime()});
}
}

publicintinsert(Stringsql,Object...params){
StopWatchwatch=newStopWatch();
try{
returnjdbcTemplate.update(sql,params);
}finally{
logger.debug("insert,watch.elapsedTime()});
}
}

publicintupdate(Stringsql,params);
}finally{
logger.debug("update,watch.elapsedTime()});
}
}

publicintdelete(Stringsql,params);
}finally{
logger.debug("delete,watch.elapsedTime()});
}
}

publicint[]batchExecute(Stringsql,List<Object[]>params){
StopWatchwatch=newStopWatch();
try{
returnjdbcTemplate.batchUpdate(sql,params);
}finally{
logger.debug("batchExecute,watch.elapsedTime()});
}
}

publicJdbcTemplategetJdbcTemplate(){
returnjdbcTemplate;
}

publicvoidsetJdbcTemplate(JdbcTemplatejdbcTemplate){
this.jdbcTemplate=jdbcTemplate;
}

}
packagecom.kiiwow.framework.database.jdbc;

importjava.util.List;

importcom.kiiwow.framework.platform.sqlmapping.SqlMappingAnalyzer;

/**
*对JDBCAccess的封装,对每一个操作分别提供两种形式:
*1)自定义SQL模式,比如在条件查询时,在SQL映射文件中是无法提供动态查询SQL的,这个时候就采用自行编写
*2)指定映射SQL模式,通过指定了SQL别名从SQL映射文件中找到指定的SQL
*
*@authorleon.gan
*
*/
publicfinalclassJDBCAccessContext{

privateJDBCAccessjdbcAccess;

public<T>List<T>findWithOutSqlMapping(Stringsql,Object...params){
returnjdbcAccess.find(sql,rowMapper,params);
}

public<T>List<T>find(Stringalias,Object...params){
Stringsql=SqlMappingAnalyzer.getSpecificSql(alias);
returnjdbcAccess.find(sql,params);
}

public<T>TfindUniqueResultWithOutSqlMapping(Stringsql,Object...params){
returnjdbcAccess.findUniqueResult(sql,params);
}

public<T>TfindUniqueResult(Stringalias,Object...params){
Stringsql=SqlMappingAnalyzer.getSpecificSql(alias);
returnjdbcAccess.findUniqueResult(sql,params);
}

publicintfindIntegerWithOutSqlMapping(Stringsql,Object...params){
returnjdbcAccess.findInteger(sql,params);
}

publicintfindInteger(Stringalias,Object...params){
Stringsql=SqlMappingAnalyzer.getSpecificSql(alias);
returnjdbcAccess.findInteger(sql,params);
}

publicStringfindStringWithOutSqlMapping(Stringsql,Object...params){
returnjdbcAccess.findString(sql,params);
}

publicStringfindString(Stringalias,Object...params){
Stringsql=SqlMappingAnalyzer.getSpecificSql(alias);
returnjdbcAccess.findString(sql,params);
}

publicintinsertWithOutSqlMapping(Stringsql,Object...params){
returnjdbcAccess.insert(sql,params);
}

publicintinsert(Stringalias,Object...params){
Stringsql=SqlMappingAnalyzer.getSpecificSql(alias);
returnjdbcAccess.insert(sql,params);
}

publicintupdateWithOutSqlMapping(Stringsql,Object...params){
returnjdbcAccess.update(sql,params);
}

publicintupdate(Stringalias,Object...params){
Stringsql=SqlMappingAnalyzer.getSpecificSql(alias);
returnjdbcAccess.update(sql,params);
}

publicintdeleteWithOutSqlMapping(Stringsql,Object...params){
returnjdbcAccess.delete(sql,params);
}

publicintdelete(Stringalias,Object...params){
Stringsql=SqlMappingAnalyzer.getSpecificSql(alias);
returnjdbcAccess.delete(sql,params);
}

publicint[]batchExecuteWithOutSqlMapping(Stringsql,List<Object[]>params){
returnjdbcAccess.batchExecute(sql,params);
}

publicint[]batchExecute(Stringalias,List<Object[]>params){
Stringsql=SqlMappingAnalyzer.getSpecificSql(alias);
returnjdbcAccess.batchExecute(sql,params);
}

publicvoidsetJdbcAccess(JDBCAccessjdbcAccess){
this.jdbcAccess=jdbcAccess;
}

publicJDBCAccessgetJdbcAccess(){
returnjdbcAccess;
}

}

以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读