Mybatis 示例之 复杂(complex)属性(property)
2015-05-10 16:04
357 查看
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的介绍)如下:
[html] view
plaincopy
<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>
使用这种方式可以达到我们的目的,但是对于这种只有1个或很少个属性的对象来说,配置一个association未免太麻烦了,如果使用复杂属性配置,会变的很容易。复杂属性写法如下:
[html] view
plaincopy
<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>
使用这种复杂属性时,Mybatis会自动创建相应类型的对象,并将查询结果赋值给属性。这种方式明显比上面的要简单很多,当EncryptedString类有多个字段需要赋值时,用association方式的需要在其中增加相应的result,使用复杂对象的只需要在resultMap中继续添加result,property="password.xxx"即可。虽然两种方式都没有问题,建议选择其中一种方式,便于其他开发者统一理解。
除了上面这种复杂属性外,还有一种我们可能已经使用过多次的方式,如下:
[html] view
plaincopy
<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>
这种通过点(.)访问的方式也是Mybatis支持的复杂属性,可以是很多层的属性。并且支持数组和集合的“[]”下标获取。
不知道有没有注意到上面这个例子有点不同寻常的地方,可能你也发现了,有些地方写的是
[html] view
plaincopy
#{username,jdbcType=VARCHAR}
而有的是
[html] view
plaincopy
#{id:INTEGER}
第一种是最常见的方式,第二种是一种更简单的方式,第二种会自动将第一个冒号(:)后面的属性记录成jdbcType,后面还可以继续跟其他的属性。
关于Mybatis的复杂属性就这些内容,如果有疑问,欢迎留言。
Mybatis的复杂属性,Mybatis的这个特点很少被提及,但是有些时候确实又有用。Mybatis的复杂属性指的什么呢?
有如下两个对象:
在User对象中有一个字段password,类型是EncryptedString,这个类只有一个字段encrypted。
Mybatis的复杂属性指的就是User中password这样的属性。如果我们不用复杂属性这个特性来配置User对象,我们能怎么做呢?
在之前的文章中提到过Association的使用方法(Mybatis
示例之 Association),我们可以将password配置为association,使用association的写法(如果看不懂,请先看association的介绍)如下:
[html] view
plaincopy
<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>
使用这种方式可以达到我们的目的,但是对于这种只有1个或很少个属性的对象来说,配置一个association未免太麻烦了,如果使用复杂属性配置,会变的很容易。复杂属性写法如下:
[html] view
plaincopy
<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>
使用这种复杂属性时,Mybatis会自动创建相应类型的对象,并将查询结果赋值给属性。这种方式明显比上面的要简单很多,当EncryptedString类有多个字段需要赋值时,用association方式的需要在其中增加相应的result,使用复杂对象的只需要在resultMap中继续添加result,property="password.xxx"即可。虽然两种方式都没有问题,建议选择其中一种方式,便于其他开发者统一理解。
除了上面这种复杂属性外,还有一种我们可能已经使用过多次的方式,如下:
[html] view
plaincopy
<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>
这种通过点(.)访问的方式也是Mybatis支持的复杂属性,可以是很多层的属性。并且支持数组和集合的“[]”下标获取。
不知道有没有注意到上面这个例子有点不同寻常的地方,可能你也发现了,有些地方写的是
[html] view
plaincopy
#{username,jdbcType=VARCHAR}
而有的是
[html] view
plaincopy
#{id:INTEGER}
第一种是最常见的方式,第二种是一种更简单的方式,第二种会自动将第一个冒号(:)后面的属性记录成jdbcType,后面还可以继续跟其他的属性。
关于Mybatis的复杂属性就这些内容,如果有疑问,欢迎留言。
相关文章推荐
- Mybatis 示例之 复杂(complex)属性(property)
- Mybatis 示例之 复杂(complex)属性(property)
- Mybatis 示例之 复杂(complex)属性(property)
- Mybatis 示例之 复杂(complex)属性(property)
- Mybatis 示例之 复杂(complex)属性(property)
- Mybatis 示例之 复杂(complex)属性(property)
- 在hibernate 中比 SimplePropertyPreFilter 还要好用的过滤类 ComplexPropertyPreFilter(级联过滤,关系映射过滤类,复杂的属性预过滤器)!!!!
- spring3+mybatis 使用MapperScannerConfigurer时context:property-placeholder载不进属性
- 动态属性(PropertyInfo)示例
- 3.7.2.1. PropertyPlaceholderConfigurer示例(属性点位符)
- Android中属性动画Property Animation使用示例(四)
- Android中属性动画Property Animation使用示例(四)
- spring 和mybatis整合时 使用context:property-placeholder载不进属性 还报org.springframework.beans.factory.BeanCrea
- Android中属性动画Property Animation使用示例(三)
- Android中属性动画Property Animation使用示例(三)
- Android中属性动画Property Animation使用示例(二)
- Android中属性动画Property Animation使用示例(二)
- Property Animator 属性动画概述与示例
- Android中属性动画Property Animation使用示例(一)
- Property Animator 属性动画概述与示例