多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > MyBatis與Spring設置callSettersOnNulls

MyBatis與Spring設置callSettersOnNulls

來源:程序員人生   發布時間:2014-10-04 08:00:00 閱讀次數:2610次

項目中集成Mybatis與Spring,使用的是Mybatis3.2.7,以及Spring4.0.5,mybatis-spring-1.2.2;
因為項目組成員想要偷懶,將數據從DB中查詢出來時需要將字段映射為Map,而不想封裝成Bean.

默認情況下,Mybatis對Map的解析生成, 如果值(value)為null的話,那么key也不會被加入到map中.
于是對Map遍歷時,key就遍歷不到,因為前端工具的需要,必須有這個key,網上搜索后發現需要設置 callSettersOnNulls 這個屬性.
那就設置唄, 在 sqlSessionFactory 的定義中,指定 configLocation 屬性,指向另一個文件,如下所示

文件清單: mybatis-env-setting.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <!-- 如果內網機器報錯,請使用下面這種笨辦法 --> <!-- <!DOCTYPE configuration PUBLIC "-//www.mybatis.org//DTD Config 3.0//EN" "E:/bao/tomcat/apache-tomcat-6.0.14/webapps/pmsys/WEB-INF/classes/mybatis/mybatis-3-config.dtd"> --> <configuration> <settings> <!-- 只設置需要的,其他使用默認值 --> <!-- 開啟緩存,默認就是開啟的,2層開關,需要在Mapper文件中也指定 cache 標簽才會真正使用緩存 --> <setting name="cacheEnabled" value="true"/> <!-- 在null時也調用 setter,適應于返回Map,3.2版本以上可用 --> <setting name="callSettersOnNulls" value="true"/> </settings> </configuration>

然后使用,一切正常,OK.
過了幾天, 實施項目時出BUG了, 因為是企業內網服務器,不能訪問 mybatis.org,于是啟動出錯.
【Mybatis 這個渣渣,在啟動時會去獲取并校驗DTD,目前還不知道在哪里配置讓其不進行校驗.】
網上搜索半天,沒有好的解決辦法, 看到有方法說將dtd下載到本地,然后直接指定路徑,就像上面注釋掉的那部分一樣。

問題也算是解決了,可是很土,而且各個機器不一定都有同樣的目錄,這種掉渣的方法肯定會遭人詬病的。
于是百度谷歌又搜索了半天,沒找到辦法,根本沒有人提這茬。

于是想著自己翻源碼看看:
public class SqlSessionFactoryBean implements FactoryBean<SqlSessionFactory>, InitializingBean, ApplicationListener<ApplicationEvent> { private static final Log logger = LogFactory.getLog(SqlSessionFactoryBean.class); // 這里可以配置configLocation資源 private Resource configLocation; private Resource[] mapperLocations; private DataSource dataSource; private TransactionFactory transactionFactory; // 這里可以配置configurationProperties屬性 private Properties configurationProperties; ...... protected SqlSessionFactory buildSqlSessionFactory() throws IOException { Configuration configuration; XMLConfigBuilder xmlConfigBuilder = null; // 先查找 configLocation 屬性 if (this.configLocation != null) { xmlConfigBuilder = new XMLConfigBuilder(this.configLocation.getInputStream(), null, this.configurationProperties); configuration = xmlConfigBuilder.getConfiguration(); } else { if (logger.isDebugEnabled()) { logger.debug("Property 'configLocation' not specified, using default MyBatis Configuration"); } // 如果找不到configLocation,就只使用 configurationProperties configuration = new Configuration(); configuration.setVariables(this.configurationProperties); } ......

看到了 configurationProperties 這個屬性,可是 該怎么設置呢,總算找到了一篇很靠譜的學習筆記: Spring的Bean之設置Bean值

于是,抄襲之,自己設置了一下相應的屬性

形成的配置文件片段如下所示:
<!-- myBatis配置 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- 表示在mybatis.mapping包或以下所有目錄中,以 Mapper.xml結尾所有文件 --> <property name="mapperLocations"> <value>classpath:com/cncounter/dao/oracle/**/*Mapper.xml</value> <!-- <list> <value>classpath:com/cncounter/dao/oracle/res/*Mapper.xml</value> <value>classpath:com/cncounter/dao/oracle/user/*Mapper.xml</value> </list> --> </property> <!-- <property name="configLocation"> <value>classpath:mybatis/mybatis-env-setting.xml</value> </property> --> <!-- 切換一種方式,不配置configLocation --> <property name="configurationProperties"> <props> <prop key="cacheEnabled">true</prop> <prop key="callSettersOnNulls">true</prop> </props> </property> </bean>

啟動沒報錯,但是還沒檢驗.應該沒多大問題...
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 老司机午夜视频在线观看 | 日本高清wwww免费视频 | 国产一级淫片a免费播放口之 | 在线观看免费精品国自产 | 欧美性视频在线播放 | 日本国产一区在线观看 | 在线观看操 | 精品国产成a人在线观看 | 欧美成人18性 | 亚洲精彩视频在线观看 | 亚洲h视频在线 | 亚洲国产精品自在在线观看 | 欧美黄色a级 | 3344成年站福利在线视频免费 | 国产成人a毛片在线 | 久久色网站| 国产aⅴ精品一区二区三区久久 | 欧美成人在线影院 | 亚洲综合图区 | 亚洲精品中文字幕无乱码 | 国产 日韩欧美 | 国产美女久久久久久久久久久 | 波多野结衣免费在线视频 | 一级毛片免费一级直接观看 | www黄网站| 免费观看18视频网站 | 亚洲自拍成人 | 亚洲综合国产精品 | 欧美综合自拍亚洲综合 | 最新中文字幕第一页 | 欧美非洲黑人性xxxx | 24小时中文乱码字幕在线观看 | 国产三级自拍视频 | 欧美日韩精品一区二区三区视频在线 | 亚洲精品综合一区在线 | 亚洲韩国日本一级二级r级 亚洲韩精品欧美一区二区三区 | 91久久色| 亚洲国产精品久久久久网站 | 欧美综合自拍亚洲综合百度 | 日韩四区 | 白嫩美女一级毛片免费看 |