公司開發過程中遇到的問題總結(一)
來公司已經兩個多月了,之前一直忽略了文件的積累,經過公司大佬貓哥的帶領下,我才慢慢意識到優秀的文件到底是什麼樣?
如果說生活是一門藝術,那麼每天的文件記錄是程式設計師生活中的一首高昂的讚歌!!
自己寫的工具類在測試時候報錯,
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.aixuexi.xiuchun.tools.DateToString' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@javax.annotation.Reso
原因是我們自己寫的類上面沒有加上相應的註解 @Component 加上即可
原因:
在持久層、業務層和控制層分別採用 @Repository、@Service 和 @Controller 對分層中的類進行註釋,而用 @Component 對那些比較中立的類進行註釋
這裡就是說把這個類交給Spring管理,重新起個名字叫userManager,由於不好說這個類屬於哪個層面,就用@Component
使用queryForObject查詢返回一個物件本身,結果報錯
IncorrectResultSetColumnCountException
主要是 因為我們查詢的記錄期待是一條資料,結果在queryForObject查詢返回是 整條資料的資訊,二者不匹配就會報錯,我們這裡採用query方法,但是在使用的時候我們返回list需要主要書寫的形式
List<FishDeviceManage> resultInstitution = myJdbcTemplate.query(sql,new Object[]{insId},new BeanPropertyRowMapper<>(FishDeviceManage.class));
對於我們使用queryForObject方法的時候,我們要求返回一個物件,這時候如果直接查詢返回Object的話往往得不到想要的結果,所以我們在這裡需要做一個轉變,首先採用Map進行儲存,
Map<String,Object> resultMap = myJdbcTemplate.queryForMap(sql,new Object[]{sn});
if (resultMap == null || resultMap.size() == 0){
return null;
}
FishDeviceManage fishDeviceManage = new FishDeviceManage();
//對一個ORM
handleMapping(resultMap,fishDeviceManage);
return fishDeviceManage;
然後new一個物件,採用方法進行賦值轉變,這時候我們可以得到handleMapping 的實體對映,在方法中進行賦值即可
private void handleMapping(Map<String, Object> resultMap, FishDeviceManage fishDeviceManage) {
fishDeviceManage.setId(MapUtils.getInteger(resultMap,"id",0));
fishDeviceManage.setJoinTime(stringToDate.StringChangeDate(MapUtils.getString(resultMap,"joinTime","")));
}
對於一般String Interger基本型別我們直接使用MapUtils進行轉化即可,但是對於特殊型別,比如Date型別,這裡我需要自己提供工具類積習難改in轉化
其實工具類在java開發中很常用,包括基本的資料型別轉換啊,還有一些特殊的型別等等
在自定義的欄位型別書寫上,我們應該嚴格遵循欄位對映的規律,根據駝峰進行轉換,這也是java中實體類去資料庫進行欄位匹配的轉換原則和過濾
//fish_device_manage 所有欄位
static final String baseColumn = "fdm.id id,fdm.ins_id insId,fdm.number number,fdm.sn sn,fdm.grey_id greyId,fdm.name name,fdm.short_name " +
"shortName,fdm.join_time joinTime,fdm.status status";
一定要嚴格遵循駝峰的命名,否則後面查詢出現一堆null,你還不知大為什麼,到處找尋自己的原因呢!!!
在springboot中,我們使用測試類時候一定要記得在測試類上加上註解
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Application.class)
我們後面的測試才能生效,具體關於springboot的學習後期會進一步加強,我們我們先從基礎來學習,在啊、慢慢的踩著前人的坑一步步前進,
在開發中遇到困難是最沒有必要害怕的,正是每天出現的問題讓我們變得越來越老練!
很感謝公司大佬士浩學長,能夠在我遇到問題時候一針見血給我指出來,同時知道我的短板和不足,在工作中主動要求我學習新的知識點,謝謝大佬
我一定會加倍努力的! 2018/2/23 19:35