前言
在SpringBoot开发时,加入spring-boot-starter-jdbc依赖后,框架会自动注入jdbcTemplate,在使用的地方使用@Autowired注解注入即可使用,jdbcTemplate虽然已经提供了很多方便的api,但是在和实体类结合使用时还是有很多不方便的地方,这里给出一种二次封装的代码
实现
首先引入第三方jar包commons-dbutils
commons-dbutils
commons-dbutils
1.7
JDBCSupport.java
import com.google.common.base.Preconditions;
import com.google.common.base.Throwables;
import com.google.common.collect.Lists;
import com.zxsoft.spider.exception.ServiceException;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.dbutils.BasicRowProcessor;
import org.apache.commons.dbutils.RowProcessor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.simple.SimpleJdbcInsert;
import org.springframework.stereotype.Repository;
@Repository
public class JDBCSupport {
private static final Logger log = LoggerFactory.getLogger(JDBCDao.class);
@Autowired
private JdbcTemplate jdbcTemplate;
private RowProcessor processor = new BasicRowProcessor();
/**
* 方法名:select
* 描述:查询记录.
* @param clazz 转换的实体类
* @param table 表名
* @param column 列名
* @param valueMap where条件,适用于key=value的查询
*/
public List select(String table, String column, Map valueMap, Class clazz) {
StringBuilder sql = new StringBuilder("select ");
sql.append(column).append(" from ").append(table).append(" where 1=1 ");
if (null != valueMap) {
Iterator it = valueMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry) it.next();
sql.append(" and ").append(pair.getKey()).append(" = '").append(pair.getValue()).append("'");
}
}
log.debug("select sql ==" + sql.toString());
List list = null;
try {
list = jdbcTemplate.query(sql.toString(), (rs, rowNum) -> processor.toBean(rs, clazz));
} catch (ServiceException e) {
log.error(Throwables.getStackTraceAsString(e));
}
return list == null ? Lists.newArrayList() : list;
}
/**
* 方法名:select
* 描述:查询记录.
* @param clazz 转换的实体类
* @param sql 原生查询sql
*/
public List select(String sql, Class clazz) {
List list = null;
try {
list = jdbcTemplate.query(sql, (rs, rowNum) -> processor.toBean(rs, clazz));
} catch (ServiceException e) {
log.error(Throwables.getStackTraceAsString(e));
}
return list == null ? Lists.newArrayList() : list;
}
/**
* 方法名:select
* 描述:查询记录.
* @param sql 原生查询sql
* @return 返回map结构的list
*/
public List