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

國內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > 綜合技術(shù) > MyBatis 3.4.0 版本功能介紹

MyBatis 3.4.0 版本功能介紹

來源:程序員人生   發(fā)布時(shí)間:2016-06-08 08:30:49 閱讀次數(shù):4731次

這里只羅列部份重要的內(nèi)容,詳細(xì)內(nèi)容看官方說明

新增功能

1. Cursor 新增返回值類型為游標(biāo)的方法

當(dāng)查詢大量(上百萬)數(shù)據(jù)的時(shí)候,使用游標(biāo)可以有效的減少內(nèi)存使用,不需要1次性將所有數(shù)據(jù)得到,可以通過游標(biāo)逐一或分批(逐一獲得1批后)處理。

SqlSession 中新增的 3 個(gè)游標(biāo)方法:

/** * A Cursor offers the same results as a List, except it fetches data lazily using an Iterator. * @param <T> the returned cursor element type. * @param statement Unique identifier matching the statement to use. * @return Cursor of mapped objects */ <T> Cursor<T> selectCursor(String statement); /** * A Cursor offers the same results as a List, except it fetches data lazily using an Iterator. * @param <T> the returned cursor element type. * @param statement Unique identifier matching the statement to use. * @param parameter A parameter object to pass to the statement. * @return Cursor of mapped objects */ <T> Cursor<T> selectCursor(String statement, Object parameter); /** * A Cursor offers the same results as a List, except it fetches data lazily using an Iterator. * @param <T> the returned cursor element type. * @param statement Unique identifier matching the statement to use. * @param parameter A parameter object to pass to the statement. * @param rowBounds Bounds to limit object retrieval * @return Cursor of mapped objects */ <T> Cursor<T> selectCursor(String statement, Object parameter, RowBounds rowBounds);

注意: 3.4.0 版本的游標(biāo)方法目前有個(gè) bug,因此不支持 @Select 注解方式,在將來的 3.4.1 版本中會(huì)解決這個(gè)問題。

使用示例:

<select id="selectAll" resultType="tk.mybatis.springboot.model.City"> select * from city </select>

xml 里面沒有任何改變,在獲得值的地方有變化,例如使用接口:

Cursor<City> selectAll();

或使用命名接口方式:

Cursor<City> cityList = sqlSession.selectCursor("selectAll");

得到結(jié)果后,使用方法以下:

Iterator<City> iterator = cityList.iterator(); while(iterator.hasNext()){ City c2 = iterator.next(); Assert.assertNotNull(c2); Assert.assertNotNull(c2.getName()); Assert.assertNotNull(c2.getState()); }

嵌套查詢的情況

當(dāng)使用嵌套查詢時(shí),還需要設(shè)置resultOrdered="true"屬性,使用方法以下:

<select id="selectAll" resultMap="xx.CityMap" resultOrdered="true">

只有設(shè)置這個(gè)屬性才能得到當(dāng)前對(duì)象 id 所對(duì)應(yīng)的所有嵌套結(jié)果。

對(duì)某1個(gè)嵌套查詢,設(shè)置 resultOrdered="true" 的結(jié)果:
設(shè)置

不設(shè)置的結(jié)果:
不設(shè)置

以上圖為例,判斷是不是為同1個(gè)結(jié)果下的對(duì)象,使用 id 判斷的,這個(gè) id 必須是 <resultMap> 中的 <id>,另外為了結(jié)果完全,你還需要依照 <id> 配置的列進(jìn)行排序,如果結(jié)果不是 <id> 對(duì)應(yīng)列的順序,嵌套的結(jié)果數(shù)量會(huì)出錯(cuò)。

2. 增加對(duì) Java 8 日期(JSR⑶10)的支持

添加以下依賴:

<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-typehandlers-jsr310</artifactId> <version>1.0.0</version> </dependency>

如果你使用的 3.4.0 版本,就不需要任何配置就能夠直接用。

如果你使用的老版本,需要手動(dòng)配置:

<typeHandlers> <typeHandler handler="org.apache.ibatis.type.InstantTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.LocalDateTimeTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.LocalDateTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.LocalTimeTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.OffsetDateTimeTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.OffsetTimeTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.ZonedDateTimeTypeHandler" /> </typeHandlers>

有關(guān) mybatis-typehandlers-jsr310 項(xiàng)目的詳細(xì)信息看這里

3. 新增 autoMappingUnknownColumnBehavior 參數(shù)

新增了1個(gè) settings 配置的參數(shù) autoMappingUnknownColumnBehavior ,當(dāng)檢測(cè)出未知列(或未知屬性)時(shí),如何處理,默許情況下沒有任何提示,這在測(cè)試的時(shí)候很不方便,不容易找到毛病。

可選值:

  • NONE : 不做任何處理 (默許值)
  • WARNING : 正告日志情勢(shì)的詳細(xì)信息
  • FAILING : 映照失敗,拋出異常和詳細(xì)信息

配置時(shí),在 <settings> 里面添加:

<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>

4. Sql Provider 注解方式支持多個(gè)參數(shù)

例如:

@SelectProvider(type = UserSqlBuilder.class, method = "buildGetUsersByName") List<User> getUsersByName( @Param("name") String name, @Param("orderByColumn") String orderByColumn); // Multiple arguments

在寫 UserSqlBuilder 的時(shí)候,一樣需要使用注解來指定參數(shù)(或按順序):

public String buildGetUsersByName( @Param("name") final String name @Param("orderByColumn") final String orderByColumn) { // Allow multiple arguments return new SQL(){{ SELECT("*"); FROM("users"); if (name != null) { WHERE("name like #{name} || '%'"); } ORDER_BY(orderByColumn); }}.toString(); }

解決的 BUG

支持實(shí)體類中的泛型類型

例如 Entity 基類:

public abstract class Entity<K extends Serializable> { private static final long serialVersionUID = -1L; protected K id; public K getId() { return id; } public void setId(K id) { this.id = id; }

其中1個(gè)子類:

public class User extends Entity<String>

在先前的版本中,MyBatis 沒法獲得 id 的實(shí)際類型,致使找不到 TypeHandler 出錯(cuò)。

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 亚洲不卡免费视频 | 国产欧美日韩亚洲精品区2345 | 欧美日韩在线播一区二区三区 | 亚洲一区毛片 | 国产福利写真视频在线观看 | 国产精品三级在线观看 | 国产aⅴ精品一区二区三区久久 | 欧美天天性 | 亚洲免费人成在线视频观看 | 2020国产成人免费视频 | 女女同性一区二区三区四区 | 高清日本一级特黄aa大片 | 中文字幕免费观看 | 欧美一区二三区 | 伊人色院成人蜜桃视频 | 国产精品国产三级国产专区5o | 欧美操片在线观看 | 在线婷婷 | 手机精品视频在线观看免费 | 日韩v片| 黄影院| 中文字幕精品视频在线观看 | 有码中文字幕 | 午夜网站在线观看 | 亚洲欧洲自拍偷拍 | 国产精品免费久久久久影院小说 | 国产片在线看 | 中文字幕亚洲欧美一区 | 亚洲最色网站 | 欧美性暴力变态xxxx | 国产一级一级片 | 国产精品新婚门 | 大学生一级毛片高清版 | 日韩免费一区二区三区 | 欧美在线视频不卡 | freexxxx性特大另类ww | 国产成人精品一区 | 波多野结衣日韩 | 涩涩五月天婷婷丁香综合社区 | 美国伊人网 | 中文国产成人精品久久一 |