MyBatis3.4.0版本的新特性有哪些
MyBatis 3.4.0版本的新特性有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
创新互联是一家从事企业网站建设、网站制作、网站建设、行业门户网站建设、网页设计制作的专业网站设计公司,拥有经验丰富的网站建设工程师和网页设计人员,具备各种规模与类型网站建设的实力,在网站建设领域树立了自己独特的设计风格。自公司成立以来曾独立设计制作的站点上千多家。
新增功能
1. Cursor 新增返回值类型为游标的方法
当查询大量(上百万)数据的时候,使用游标可以有效的减少内存使用,不需要一次性将所有数据得到,可以通过游标逐个或者分批(逐个获取一批后)处理。
SqlSession 中新增的 3 个游标方法:
/** * A Cursor offers the same results as a List, except it fetches data lazily using an Iterator. * @paramthe returned cursor element type. * @param statement Unique identifier matching the statement to use. * @return Cursor of mapped objects */ Cursor selectCursor(String statement); /** * A Cursor offers the same results as a List, except it fetches data lazily using an Iterator. * @param 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 */ Cursor selectCursor(String statement, Object parameter); /** * A Cursor offers the same results as a List, except it fetches data lazily using an Iterator. * @param 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 */ Cursor selectCursor(String statement, Object parameter, RowBounds rowBounds);
注意: 3.4.0 版本的游标方法目前有个 bug,因此不支持 @Select 注解方式,在将来的 3.4.1 版本中会解决这个问题。
使用示例:
xml 里面没有任何改变,在获取值的地方有变化,例如使用接口:
CursorselectAll();
或者使用命名接口方式:
CursorcityList = sqlSession.selectCursor("selectAll");
得到结果后,使用方法如下:
Iteratoriterator = cityList.iterator(); while(iterator.hasNext()){ City c2 = iterator.next(); Assert.assertNotNull(c2); Assert.assertNotNull(c2.getName()); Assert.assertNotNull(c2.getState()); }
嵌套查询的情况
当使用嵌套查询时,还需要设置resultOrdered="true"
属性,使用方法如下:
只有设置这个属性才能得到当前对象 id 所对应的所有嵌套结果。
对某一个嵌套查询,设置 resultOrdered="true"
的结果:
不设置的结果:
以上图为例,判断是否为同一个结果下的对象,使用 id 判断的,这个 id 必须是
2. 增加对 Java 8 日期(JSR-310)的支持
添加以下依赖:
org.mybatis mybatis-typehandlers-jsr310 1.0.0
如果你使用的 3.4.0 版本,就不需要任何配置就可以直接用。
如果你使用的老版本,需要手动配置:
有关 mybatis-typehandlers-jsr310 项目的详细信息看这里
3. 新增 autoMappingUnknownColumnBehavior 参数
新增了一个 settings 配置的参数 autoMappingUnknownColumnBehavior ,当检测出未知列(或未知属性)时,如何处理,默认情况下没有任何提示,这在测试的时候很不方便,不容易找到错误。
可选值:
- NONE : 不做任何处理 (默认值)
- WARNING : 警告日志形式的详细信息
- FAILING : 映射失败,抛出异常和详细信息
配置时,在
4. Sql Provider 注解方式支持多个参数
例如:
@SelectProvider(type = UserSqlBuilder.class, method = "buildGetUsersByName") ListgetUsersByName( @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{ 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
在先前的版本中,MyBatis 无法获取 id 的实际类型,导致找不到 TypeHandler 出错。
看完上述内容,你们掌握MyBatis 3.4.0版本的新特性有哪些的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!
网页标题:MyBatis3.4.0版本的新特性有哪些
本文路径:http://cdiso.cn/article/jsigjg.html