Mybatis源码学习(二)annotation包

注解

因为最初设计时,MyBatis 是一个 XML 驱动的框架。配置信息是基于 XML 的,而且 映射语句也是定义在 XML 中的。而到了 MyBatis 3,有新的可用的选择了。MyBatis 3 构建 在基于全面而且强大的 Java 配置 API 之上。这个配置 API 是基于 XML 的 MyBatis 配置的 基础,也是新的基于注解配置的基础。注解提供了一种简单的方式来实现简单映射语句,而 不会引入大量的开销。

注解 目标 XML 描述
@CacheNamespace 为给定的命名空间配置缓存。属性:implementation(PerpetualCache),eviction(LruCache), lushInterval(0),size(1024)和readWrite(true)。
@CacheNamespaceRef 参照另外一个命名空间的缓存来使用。属性:value
@ConstructorArgs 方法 收集一组结果传递给一个构造方法。属性:value,是形式参数的数组。
@Arg 方法 单独的构造方法参数,是 ConstructorArgs 集合的一部分。属性: id(false),column,javaType(void),typeHandler,jdbcType(Undefined),select,resultMap。id 属性是布尔值,来标识用于比较的属性,与XML 元素相似。
@TypeDiscriminator 方法 一组实例值被用来决定结果映射的表现。属性: column, javaType, jdbcType, cases,typeHandler。cases属性就是实例的数组。
@Case 方法 单独实例的值和它对应的映射。属性: value,type,results。Results 属性是结果数组,和实际的 ResultMap 很相似,由下面的 Results 注解指定。
@Results 方法 结果映射的列表, 包含了一个特别结果列如何被映射到属性或字段的详情。属性:value, id。value 属性是 Result 注解的数组。Id是result mapping的名字。
@Result 方法 在列和属性或字段之间的结果映射。属性: id,column, property, javaType ,jdbcType ,type Handler, one,many。one属性是单独的,而many属性是对集合而言的。
@One 方法 单独属性值映射。属性: select,已映射语句的完全限定名。fetchType实例,取代全局配置参数lazyloadingenabled(可选值:lazy、eager、default)
@Many 方法 属性: select, 一个映射语句或方法的完全限定名;fetchType实例,取代全局配置参数lazyloadingenabled(可选值:lazy、eager、default)
@MapKey 方法 属性:value
@Options 方法 映射语句的属性 这个注解提供访问交换和配置选项, 它们通常在映射语句上作为属性出现。属性:useCache=true , flushCache=false , resultSetType=FORWARD_ONLY , statementType=PREPARED , fetchSize=-1 , , timeout=-1 useGeneratedKeys=false , keyProperty=”id” , keyColumn=”” , resultSets=””
@Insert@Update@Delete@Select 方法 代表执行的真实 SQL。它们每一个都使用字符串数组 (或单独的字符串)。属性:value
@InsertProvider@UpdateProvider、@DeleteProvider@SelectProvider 方法 允许你指定一个类名和一个方法在执行时来返回,允许创建动态的 SQL。该方法可以有选择地接受参数对象. 属性: type,method。
@Param 参数 给参数命名。否则,多参数将会以它们的顺序位置来被命名 (不包括任何 RowBounds 参数) 比如。 #{param1} , #{param2} 等 , 这是默认的。使用@Param(“person”),参数应该被命名为 #{person}。
@SelectKey 方法 主要用于@insert、@insertProvider、@update @updateProvider的注解,如果定义了selectKey注解,mybatis会忽略掉任何通过@options注解标注的generated key properties set。属性:statement,keyProerty,keyColumn,before,resultType,statementType(prepared)
@ResultMap 方法 N/A 给select的结果提供resultMap的Id,复用xml中定义的resultMap。覆盖同一个select注解下的 @Results or @ConstructorArgs 。
@ResultType 方法 N/A
@Flush 方法 N/A 3.3以上,被mapper接口定义的方法在If this被 SqlSession#flushStatements()调用。

例子

这个例子展示了如何使用 @SelectKey 注解来在插入前读取数据库序列的值:

@Insert("insert into table3 (id, name) values(#{nameId}, #{name})")
@SelectKey(statement="call next value for TestSequence", keyProperty="nameId", before=true, resultType=int.class)
int insertTable3(Name name);

其他例子详见官网:mybatis注解

你可能感兴趣的:(源码学习)