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)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。 如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java – 在调试中运行时如何阻止eclipse在每个捕获的异常时
- java – 创建新的实例类引用
- java – Maven,Jenkins – 如何将项目构建到不同的测试环境
- 为什么Java 8 u31中没有更多的时区文件?
- java – 使用readline()时’run’和’debug’的不同输出
- java – WebSockets和Asynchronous Servlet技术之间的连接是
- java-org.openqa.selenium.UnsupportedCommandException:使
- 无法在java中使用cachingHttpClient缓存HttpResponse?
- java – 为kafka主题配置ACL
- 浅谈Spring5 响应式编程
