日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > 框架設計 > 關于Spring JDBC RowMapper的一點改進思路

關于Spring JDBC RowMapper的一點改進思路

來源:程序員人生   發布時間:2015-04-21 08:33:43 閱讀次數:3300次

【注】通常我們使用RowMapper(比如ParameterizedRowMapper),都需要定義好查詢字段,如果使用別名就沒辦法了。還要比如加入group,或聯合查詢,也不能夠使用,除非不想要非主體Bean以外的字段,那末只能用Map接收返回結果了,或直接實現RowMapper。基于這1點,提出1個略微通用的解決思路:所有的Bean都繼承1個基類Bean,里面放1個Map(就是寄存那些Bean沒有指定的字段了,比如sum、count、avg … 各種查詢字段或別名),參考BeanPropertyRowMapper,在mapRow方法里面做些小調劑,找不到的column就放到map里面,這模樣的話,Bean有的字段就采取getxxx(),沒有就從map里面取,好像會有點用。

#具體方法以下#

public abstract class BaseEntity { private Map<String, Object> aliasFields = new HashMap<String, Object>(); public void setAliasField(String field, Object value) { aliasFields.put(field, value); } public Object getAliasFields(String field) { return aliasFields.get(field); } }

該類中只放1個map,存儲Bean里面沒有的字段,剩下的就是改造RowMapper實現類,可以拷貝BeanPropertyRowMapper,換個類名,直接修改mapRow方法,具體以下(改動量非常小,看注釋):

public T mapRow(ResultSet rs, int rowNumber) throws SQLException { Assert.state(this.mappedClass != null, "Mapped class was not specified"); T mappedObject = BeanUtils.instantiate(this.mappedClass); BeanWrapper bw = PropertyAccessorFactory.forBeanPropertyAccess(mappedObject); initBeanWrapper(bw); ResultSetMetaData rsmd = rs.getMetaData(); int columnCount = rsmd.getColumnCount(); Set<String> populatedProperties = (isCheckFullyPopulated() ? new HashSet<String>() : null); for (int index = 1; index <= columnCount; index++) { String column = JdbcUtils.lookupColumnName(rsmd, index); PropertyDescriptor pd = this.mappedFields.get(column.replaceAll(" ", "").toLowerCase()); if (pd != null) { try { Object value = getColumnValue(rs, index, pd); if (logger.isDebugEnabled() && rowNumber == 0) { logger.debug("Mapping column '" + column + "' to property '" + pd.getName() + "' of type " + pd.getPropertyType()); } try { bw.setPropertyValue(pd.getName(), value); } catch (TypeMismatchException e) { if (value == null && primitivesDefaultedForNullValue) { logger.debug("Intercepted TypeMismatchException for row " + rowNumber + " and column '" + column + "' with value " + value + " when setting property '" + pd.getName() + "' of type " + pd.getPropertyType() + " on object: " + mappedObject); } else { throw e; } } if (populatedProperties != null) { populatedProperties.add(pd.getName()); } } catch (NotWritablePropertyException ex) { throw new DataRetrievalFailureException( "Unable to map column " + column + " to property " + pd.getName(), ex); } } else {/// *****就是修改這個地方了!!!! Object value = JdbcUtils.getResultSetValue(rs, index); ((BaseEntity)mappedObject).setAliasField(column, value); } } if (populatedProperties != null && !populatedProperties.equals(this.mappedProperties)) { throw new InvalidDataAccessApiUsageException("Given ResultSet does not contain all fields " + "necessary to populate object of class [" + this.mappedClass + "]: " + this.mappedProperties); } return mappedObject; }

剩下的就是具體的Bean,繼承BaseEntity,比如:

public class Demo extends BaseEntity implements Serializable { public static final long serialVersionUID = 2233912281609962999L; private Integer id; private String name; private String password; private Date createTime; private Integer type; public Demo() { super.queryBuilder = new QueryBuilder(this); } public void setId (Integer id) { this.id = id; } public Integer getId () { return this.id; } public void setName (String name) { this.name = name; } public String getName () { return this.name; } public void setPassword (String password) { this.password = password; } public String getPassword () { return this.password; } public void setCreateTime (Date createTime) { this.createTime = createTime; } public Date getCreateTime () { return this.createTime; } public void setType (Integer type) { this.type = type; } public Integer getType () { return this.type; } }

查詢的時候,就能夠通過Demo Bean取出非表字段的數據,通過getAliasFields(String field)方法。個人感覺能夠提高1定的便捷性,后續會加入sbrom中,關于sbrom可以查看http://blog.csdn.net/yefeng_918/article/details/44747033,歡迎吐槽!

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产小视频在线观看 | 欧美日韩在线一区 | av免费观看网址 | 成人欧美一区二区三区视频网页 | 韩日精品一区二区 | 国产一二三区免费视频 | 日本视频一区二区三区 | 一区二区三区国产视频 | 国产成人99久久亚洲综合精品 | 国产精品久久久久久久免费软件 | 狠狠干成人 | av在线一区二区三区 | 久久y | 欧美精品导航 | 成人精品三级av在线看 | 欧美视频区 | 羞羞视频在线观看 | 精品久久久久久久人人人人传媒 | 九九亚洲精品 | 福利视频一区二区三区 | 国产精品国产三级国产aⅴ入口 | 国产曰批免费观看久久久 | 国精品一区 | 国产精品久久久久久久久久久免费看 | 日韩av电影一区 | 亚洲一区二区视频在线 | 91成人在线 | 欧美一区二区三区久久精品 | 亚洲看片网站 | 成av在线 | 亚洲精品综合精品自拍 | 久日av | 欧美综合视频 | 日韩在线观看网站 | 成人日韩视频 | 国产精品久久久久一级毛片 | 日韩免费视频网站 | 国产精品久久久精品 | 日本美女一区二区三区 | 青青草伊人久久 | 亚洲一区二区三区在线视频 |