<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    瘋狂

    STANDING ON THE SHOULDERS OF GIANTS
    posts - 481, comments - 486, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
    看spring的queryForObject(如果查詢結果條數為0或者大于1)都會返回異常,我們希望沒查到返回null,這樣我們就可以給用戶提示沒有找到,要不我們的每個queryforObject,queryForInt...等等方法都需要手動攔截這個異常來判斷為空,才能做出判斷。
    先看下spring的這段源碼:
    public <T> T queryForObject(String sql, Object[] args, RowMapper<T> rowMapper) throws DataAccessException {
      List
    <T> results = query(sql, args, new RowMapperResultSetExtractor<T>(rowMapper, 1));
      
    return DataAccessUtils.requiredSingleResult(results);
    }

    public static <T> T requiredSingleResult(Collection<T> results) throws IncorrectResultSizeDataAccessException {
      
    int size = (results != null ? results.size() : 0);
      
    if (size == 0{//記錄為o返回異常
       throw new EmptyResultDataAccessException(1);//此異常繼承自IncorrectResultSizeDataAccessException
      }

      
    if (results.size() > 1{有多條記錄返回異常
       
    throw new IncorrectResultSizeDataAccessException(1, size);
      }

      
    return results.iterator().next();
     }



    下面是我的一個方法,其他的方法請大家補充:
    寫一個接口定義規則:
    public interface JdbcTemplateCallBack<T> {
        
    public  T querys(JdbcTemplate jdbcTemplate);
    }
    然后是BaseDao的通用的方法:
    /**
         * 可以用于處理查詢queryfor 為空或者多條的時候返回異常的情況,現在返回null,主要是攔截IncorrectResultSizeDataAccessException異常,以及子類
         * 
    @param jdbcTemplateCallBack
         * 
    @return
         * 
    @throws DaoException
         
    */

        
    public <T> T queryNullAble(JdbcTemplateCallBack<T> jdbcTemplateCallBack) throws DaoException {
            
    try {
                
    return jdbcTemplateCallBack.querys(getJdbcTemplate());
            }
     catch (Exception e) {
                    
    if((e instanceof IncorrectResultSizeDataAccessException)
                            
    &&((IncorrectResultSizeDataAccessException)e).getActualSize()==0)
                        
    return null;
                
    //其他的異常正常拋出
                throw new DaoException(e);
            }

        }

    最后是調用實例(根據id查用戶):
    public SUser getUserByColunm(final String columnName, final Object value) throws DaoException {
            
    return queryNullAble(new JdbcTemplateCallBack<SUser>() {
                
    public SUser querys(JdbcTemplate jdbcTemplate) {
                    
    return jdbcTemplate.queryForObject("select *  from suser where "+columnName+"=?"new BeanPropertyRowMapper(SUser.class),value);
                }

            }
    );
        }

    具體的工程可以在http://www.tkk7.com/freeman1984/archive/2011/10/24/361899.html里面下載。


    評論

    # re: spring JdbcTemplate的queryForObject為空返回異常情況的一個處理  回復  更多評論   

    2014-09-30 10:30 by 俊杰
    String sql="select * from users";
    List<Map<String, Object>> list=jt.queryForList(sql);
    for (Map<String, Object> map : list) {
    System.out.println(map.get("password"));
    }
    主站蜘蛛池模板: 亚洲国产精品日韩在线| 天堂亚洲免费视频| 国产精品视_精品国产免费 | 亚洲成电影在线观看青青| 日本一区二区三区免费高清| 美女的胸又黄又www网站免费| 在线亚洲人成电影网站色www| 久久香蕉国产线看免费| 美女视频黄免费亚洲| 亚洲日韩精品无码专区网站| 69式互添免费视频| 真人无码作爱免费视频| 久久亚洲精品人成综合网| 国产一区二区三区在线免费| 久久免费精品视频| 亚洲欧美日韩中文无线码 | 国产成人亚洲毛片| 亚洲今日精彩视频| 日韩高清免费观看| 无码AV片在线观看免费| 欧美日韩亚洲精品| 亚洲午夜精品久久久久久人妖| 啦啦啦www免费视频| 久久成人免费大片| 五月天婷婷免费视频| 国产成人精品亚洲2020| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 一级毛片在线免费播放| 国产成人精品亚洲2020| 亚洲国产第一页www| 亚洲熟妇少妇任你躁在线观看无码 | 国产成人A亚洲精V品无码| 午夜两性色视频免费网站| 日韩精品无码免费一区二区三区| 猫咪免费人成网站在线观看入口| 亚洲中文无码线在线观看| 亚洲女久久久噜噜噜熟女| 韩国免费三片在线视频| 免费成人激情视频| 一级毛片免费不卡在线| 久草免费福利在线|