|
1 | 1 | #更新日志
|
2 | 2 |
|
| 3 | +###3.3.1 - 2015-12-09 |
| 4 | + |
| 5 | +- 增加`enableMethodAnnotation`参数,可以控制是否支持方法上的JPA注解,默认`false`。 |
| 6 | + 设置`enableMethodAnnotation = true`的时候注意,如`getRealName`或`setYourName`都会产生`realName`属性或`yourName`属性,如果该方法对应的属性不是表中的字段,就需要给方法增加`@Transient`注解。 |
| 7 | + 同样如果你的实体是继承`Map`类型的,你不需要在实体中写`private String userName`这样的属性,你只需要写`setUserName`或`getUserName`这样的方法就可以。 |
| 8 | +- 在处理的注解的时候,优先从`Field`获取,然后是`setter`方法,最后是`getter`方法,注解重复的情况下,只获取按顺序得到的第一个 |
| 9 | +- 为了支持如`public class Country extends Entity<Integer, String>`这样的泛型类型,在生成`#{propertyName}`的时候都带上了`javaType`属性。 |
| 10 | + 产生的结果就是`#{propertyName, javaType=java.lang.Integer}`这样子的,这会导致当你调用方法时,必须保证类型一致。 |
| 11 | + 也就是假设主键是`Integer id`,调用`selectByPrimaryKey(Object id)`的时候,参数`id`必须使用`100`这样的数字,不能使用`"100"`字符串(以前版本可以)。 |
| 12 | + 如果不带`javaType`,那么如果`id`是个泛型,MyBatis查找的时候就会因为找不到正确的类型而抛出异常。 |
| 13 | +- 为了让扩展更方便,将`tk.mybatis.mapper.provider`包下所有的通用接口的实现方法改为了`String`形式。 |
| 14 | + 例如`selectByPrimaryKey`方法: |
| 15 | + ```java |
| 16 | + /** |
| 17 | + * 根据主键进行查询 |
| 18 | + * |
| 19 | + * @param ms |
| 20 | + */ |
| 21 | + public String selectByPrimaryKey(MappedStatement ms) { |
| 22 | + final Class<?> entityClass = getEntityClass(ms); |
| 23 | + //将返回值修改为实体类型,只有select返回实体类型的需要修改返回值,其他如insert,update,delete都是返回int,不需要修改 |
| 24 | + setResultType(ms, entityClass); |
| 25 | + StringBuilder sql = new StringBuilder(); |
| 26 | + sql.append("select "); |
| 27 | + sql.append(EntityHelper.getSelectColumns(entityClass)); |
| 28 | + sql.append(" from "); |
| 29 | + sql.append(SqlHelper.getDynamicTableName(entityClass, tableName(entityClass))); |
| 30 | + sql.append(" where "); |
| 31 | + sql.append(EntityHelper.getPrimaryKeyWhere(entityClass)); |
| 32 | + return sql.toString(); |
| 33 | + } |
| 34 | + ``` |
| 35 | + 自己扩展单表操作的方法是非常容易的事情,建议有一定通用Mapper使用基础的自行扩展,扩展可以参考[如何扩展通用接口](http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/6.MyMapper.md) |
| 36 | +- 新增`SqlHelper`工具类,其中包含了大量可用的现成的SQL方法 |
| 37 | + |
| 38 | + |
3 | 39 | ##3.3.0 - 2015-11-01
|
4 | 40 |
|
5 | 41 | - 增加对动态表名的支持,需要实体类继承`IDynamicTableName`接口,用法见[详细说明](http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/3.2.Use330.md)
|
|
0 commit comments