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. 使用python操作RabbitMQ,Redis,Memcache,SQLAlchemy 其一

    一.概念 1.Memcached     Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态 ...

  2. (IOS)数据持久化

    1.属性列表序列化 2.模型对象归档 3.嵌入式SQLite3 4.Core Data 5.应用程序设置 6.UIDocument管理文档存储 7.iCloud Demo界面: 1.属性列表序列化 即 ...

  3. NET Core,跨平台的轻量级RPC

    NET Core,跨平台的轻量级RPC:Rabbit.Rpc 特性一览 Apache License 2.0协议开源 支持客户端负载均衡(提供了轮询.随机算法的实现) 支持ZooKeeper和文件共享 ...

  4. skin++ 终极破解之法

    *[标题]:Skin++通用界面换肤系统V2.0.1破解探讨 *[作者]:gz1X <gz1x(at)tom(dot)com> *[来自]:中国黑客联盟 *[前言]: skin技术,大家都 ...

  5. IT第七天 - 类及其属性、方法的理解,断点调试初识,代码优化总结,编程逻辑培养

    IT第七天 上午 类 1.对象:是多个实体抽象出来的共同点集合,对象包括:属性(即实体的特征).方法(即尸体的功能作用) 2.程序中,用类来模拟对象 3.类是抽象的,是对象的类型,是将多个拥有相同属性 ...

  6. SB中使用Autolayout设置到父视图的间距为0

    发现打上钩的话在plus以下的屏幕上控件的实际x会是-4但是在plus上是0, 所以要设置一致的到视图的左右都未0 必须把Constrain to margins钩去掉!

  7. <climits>头文件使用方法

    <climits>头文件定义的符号常量 CHAR_MIN  char的最小值SCHAR_MAX  signed char 最大值SCHAR_MIN   signed char 最小值UCH ...

  8. csharp .net vb 复制图像

    .NET Compact Framework 不支持 Image.Clone 方法,可是仍能够复制图像和图像的某些部分.以下的演示例子演示怎样运行以下操作: 定义一个方法以创建位图. 定义一个重载方法 ...

  9. MySQL中关于日期、时间的数据类型和函数

    一.日期相关的数据类型 1.datetime 占用8字节,既显示了日期,又显示了时间.其表示的日期范围为“1000-01-01 00:00:00”到“9999-12-31 23:59:59” 2.da ...

  10. Thinkphp里import的几个使用方法介绍

    以下附上import的几个使用方法介绍 1.使用方法一 import('@.Test.Translate'); @,表示项目根文件夹.假定根文件夹是:App/ 导入类库的路径是:App/Lib/Tes ...