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
plain
copy

  1. <resultMap type="UserAlias" id="UserResult">
  2. <id column="id" jdbcType="INTEGER" property="id"/>
  3. <result column="username" jdbcType="VARCHAR" property="username"/>
  4. <result column="administrator" jdbcType="BOOLEAN" property="administrator"/>
  5. <association property="password" javaType="org.apache.ibatis.submitted.complex_property.EncryptedString">
  6. <result property="encrypted" column="password" javaType="string"/>
  7. </association>
  8. </resultMap>

使用这种方式可以达到我们的目的,但是对于这种只有1个或很少个属性的对象来说,配置一个association未免太麻烦了,如果使用复杂属性配置,会变的很容易。复杂属性写法如下:

[html] view
plain
copy

  1. <resultMap type="UserAlias" id="UserResult">
  2. <id column="id" jdbcType="INTEGER" property="id"/>
  3. <result column="username" jdbcType="VARCHAR" property="username"/>
  4. <result column="password" jdbcType="VARCHAR" property="password.encrypted"/>
  5. <result column="administrator" jdbcType="BOOLEAN" property="administrator"/>
  6. </resultMap>

使用这种复杂属性时,Mybatis会自动创建相应类型的对象,并将查询结果赋值给属性。这种方式明显比上面的要简单很多,当EncryptedString类有多个字段需要赋值时,用association方式的需要在其中增加相应的result,使用复杂对象的只需要在resultMap中继续添加result,property="password.xxx"即可。虽然两种方式都没有问题,建议选择其中一种方式,便于其他开发者统一理解。

除了上面这种复杂属性外,还有一种我们可能已经使用过多次的方式,如下:

[html] view
plain
copy

  1. <update id="update" parameterType="UserAlias">
  2. UPDATE user SET
  3. username = #{username,jdbcType=VARCHAR},
  4. password = #{password.encrypted:VARCHAR},
  5. administrator = #{administrator,jdbcType=BOOLEAN}
  6. WHERE
  7. id = #{id:INTEGER}
  8. </update>

这种通过点(.)访问的方式也是Mybatis支持的复杂属性,可以是很多层的属性。并且支持数组和集合的“[]”下标获取。

不知道有没有注意到上面这个例子有点不同寻常的地方,可能你也发现了,有些地方写的是

[html] view
plain
copy

  1. #{username,jdbcType=VARCHAR}

而有的是

[html] view
plain
copy

  1. #{id:INTEGER}

第一种是最常见的方式,第二种是一种更简单的方式,第二种会自动将第一个冒号(:)后面的属性记录成jdbcType,后面还可以继续跟其他的属性。

关于Mybatis的复杂属性就这些内容,如果有疑问,欢迎留言。

Mybatis 示例之 复杂(complex)属性(property)的更多相关文章

  1. Mybatis 示例之 Association - 偶尔记一下 - 博客频道 - CSDN.NET

    body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...

  2. MyBatis 示例-联合查询

    简介 MyBatis 提供了两种联合查询的方式,一种是嵌套查询,一种是嵌套结果.先说结论:在项目中不建议使用嵌套查询,会出现性能问题,可以使用嵌套结果. 测试类:com.yjw.demo.JointQ ...

  3. EF框架step by step(6)—处理实体complex属性

    上一篇的中介绍过了对于EF4.1框架中,实体的简单属性的处理 这一篇介绍一下Code First方法中,实体Complex属性的处理.Complex属性是将一个对象做为另一个对象的属性.映射到数据库中 ...

  4. MyBatis 示例-类型处理器

    MyBatis 提供了很多默认类型处理器,参考官网地址:链接,除了官网提供的类型处理器,我们也可以自定义类型处理器. 具体做法为:实现 org.apache.ibatis.type.TypeHandl ...

  5. MyBatis 示例-简介

    简介 为了全面熟悉 MyBatis 的使用,整理一个 MyBatis 的例子,案例中包含了映射器.动态 SQL 的使用.本章先介绍项目结构和配置. 项目地址:链接 数据库表的模型关系:链接 项目结构 ...

  6. MyBatis 示例-插件

    简介 利用 MyBatis Plugin 插件技术实现分页功能. 分页插件实现思路如下: 业务代码在 ThreadLocal 中保存分页信息: MyBatis Interceptor 拦截查询请求,获 ...

  7. MyBatis 示例-主键回填

    测试类:com.yjw.demo.PrimaryKeyTest 自增长列 数据库表的主键为自增长列,在写业务代码的时候,经常需要在表中新增一条数据后,能获得这条数据的主键 ID,MyBatis 提供了 ...

  8. 区分元素特性attribute和对象属性property

    × 目录 [1]定义 [2]共有 [3]例外[4]特殊[5]自定义[6]混淆[7]总结 前面的话 其实attribute和property两个单词,翻译出来都是属性,但是<javascript高 ...

  9. mybatis There is no getter for property named 'xxxx

    mybatis There is no getter for property named 'xxxx 360反馈意见截图16230322799670.png http://blog.sina.com ...

随机推荐

  1. 高级UNIX环境编程10 信号

    信号是软件中断,提供一种处理异步事件的方法 <signal.h> sigaction()

  2. pkusc2015

    Mex 题目大意:给出一个序列\(a\),定义\(f(l,r)\)为集合{\(a_l, a_{l+1}, -, a_r\)}的sg值,求\(\sum_i \sum_{j(i\leq j)} f(i,j ...

  3. 公共 DNS server IP 地址

    公共 DNS server IP 地址 名称 DNS server IP 地址 CNNIC SDNS 1.2.4.8 210.2.4.8 114 DNS 114.114.114.114 114.114 ...

  4. Fundamental types

    Fundamental types void type boolean type character types integer types Modifiers signedness size Pro ...

  5. Win7 x64安装Paramiko出问题

    今天上午windows下配置paramiko环境时出现问题,随手记录下来.   先说一下我的环境: win7 x64 旗舰版.Python3.5.0.pip8.1.0 pip install para ...

  6. 【集训笔记】二分图及其应用【HDOJ1068【HDOJ1150【HDOJ1151

    匈牙利算法样例程序 格式说明 输入格式: 第1行3个整数,V1,V2的节点数目n1,n2,G的边数m 第2-m+1行,每行两个整数t1,t2,代表V1中编号为t1的点和V2中编号为t2的点之间有边相连 ...

  7. pay包注释(二)

    @login_required()def to_register(request):    return render_to_response("pay/register_yeepay.ht ...

  8. LOVEU

    闲来无事,自己编写一个小程序,自娱自乐 //date: 2013/8/14 //designer :pengxiaoen //function : printf the word love #incl ...

  9. 用Verilog实现IIC通讯

    注意,此代码是错误代码,并不能实现想要的结果. 之所以留着,因为里面的enable 是独立开来的思想值得借鉴.就是控制单元和运算单元分开(我也是借鉴别人的实现思想).具体用verilogHDL实现II ...

  10. Python函数式编程:内置函数map()使用说明

    一.概述 map操作是函数式编程中的重要技术之一,其作用就是对一个集合中的每个元素做处理,生成一个新的元素,由这些新的元素组成一个新的集合的返回. 所以map操作后,产生的新集合的元素个数和原集合的元 ...