浅谈JdbcDaoSupport

定义操作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> queryForList(String sql,Map paramMap) throws SPTException;

    /**
     * 方法描述:不带参数的列表查询
     * @param sql 执行的sql语句
     * @return 查询到的结果集
     * date:2017-07-31
     * add by: lurufeng
     */
    public List> queryForList(String sql) throws SPTException;



    /**
     * 方法描述:列表查询,并且将每行数据自动映射成对象,形成一个对象列表返回
     * @param sql 执行的sql语句
     * @param paramMap 参数注入的HashMap对象
     * @param clazz 需要自动映射类型的class
     * @return 查询到的结果集
     * date:2017-07-31
     * add by: lurufeng
     */
    public  List queryForList(String sql,Map paramMap,Class clazz) throws SPTException;

    /**
     * 方法描述:不带参数的列表查询,并且将每行数据自动映射成对象,形成一个对象列表返回
     * @param sql 执行的sql语句
     * @param clazz 需要自动映射类型的class
     * @return 查询到的结果集
     * date:2017-07-31
     * add by: lurufeng
     */
    public  List queryForList(String sql,Class clazz) throws SPTException;



    /**
     * 方法描述:普通DML操作,如insert,update,delete
     * @param sql - 查询语句
     * @param paramMap - 参数注入的对象
     * @return 普通DML操作影响到的条数
     * date:2017-07-31
     * add by: lurufeng
     */
    public int update(String sql, Map paramMap) throws SPTException;

    /**
     * 方法描述:批量普通DML操作,如insert,update,delete
     * @param sql 执行的sql语句
     * @param paramListMap 批量参数
     * @return 批量执行普通DML操作时每条语句影响的条数数组,数组中每个int数字含义解释:0:没有影响到记录,-2有影响(批量执行不能精确知道影响的条数)
     * date:2017-07-31
     * add by: lurufeng
     */
    public int[] batchUpdate(String sql, List> paramListMap) throws SPTException;

    /**
     * 方法描述: 批量获取sequence值
     * @param sequenceName	- sequence名称
     * @param size			- 一次获取多少个?
     * @return 批量的sequence值列表
     * date:2017-07-31
     * add by: lurufeng
     */
    public List querySequenceNextValues(String sequenceName, final int size) throws SPTException;

    /**
     * 方法描述:count,sum,max等查询
     * @param sql - 查询语句
     * @param paramMap - 参数注入的对象
     * @return 查询到的count,sum,max等结果
     * date:2017-07-31
     * add by: lurufeng
     */
    public int queryForInt(String sql, Map paramMap) throws SPTException;

    /**
     * 方法描述:调用存储过程
     * @param name 存储过程名称,区分大小写,创建存储过程时用的名称
     * @param params 存储过程所需的in参数值,key为参数名,value为参数值
     * @return 存储过程执行后的out参数获取值
     * date:2017-07-31
     * add by: lurufeng
     * @throws SPTException
     */
    public Map execProcedure(String name,Map params) throws SPTException;


    /**
     * 获取表格最后插入数据的id
     * @param tableName
     * @param idColume
     * @return
     * @throws SPTException
     */
    public int getLastId(String tableName,String idColume) throws SPTException;
}

 定义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);
    }
}

 

 

你可能感兴趣的:(海豚湾的等待)