`

mybatis学习入门二、Association一对一关联

 
阅读更多

一、Constructor元素,实例化的时候通过构造器将结果集注入到类中

   1.通过构造函数将结果注入到类中,在mybatis的映射文件中配置如下:

       

constructor>  
   <idArg javaType="String" column="STUDENT_ID"/>  
   <arg javaType="String" column="STUDENT_NAME"/>  
</constructor>  

 idArg–ID 参数; 将结果集标记为ID,以方便全局调用,arg–注入构造器的结果集.其中javaType指定依次注入的字段属性的类型。

 

 

    2.如果使用构造函数进行注入数据,则需要在javaBean设置形参的构造参数

public Student(String studentID, String studentName, String studentSex){...}

 

二、Association元素处理“has-one”(一对一)这种类型关系。联合映射与其它的结果集映射工作方式差不多,指定property、column、javaType(通常MyBatis会自动识别)、jdbcType(如果需要)、typeHandler。

不同的地方是您需要告诉MyBatis 如何加载一个联合查询。MyBatis使用两种方式来加载:

        1.• NestedSelect: 通过执行另一个返回预期复杂类型的映射SQL语句(即引用外部定义好
的SQL语句块)。

          

<select id="selectById" parameterType="String"  resultMap="StudentResultMap">
   select 
   student_id,student_name,teacher_id from student 
   where student_id=#{student_id}  
</select> 
 
<select id="SelectTeacher" parameterType="String"  resultMap="TeacherMap"> 
   select id,name 
   from teacher where id=#{id}  
</select> 
 
<resultMap id="StudentResultMap" type="Student"> 
    <id property="studentID" column="student_id"/> 
    <result property="studentName" column="student_name"/>
<!--
     column="teacher_id"此列的值作为参数  传递给要引用的select语句    
     select属性指定要引用的select语句
    --> 
    <association property="teacher" javaType="Teacher" column="teacher_id" select="SelectTeacher"/> 
</resultMap>
 
<!--教师实体映射--> 
<resultMap id="TeacherMap" type="Teacher"> 
      <id property="id" column="id"/> 
      <result property="name" column="name"/> 
</resultMap> 

 

 
         2 • NestedResults: 通过嵌套结果映射(nested result mappings)来处理联接结果集

          (joined results)的重复子集。

<!-- 学生和教师实现联合查询(一对一) -->
<resultMap type="Student" id="StudentResultMap">
	<id column="student_id"  property="studentID" javaType="string" />
	<result column="student_name" property="studentName" javaType="String"/>
	<result column="student_birthday" property="studentBirthday" javaType="DATE"/>
	<association property="teacher" javaType="Teacher">
		<id column="id" property="id"/>
		<result column="name" property="name" javaType="String"/>
	</association>
	</resultMap>
 	
<!-- association进行联合查询 -->
 <select id="selectById" parameterType="String"  resultMap="StudentResultMap">
 	SELECT 
		s.student_id,
		s.student_name,
		s.student_birthday,
		t.id,
		t.name					
		FROM student s,teacher t
		WHERE 
		<if test="student_id!=null and student_id!=''">
			s.student_iD = #{student_id}
		</if>
		AND 
		s.teacher_id = t.id
</select>

 

   3.在查询数据时进行参数判断时,如果是单个属性,要想参数被mybatis作为属性作为判断,可以在dao层通过注解的形式,解决此种情况。

public Student selectById(@Param(value="student_id") String student_id);

  不采用注解的形式可以采用默认参数的"_parameter"

  

	<if test="_parameter!=null and _parameter!=''">

 否则的话,会抛出异常:

 

严重: 1.严重: Servlet.service() for servlet Servletconstructor threw exception
org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'student_id' in 'class java.lang.String'
### Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'student_id' in 'class java.lang.String'

 

 

分享到:
评论
1 楼 DR-YangLong 2013-12-20  
这个弄复杂了吧

相关推荐

    MyBatis入门到精通

    MyBatis支持一对多、多对多的复杂关联映射,通过`association`和`collection`标签,可以实现级联查询和更新。 10. **缓存机制** MyBatis提供了本地缓存和二级缓存,可以提高数据访问效率。开发者可以通过配置开启...

    Mybatis入门资源

    "Mybates学习(五)实现关联表查询.docx"会涉及Mybatis的多表查询,包括一对一、一对多、多对多的关联映射。Mybatis提供了&lt;association&gt;、等标签来处理关联关系,并且支持嵌套查询和级联查询。正确使用关联查询能够...

    java资源之Mybatis基础入门学习笔记,详细解析,适合新手,第二天进阶笔记

    在 MyBatis 中,关联关系分为一对一、一对多和多对多三种类型。一对一关系可以通过在 resultMap 中使用 `association` 标签来处理,而一对多或多对多关系则通常涉及集合类型的映射,这需要使用 `collection` 标签来...

    MyBatis 从入门到精通书中实例

    关联映射允许我们处理一对多、一对一等复杂的表关系,通过`&lt;association&gt;`和`&lt;collection&gt;`标签,可以方便地获取嵌套的结果集。缓存机制则能提高查询效率,MyBatis支持一级缓存(SqlSession级别)和二级缓存(Mapper...

    Mybatis 入门示例代码之 Association

    在Mybatis中,`Association`是一个重要的概念,用于处理一对多或一对一的关联关系。在这个入门示例中,我们将探讨如何使用`Association`进行复杂类型的映射,以及如何在查询结果中嵌入这些关联对象。 首先,`...

    mybatis入门实例(多对一xml)

    在这个“mybatis入门实例(多对一xml)”中,我们将深入探讨如何在MyBatis中处理多对一的关系映射,以及如何通过XML配置文件实现这种映射。 首先,多对一关系指的是在数据库设计中,一个实体(表)可以与多个其他实体...

    Mybatis 入门、Dao开发模式、Mapper代理开发模式、动态sql、一对一、一对多、多对多

    5. **一对一关联映射**: 在两个表之间存在一对一关系时,Mybatis可以通过resultMap标签定义两个实体间的关联。比如,一个用户表和一个地址表,用户表中包含地址ID,可以通过外键关联获取完整的地址信息。 6. **一...

    mybatis入门的基础三天知识量

    - **关联查询**:使用`association`和`collection`元素定义关联关系。 通过上述内容的学习,我们不仅了解了如何使用MyBatis进行基本的CRUD操作,还深入探讨了其高级特性,为日后使用MyBatis解决实际问题打下了坚实...

    mybatis一对多小例子

    这个简单的一对多小例子展示了 MyBatis 如何优雅地处理关联查询,避免了手动编写复杂的 JOIN SQL,提高了代码的可维护性和可读性。通过 MyBatis 的映射机制,我们可以更加专注于业务逻辑,而不是数据库交互细节。

    mybatis学习文档资料

    ### MyBatis 学习知识点概述 #### 一、MyBatis 概述与特性 - **MyBatis**:一种支持普通SQL查询、存储过程以及高级映射的优秀持久层框架。它允许开发者直接编写SQL语句,并通过简单的XML或注解进行参数设置和结果...

    mybatis入门之级联1对1(无延迟加载)

    在数据库设计中,1对1关联是指两个表之间存在一对一的关系,即一个表中的每一行只能与另一个表中的唯一一行对应。在MyBatis中,我们可以通过`&lt;association&gt;`标签来配置这种关联。例如,假设我们有一个`User`表和一个...

    mybatis demo

    它涵盖了MyBatis的核心功能,包括基本的CRUD操作、一对一和一对多关联映射,以及如何在Spring环境中配置和使用MyBatis。通过深入研究这个示例,你可以逐步熟悉MyBatis的工作原理,并将其应用于实际的项目开发中。

    mybatis实战

    Mybatis提供了处理复杂关联关系的能力,通过association(一对一)、collection(一对多)和many-to-many(多对多)标签,可以轻松地映射出复杂的数据库表关系。 12、自定义类型处理器 对于特殊的数据类型,Mybatis...

    Mybatis入门项目

    这个“Mybatis入门项目”提供了一个基础的学习平台,帮助初学者快速掌握Mybatis的核心概念和用法。在这个项目中,我们将深入探讨Mybatis的配置、基本操作以及实体类自动生成。 1. **Mybatis配置**: Mybatis的配置...

    Mybatis入门到实践.pdf

    - **association**:用于处理一对多或多对一的关系。 - **collection**:用于处理多对多的关系。 - **分步查询**:解决因查询数据量过大导致性能问题的一种方法。 - **延迟加载**:通过懒加载机制提高系统性能。 ##...

    mybatisDemo进阶入门有价值的案例,看过不会让你后悔,值得拥有.rar

    2. **关联查询**:MyBatis 支持一对多、多对多等复杂关系的关联查询。在处理实体类之间的关联关系时,可以通过 `&lt;association&gt;` 和 `&lt;collection&gt;` 标签来定义。比如,一个用户可以有多个订单(一对多),而一个订单...

    mybatis项目

    MyBatis支持JOIN操作,可以在Mapper XML文件中编写JOIN语句,或者使用`&lt;association&gt;`、`&lt;collection&gt;`等标签进行复杂关联映射。 7. **事务管理**:MyBatis提供了基于编程和基于配置两种事务管理方式。编程式事务...

    springmybatis

    mybatis实战教程mybatis in action之四实现关联数据的查询 mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action...

    MyBatis3.2.4完全自学手册

    MyBatis支持一级缓存和二级缓存。一级缓存默认开启,用于缓存同一个SQLSession内的查询结果;二级缓存则需要显式启用,并可以跨SQLSession共享查询结果。 示例: ```xml ... ``` #### 十一、整合Spring ...

Global site tag (gtag.js) - Google Analytics