MyBatis 教程

MyBatis 注解

因为最初设计时,MyBatis 是一个 XML 驱动的框架。配置信息是基于 XML 的,而且映射语句也是定义在 XML 中的。而到了 MyBatis 3,有新的可用的选择了。

MyBatis3 构建在基于全面而且强大的 Java 配置 API 之上。这个配置 API 是基于 XML 的 MyBatis 配置的基础,也是新的基于注解配置的基础。注解提供了一种简单的方式来实现简单映射语句,而不会引入大量的开销。

注意:不幸的是,Java 注解限制了它们的表现和灵活。尽管很多时间都花调查,设计和实验上,最强大的 MyBatis 映射不能用注解来构建,那并不可笑。C#属性(做示例)就没有这些限制,因此 MyBatis.NET 将会比 XML 有更丰富的选择。也就是说,基于 Java 注解的配置离不开它的特性。

MyBatis 提供了如下注解:

注解

目标

相对应的 XML

描述

@CacheNamespace

<cache>

为给定的命名空间(比如类)配置缓存。属性:implemetation, eviction, flushInterval, size 和 readWrite。

@CacheNamespaceRef

<cacheRef>

参照另外一个命名空间的缓存来使用。属性:value 应该是一个名空间的字符串值(也就是类的完全限定名)。

@ConstructorArgs

方法

<constructor>

收集一组结果传递给一个对象的构造方法。属性:value 是形式参数的数组。

@Arg

方法

<arg>

<idArg>

单独的构造方法参数,是 ConstructorArgs 集合的一部分。属性:id,column,javaType,typeHandler。

id 属性是布尔值,来标识用于比较的属性,和<idArg> XML 元素相似。

@TypeDiscriminator

方法

<discriminator>

一组实例值被用来决定结果映射的表现。属性:column,javaType,jdbcType,typeHandler,cases。

@Case

方法

<case>

单独实例的值和它对应的映射。属性:value,type,results。Results 属性是结果数组,因此这个注解和实际的 ResultMap 很相似,由下面的 Results 注解指定。

@Results

方法

<resultMap>

结果映射的列表,包含了一个特别结果列如何被映射到属性或字段的详情。属性:value,是 Result 注解的数组。

@Result

方法

<result>

<id>

在列和属性或字段之间的单独结果映射。属性:id,column,property,javaType,jdbcType,type Handler,one,many。id 属性是一个布尔值,表示了应该被用于比较(和在 XML 映射中的<id>相似)的属性。one 属性是单独的联系,和<association>相似,而many 属性是对集合而言的,和<collection>相似。它们这样命名是为了避免名称冲突。

@One

方法

<association>

复杂类型的单独属性值映射。属性:select,已映射语句(也就是映射器方法)的完全限定名,它可以加载合适类型的实例。注意:联合映射在注解 API中是不支持的。这是因为 Java 注解的限制,不允许循环引用。

@Many

方法

<collection>

复杂类型的集合属性映射。属性:select,是映射语句(也就是映射器方法)的完全限定名,它可以加载合适类型的一组实例。注意:联合映射在 Java注解中是不支持的。这是因为 Java 注解的限制,不允许循环引用。

@Options

方法

映射语句的属性

这个注解提供访问交换和配置选项的宽广范围,它们通常在映射语句上作为属性出现。而不是将每条语句注解变复杂,Options 注解提供连贯清晰的方式来访问它们。属性:

useCache=true,

flushCache=false ,

resultSetType=FORWARD_ONLY ,

statementType=PREPARED ,

fetchSize=-1 ,

timeout=-1 ,

useGeneratedKeys=false ,

keyProperty="id"

理解 Java 注解是很重要的,因为没有办法来指定“null”作为值。因此,一旦你使用了 Options 注解,语句就受所有默认值的支配。要注意什么样的默认值来避免不期望的行为。

@Insert

@Update

@Delete

方法

<insert>

<update>

<delete>

这些注解中的每一个代表了执行的真实 SQL。它们每一个都使用字符串数组(或单独的字符串)。如果传递的是字符串数组,它们由每个分隔它们的单独空间串联起来。这就当用 Java 代码构建 SQL 时避免了“丢失空间”的问题。然而,如果你喜欢,也欢迎你串联单独的字符串。属性:value,这是字符串数组用来组成单独的 SQL 语句。

@InsertProvider

@UpdateProvider

@DeleteProvider

@SelectProvider

方法

<insert>

<update>

<delete>

<select>

这些可选的 SQL 注解允许你指定一个类名和一个方法在执行时来返回运行的 SQL。基于执行的映射语句,MyBatis会实例化这个类,然后执行由 provider 指定的方法.这个方法可以选择性的接受参数对象作为它的唯一参数,但是必须只指定该参数或者没有参数。属性:type,method。type 属性是类的完全限定名。method 是该类中的那个方法名。注意:这节之后是对 SelectBuilder 类的讨论,它可以帮助你以干净,容于阅读的方式来构建动态 SQL。

@Param

参数

N/A

如果你的映射器的方法需要多个参数,这个注解可以被应用于映射器的方法参数来给每个参数一个名字。否则,多参数将会以它们的顺序位置来被命名(不包括任何 RowBounds 参数)。比如 #{1} ,#{2} 等,这是默认的。使用@Param(“person”),参数应该被命名为 #{person}。

说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号