Mybatis示例专栏:http://blog.csdn.net/column/details/mybatis-sample.html
Mybatis的复杂属性,Mybatis的这个特点很少被提及,但是有些时候确实又有用。Mybatis的复杂属性指的什么呢?
有如下两个对象:
在User对象中有一个字段password,类型是EncryptedString,这个类只有一个字段encrypted。
Mybatis的复杂属性指的就是User中password这样的属性。如果我们不用复杂属性这个特性来配置User对象,我们能怎么做呢?
在之前的文章中提到过Association的使用方法(Mybatis 示例之 Association),我们可以将password配置为association,使用association的写法(如果看不懂,请先看association的介绍)如下:
- <resultMap type="UserAlias" id="UserResult">
- <id column="id" jdbcType="INTEGER" property="id"/>
- <result column="username" jdbcType="VARCHAR" property="username"/>
- <result column="administrator" jdbcType="BOOLEAN" property="administrator"/>
- <association property="password" javaType="org.apache.ibatis.submitted.complex_property.EncryptedString">
- <result property="encrypted" column="password" javaType="string"/>
- </association>
- </resultMap>
- <resultMap type="UserAlias" id="UserResult">
- <id column="id" jdbcType="INTEGER" property="id"/>
- <result column="username" jdbcType="VARCHAR" property="username"/>
- <result column="password" jdbcType="VARCHAR" property="password.encrypted"/>
- <result column="administrator" jdbcType="BOOLEAN" property="administrator"/>
- </resultMap>
除了上面这种复杂属性外,还有一种我们可能已经使用过多次的方式,如下:
- <update id="update" parameterType="UserAlias">
- UPDATE user SET
- username = #{username,jdbcType=VARCHAR},
- password = #{password.encrypted:VARCHAR},
- administrator = #{administrator,jdbcType=BOOLEAN}
- WHERE
- id = #{id:INTEGER}
- </update>
不知道有没有注意到上面这个例子有点不同寻常的地方,可能你也发现了,有些地方写的是
- #{username,jdbcType=VARCHAR}
- #{id:INTEGER}
第一种是最常见的方式,第二种是一种更简单的方式,第二种会自动将第一个冒号(:)后面的属性记录成jdbcType,后面还可以继续跟其他的属性。
关于Mybatis的复杂属性就这些内容,如果有疑问,欢迎留言。