定义操作API
public interface ICommonDao {
/**
* 方法描述:查询出唯一的一条数据,查询不到返回空,查询出多条抛出异常
* @param sql 执行的sql语句
* @param paramMap 参数注入的HashMap对象
* @return 查询到的结果集
* date:2017-07-31
* add by: lurufeng
*/
public Map queryForMap(String sql,Map paramMap) throws SPTException;
/**
* 方法描述:查询出唯一的一条数据,并且将这条数据自动映射成指定的类型返回,查询不到返回空,查询出多条抛出异常.
* @param sql 执行的sql语句
* @param paramMap 参数注入的HashMap对象
* @param clazz 需要自动映射类型的class
* @return 查询到的对象
* date:2017-07-31
* add by: lurufeng
*/
public T queryForObject(String sql,Map paramMap,Class clazz) throws SPTException;
/**
* 方法描述:不带参数查询出唯一的一条数据,并且将这条数据自动映射成指定的类型返回,查询不到返回空,查询出多条抛出异常.
* @param sql 执行的sql语句
* @param clazz 需要自动映射类型的class
* @return 查询到的对象
* date:2017-07-31
* add by: lurufeng
*/
public T queryForObject(String sql,Class clazz) throws SPTException;
/**
* 方法描述:列表查询.
* @param sql 执行的sql语句
* @param paramMap 参数注入的HashMap对象
* @return 查询到的结果集
* date:2017-07-31
* add by: lurufeng
*/
public List
定义API的实现类
@Repository
public class CommonDao extends NamedParameterJdbcDaoSupport implements ICommonDao {
private static final Logger logger = LoggerFactory.getLogger(CommonDao.class);
/**
* 注入dataSource
* @param dataSource
*/
public CommonDao(@Qualifier("dataSource") DataSource dataSource) {
setDataSource(dataSource);
}
/**
* 方法描述:查询出唯一的一条数据,查询不到返回空,查询出多条抛出异常
* @param sql 执行的sql语句
* @param paramMap 参数注入的HashMap对象
* @return 查询到的结果集
* date:2017-07-31
* add by: lurufeng
*/
@Override
public Map queryForMap(String sql, Map paramMap) throws SPTException{
try{
return super.getNamedParameterJdbcTemplate().queryForMap(sql, paramMap);
} catch(EmptyResultDataAccessException e) {
return null;
} catch(Exception e){
throw new SPTException(ResultEnum.ERROR_RESULT_SIZE);
}
}
/**
* 方法描述:查询出唯一的一条数据,并且将这条数据自动映射成指定的类型返回,查询不到返回空,查询出多条抛出异常.
* @param sql 执行的sql语句
* @param paramMap 参数注入的HashMap对象
* @param clazz 需要自动映射类型的class
* @return 查询到的对象
* date:2017-07-31
* add by: lurufeng
*/
@Override
public T queryForObject(String sql, Map paramMap, Class clazz) throws SPTException {
try{
return super.getNamedParameterJdbcTemplate().queryForObject(sql, paramMap, new BeanPropertyRowMapper(clazz));
} catch(EmptyResultDataAccessException e) {
return null;
} catch(Exception e){
throw new SPTException(ResultEnum.ERROR_RESULT_SIZE);
}
}
/**
* 方法描述:不带参数查询出唯一的一条数据,并且将这条数据自动映射成指定的类型返回,查询不到返回空,查询出多条抛出异常.
* @param sql 执行的sql语句
* @param clazz 需要自动映射类型的class
* @return 查询到的对象
* date:2017-07-31
* add by: lurufeng
*/
@Override
public T queryForObject(String sql, Class clazz) throws SPTException{
try{
return this.queryForObject(sql, null,clazz);
} catch(EmptyResultDataAccessException e) {
return null;
} catch(Exception e){
throw new SPTException(ResultEnum.ERROR_RESULT_SIZE);
}
}
/**
* 方法描述:列表查询.
* @param sql 执行的sql语句
* @param paramMap 参数注入的HashMap对象
* @return 查询到的结果集
* date:2017-07-31
* add by: lurufeng
*/
@Override
public List> queryForList(String sql, Map paramMap) throws SPTException{
try{
return super.getNamedParameterJdbcTemplate().queryForList(sql, paramMap);
} catch(Exception e){
logger.error("【查询异常】{}", e.getMessage());
throw new SPTException(ResultEnum.SQL_QUERY_ERROR);
}
}
/**
* 方法描述:不带参数的列表查询
* @param sql 执行的sql语句
* @return 查询到的结果集
* date:2017-07-31
* add by: lurufeng
*/
@Override
public List> queryForList(String sql) throws SPTException {
Map paramMap = new HashMap();
return this.queryForList(sql, paramMap);
}
/**
* 方法描述:列表查询(带分页,page为空时则不进行分页).
* @param sql 执行的sql语句
* @param paramMap 参数注入的HashMap对象
* @return 查询到的结果集
* date:2017-07-31
* add by: lurufeng
*/
public List> queryForList(String sql,Map paramMap,Page page) throws SPTException{
try{
if(page != null){
int count = this.queryForInt(this.getCountSql(sql), paramMap);
page.setTotalRows(count);
return this.queryForList(this.getLimitSql(sql, page.getCurrentPage(), page.getRowsPerPage()), paramMap);
} else {
return this.queryForList(sql, paramMap);
}
} catch(Exception e){
logger.error("【查询错误】{}", e.getMessage());
throw new SPTException(ResultEnum.SQL_QUERY_ERROR);
}
}
/**
* 方法描述:列表查询,并且将每行数据自动映射成对象,形成一个对象列表返回
* @param sql 执行的sql语句
* @param paramMap 参数注入的HashMap对象
* @param clazz 需要自动映射类型的class
* @return 查询到的结果集
* date:2017-07-31
* add by: lurufeng
*/
@Override
public List queryForList(String sql, Map paramMap, Class clazz) throws SPTException{
try{
return super.getNamedParameterJdbcTemplate().query(sql, paramMap, new BeanPropertyRowMapper(clazz));
} catch(Exception e){
logger.error("【查询错误】{}", e.getMessage());
throw new SPTException(ResultEnum.SQL_QUERY_ERROR);
}
}
/**
* 方法描述:不带参数的列表查询,并且将每行数据自动映射成对象,形成一个对象列表返回
* @param sql 执行的sql语句
* @param clazz 需要自动映射类型的class
* @return 查询到的结果集
* date:2017-07-31
* add by: lurufeng
*/
@Override
public List queryForList(String sql, Class clazz) throws SPTException{
try{
return super.getNamedParameterJdbcTemplate().query(sql, new BeanPropertyRowMapper(clazz));
} catch(Exception e){
logger.error("【查询错误】{}", e.getMessage());
throw new SPTException(ResultEnum.SQL_QUERY_ERROR);
}
}
/**
* 方法描述:列表查询(带分页,page为空时则不进行分页),并且将每行数据自动映射成对象,形成一个对象列表返回,。
* @param selectSql - 结果查询语句
* @param paramMap - 查询参数
* @param page - 分页信息
* @param clazz 需要自动映射类型的class
* @return 查询到的结果集
* date:2017-07-31
* add by: lurufeng
*/
public List queryForList(String selectSql, Map paramMap, Page page,Class clazz) throws SPTException{
try {
if(page != null){
int count = this.queryForInt(this.getCountSql(selectSql), paramMap);
page.setTotalRows(count);
return this.queryForList(this.getLimitSql(selectSql, page.getCurrentPage(), page.getRowsPerPage()), paramMap,clazz);
} else {
return this.queryForList(selectSql, paramMap,clazz);
}
} catch(Exception e) {
logger.error("【查询错误】{}", e.getMessage());
throw new SPTException(ResultEnum.SQL_QUERY_ERROR);
}
}
/**
* 方法描述:count,sum,max等查询
* @param sql - 查询语句
* @param paramMap - 参数注入的对象
* @return 查询到的count,sum,max等结果
* date:2017-07-31
* add by: lurufeng
*/
@Override
@SuppressWarnings("deprecation")
public int queryForInt(String sql, Map paramMap) throws SPTException{
try {
return super.getNamedParameterJdbcTemplate().queryForObject(sql, paramMap, Integer.class);
} catch(Exception e) {
logger.error("【查询错误】{}", e.getMessage());
throw new SPTException(ResultEnum.SQL_QUERY_ERROR);
}
}
/**
* 方法描述:普通DML操作,如insert,update,delete
* @param sql - 查询语句
* @param paramMap - 参数注入的对象
* @return 普通DML操作影响到的条数
* date:2017-07-31
* add by: lurufeng
*/
@Override
public int update(String sql, Map paramMap) throws SPTException {
try {
return super.getNamedParameterJdbcTemplate().update(sql, paramMap);
} catch(Exception e) {
logger.error("【更新错误】{}", e.getMessage());
throw new SPTException(ResultEnum.SQL_EXEC_ERROR);
}
}
/**
* 方法描述:批量普通DML操作,如insert,update,delete
* @param sql 执行的sql语句
* @param paramListMap 批量参数
* @return 批量执行普通DML操作时每条语句影响的条数数组,数组中每个int数字含义解释:0:没有影响到记录,-2有影响(批量执行不能精确知道影响的条数)
* date:2017-07-31
* add by: lurufeng
*/
@Override
@SuppressWarnings("unchecked")
public int[] batchUpdate(String sql, List> paramListMap) throws SPTException {
try {
return super.getNamedParameterJdbcTemplate().batchUpdate(sql, paramListMap.toArray(new HashMap[0]));
} catch(Exception e) {
logger.error("【更新错误】{}", e.getMessage());
throw new SPTException(ResultEnum.SQL_EXEC_ERROR);
}
}
/**
* 方法描述: 批量获取sequence值
* @param sequenceName - sequence名称
* @param size - 一次获取多少个?
* @return 批量的sequence值列表
* date:2017-07-31
* add by: lurufeng
*/
@Override
public List querySequenceNextValues(String sequenceName, final int size) throws SPTException{
try {
return this.getJdbcTemplate().query(String.format("select %s.nextval from dual connect by rownum <= ?", sequenceName), new Object[]{size}, new BeanPropertyRowMapper(){
public Long mapRow(ResultSet rs, int rowNum) throws SQLException {
return rs.getLong(1);
}
});
} catch(Exception e) {
logger.error("【查询错误】{}", e.getMessage());
throw new SPTException(ResultEnum.SQL_EXEC_ERROR);
}
}
/**
* 方法描述:获取分页sql语句
* @param sql 执行的sql语句
* @param currentPage 当前的页码
* @param pageSize 每页显示的条数
* @return 拼接成带分页查询的sql语句
* date:2017-07-31
* add by: lurufeng
*/
private String getLimitSql(String sql, int currentPage, int pageSize) {
Assert.isTrue(currentPage > 0, "'currentPage' 不能为负数!");
Assert.isTrue(pageSize > 0, "'pageSize' 不能为负数!");
String s = sql + " limit " + (currentPage - 1) * pageSize + "," + pageSize;
return s;
}
/**
* 方法描述:获取总记录数sql语句
* @param sql 执行的sql语句
* @return 获取总记录数sql语句
* date:2017-07-31
* add by: lurufeng
*/
private String getCountSql(String sql) {
return String.format("select count(1) from (%s) as total", sql);
}
/**
* 获取表格最后插入数据的id
* @param tableName
* @param idColume
* @return
* @throws SPTException
*/
@Override
public int getLastId(String tableName, String idColume) throws SPTException{
String sql="select max("+idColume+") from "+tableName;
return this.queryForInt(sql,null);
}
}