Skip to content

2.2.3

Compare
Choose a tag to compare
@abel533 abel533 released this 26 May 07:26
· 13 commits to master since this release

What's Changed

  • insertupdate泛型增加<S extends T>
  • Example支持TypeHandler配置

insertupdate泛型增加<S extends T>

  /**
   * 保存实体
   *
   * @param entity 实体类
   * @return 1成功,0失败
   */
  @Lang(Caching.class)
  @InsertProvider(type = EntityProvider.class, method = "insert")
  <S extends T> int insert(S entity);

insert和update时可以使用实体类的子类进行操作。

Example支持TypeHandler配置

原来在实体类配置的 TypeHandlerExample操作无效,这次更新后可以自动生效。

单元测试方法如下:

 @Test
  public void testUpdateByExampleSetValues() {
    SqlSession sqlSession = getSqlSession();
    try {
      ExampleMapper<UserAuto, Example<UserAuto>> exampleMapper = sqlSession.getMapper(UserAutoBaseMapper.class);
      Example<UserAuto> example = new Example();
      example.createCriteria().andEqualTo(UserAuto::getId, 1L);
      example.set(UserAuto::getAddress, new UserAuto.Address("河北省", "秦皇岛市"));

      Assert.assertEquals(1, exampleMapper.updateByExampleSetValues(example));
      sqlSession.rollback();
    } finally {
      //不要忘记关闭sqlSession
      sqlSession.close();
    }
  }

这里的 UserAuto.Address 是一个对象,需要类型处理为单个字段。

这个改动后,Example 中的 andLike(Fn<T, Object> fn, String value) 改为了 andLike(Fn<T, Object> fn, Object value),因为字段是对象的情况下可以通过类型处理为 String,这里只接收 String 就无法支持 UserAuto.Address 模糊查询。该字段的模糊查询也发生了变化,这会导致相关代码的不兼容:

Example<UserAuto> example = userAutoMapper.example();
example.createCriteria().andLike(UserAuto::getAddress, "河北省%");

改为:

Example<UserAuto> example = userAutoMapper.example();
example.createCriteria().andLike(UserAuto::getAddress, new UserAuto.Address("河北省", "%"));

Full Changelog: 2.2.2...2.2.3