时间:2021-05-19
新增功能
1. Cursor 新增返回值类型为游标的方法
当查询大量(上百万)数据的时候,使用游标可以有效的减少内存使用,不需要一次性将所有数据得到,可以通过游标逐个或者分批(逐个获取一批后)处理。
SqlSession 中新增的 3 个游标方法:
/** * 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 版本的游标方法目前有个 bug,因此不支持 @Select 注解方式,在将来的 3.4.1 版本中会解决这个问题。
使用示例:
<select id="selectAll" resultType="tk.mybatis.springboot.model.City"> select * from city</select>xml 里面没有任何改变,在获取值的地方有变化,例如使用接口:
Cursor<City> selectAll();或者使用命名接口方式:
Cursor<City> cityList = sqlSession.selectCursor("selectAll");得到结果后,使用方法如下:
Iterator<City> iterator = cityList.iterator();while(iterator.hasNext()){ City c2 = iterator.next(); Assert.assertNotNull(c2); Assert.assertNotNull(c2.getName()); Assert.assertNotNull(c2.getState());}嵌套查询的情况
当使用嵌套查询时,还需要设置resultOrdered="true"属性,使用方法如下:
<select id="selectAll" resultMap="xx.CityMap" resultOrdered="true">只有设置这个属性才能得到当前对象 id 所对应的所有嵌套结果。
对某一个嵌套查询,设置 resultOrdered="true" 的结果:
不设置的结果:
以上图为例,判断是否为同一个结果下的对象,使用 id 判断的,这个 id 必须是 <resultMap> 中的 <id>,另外为了结果完整,你还需要按照 <id> 配置的列进行排序,如果结果不是 <id> 对应列的顺序,嵌套的结果数量会出错。
2. 增加对 Java 8 日期(JSR-310)的支持
添加以下依赖:
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-typehandlers-jsr310</artifactId> <version>1.0.0</version></dependency>如果你使用的 3.4.0 版本,就不需要任何配置就可以直接用。
如果你使用的老版本,需要手动配置:
<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>有关 mybatis-typehandlers-jsr310 项目的详细信息看这里
3. 新增 autoMappingUnknownColumnBehavior 参数
新增了一个 settings 配置的参数 autoMappingUnknownColumnBehavior ,当检测出未知列(或未知属性)时,如何处理,默认情况下没有任何提示,这在测试的时候很不方便,不容易找到错误。
可选值:
配置时,在 <settings> 里面添加:
<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>4. Sql Provider 注解方式支持多个参数
例如:
@SelectProvider(type = UserSqlBuilder.class, method = "buildGetUsersByName")List<User> getUsersByName( @Param("name") String name, @Param("orderByColumn") String orderByColumn); // Multiple arguments在写 UserSqlBuilder 的时候,同样需要使用注解来指定参数(或者按顺序):
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
支持实体类中的泛型类型
例如 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; }其中一个子类:
public class User extends Entity<String>在先前的版本中,MyBatis 无法获取 id 的实际类型,导致找不到 TypeHandler 出错。
这里只列举部分重要的内容,详细内容看官方说明
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
一、确认mybatis-plus-boot-starter版本3.4.0版本对此部分有更新,如果是旧版本升级,会出现分页失效问题,同时idea会提示Pagina
前言在MybatisPlus3.4.0版本之后PaginationInterceptor插件就失效,新增MybatisPlus3.4.0的新内置插件提示:以下是
2016版本的WPS取消了组织结构图(或SmartArt)的功能,WPSOffice(10.1.0.6135)新增功能列表版本的修复了此项功能。本经验将为你介绍
1月24日消息,天猫日前上线了最新版安卓移动客户端,首次推出视频购物功能,并继续以“流量免单”策略吸引用户。据了解,在安卓3.4.0版本的天猫客户端中,卖家可以
前言随着标准Java的版本更新,开发者总是可以从升级后的版本中获取想要的功能。本文将给大家详细介绍下mac下面的java9版本安装使用,分享出来供大家参考学习,