Mybatis3结果集映射

引用:http://thoughtfly.iteye.com/blog/1487738

模板

 

Xml代码   收藏代码
  1. <resultMap id="userResultMap" type="User">  
  2.         <id property="id" column="user_id" />  
  3.         <result property="username" column="user_name" />  
  4.         <result property="password" column="hashed_password" />  
  5.     </resultMap>  
  6.   
  7.     <select id=”selectUsers” parameterType=”int” resultMap=”userResultMap”>  
  8.         select user_id, user_name, hashed_password  
  9.         from some_table  
  10.         where id = #{id}   
  11.     </select>  
  12.    

 

 一般的结果集映射已经够用,但如果返回原结果对象很是复杂则可能返回的结果映射也就要多点设计了。

 

Xml代码   收藏代码
  1. <resultMap id="detailedBlogResultMap" type="Blog">  
  2.         <constructor>  
  3.             <idArg column="blog_id" javaType="int" />  
  4.         </constructor>  
  5.         <result property="title" column="blog_title" />  
  6.         <association property="author" column="blog_author_id"  
  7.             javaType="Author">  
  8.             <id property="id" column="author_id" />  
  9.             <result property="username" column="author_username" />  
  10.             <result property="password" column="author_password" />  
  11.             <result property="email" column="author_email" />  
  12.             <result property="bio" column="author_bio" />  
  13.             <result property="favouriteSection" column="author_favourite_section" />  
  14.         </association>  
  15.         <collection property="posts" ofType="Post">  
  16.             <id property="id" column="post_id" />  
  17.             <result property="subject" column="post_subject" />  
  18.             <association property="author" column="post_author_id"  
  19.                 javaType="Author" />  
  20.             <collection property="comments" column="post_id" ofType=" Comment">  
  21.                 <id property="id" column="comment_id" />  
  22.             </collection>  
  23.             <collection property="tags" column="post_id" ofType=" Tag">  
  24.                 <id property="id" column="tag_id" />  
  25.             </collection>  
  26.             <discriminator javaType="int" column="draft">  
  27.                 <case value="1" resultType="DraftPost" />  
  28.             </discriminator>  
  29.         </collection>  
  30.     </resultMap>  

 resultMap 

 

  constructor –  类在实例化时,用来注入结果到构造方法中 

  idArg  ID 参数;标记结果作为 ID 可以帮助提高整体效能 

  arg   注入到构造方法的一个普通结果 

  id  一个ID 结果;标记结果作为ID 可以帮助提高整体效能 

  result   注入到字段或JavaBean 属性的普通结果 

  association   一个复杂的类型关联;许多结果将包成这种类型.嵌入结果映射 

  collection   复杂类型的集 . 嵌入结果映射  

  discriminator –  使用结果值来决定使用哪个结果映射 

  case –  基于某些值的结果映射. 嵌入结果映射

最佳实践:通常逐步建立结果映射。单元测试的真正帮助在这里。如果你尝试创建一次创建一个向上面示例那样的巨大的结果映射,那么可能会有错误而且很难去控制它来工作。开始简单一些,一步一步的发展。而且要进行单元测试!使用该框架

的缺点是它们有时是黑盒(是否可见源代码)。你确定你实现想要的行为的最好选择是编写单元测试。它也可以你帮助得到提交时的错误。 

 

 

 

 

 

Xml代码   收藏代码
  1. <id property="id" column="post_id"/>   
  2. <result property="subject" column="post_subject"/>   
 

 

  这些是结果映射最基本内容。id 和 result 都映射一个单独列的值到简单数据类型(字符串,整型,双精度浮点数,日期等)的单独属性或字段。 

  这两者之间的唯一不同是 id 表示的结果将是当比较对象实例时用到的标识属性。这帮助来改进整体表现,特别是缓存和嵌入结果映射

 

property  映射到列结果的字段或属性。如果匹配的是存在的,和给定名称相同的 JavaBeans 的属性,那么就会使用。否则 MyBatis 将会寻找给定名称的字段。这两种情形你可以使用通常点式的复杂属性导航。比如,你可以这样映射一些东西:“username”,或者映射到一些复杂的东西:“address.street.number”。 

 

column  从数据库中得到的列名,或者是列名的重命名标签。 

javaType  一个 Java 类的完全限定名,或一个类型别名。如果你映射到的是 HashMap,那么你应该明确地指定 javaType来保证所需的行为。 

jdbcType  在这个表格之后的所支持的 JDBC 类型列表中的类型。 JDBC 类型是仅仅需要对插入,更新和删除操作可能为空的列进行处理。这是 JDBC的需要,而不是 MyBatis 的。如果你直接使用 JDBC 编程,你需要指定这个类型-但仅仅对可能为空的值。 

typeHandler  使用这个属性,你可以覆盖默认的类型处理器。这个属性值是类的完全限定名或者是一个类型处理器的实现,或者是类型别名。 

 

 

 

Xml代码   收藏代码
  1. <constructor>   
  2.   <idArg column="id" javaType="int"/>   
  3.   <arg column=”username” javaType=”String”/>   
  4. </constructor>   

 

 映射类的构造方法,也有四个属性column 、javaType 、jdbcType 、typeHandler 

 

 

 

 

Xml代码   收藏代码
  1. <association property="author" column="blog_author_id" javaType=" Author">   
  2.   <id property="id" column="author_id"/>   
  3.   <result property="username" column="author_username"/>   
  4. </association>   

 关联映射

其属性有property 、column、javaType、jdbcType、typeHandler、select

其中select是关联的嵌套查询另外一个映射语句的 ID,可以加载这个属性映射需要的复杂类型。获取的在列属性中指定的列的值将被传递给目标 select 语句作为参数。

 

注意:要处理复合主键,你可以指定多个列名通过 column=”{prop1=col1,prop2=col2}”这种语法来传递给嵌套查询语句。这会引起prop1 和 prop2 以参数对象形式来设置给目标嵌套查询语句。 

 

Xml代码   收藏代码
  1. <resultMap id=”blogResult” type=”Blog”>  
  2.         <association property="author" column="blog_author_id"  
  3.             javaType="Author" select=”selectAuthor” />  
  4.     </resultMap>  
  5.     <select id=”selectAuthor” parameterType=”int” resultType="Author">  
  6.         SELECT * FROM AUTHOR WHERE ID = #{id}   
  7.     </select> 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值