一、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'
相关推荐
MyBatis支持一对多、多对多的复杂关联映射,通过`association`和`collection`标签,可以实现级联查询和更新。 10. **缓存机制** MyBatis提供了本地缓存和二级缓存,可以提高数据访问效率。开发者可以通过配置开启...
"Mybates学习(五)实现关联表查询.docx"会涉及Mybatis的多表查询,包括一对一、一对多、多对多的关联映射。Mybatis提供了<association>、等标签来处理关联关系,并且支持嵌套查询和级联查询。正确使用关联查询能够...
在 MyBatis 中,关联关系分为一对一、一对多和多对多三种类型。一对一关系可以通过在 resultMap 中使用 `association` 标签来处理,而一对多或多对多关系则通常涉及集合类型的映射,这需要使用 `collection` 标签来...
关联映射允许我们处理一对多、一对一等复杂的表关系,通过`<association>`和`<collection>`标签,可以方便地获取嵌套的结果集。缓存机制则能提高查询效率,MyBatis支持一级缓存(SqlSession级别)和二级缓存(Mapper...
在Mybatis中,`Association`是一个重要的概念,用于处理一对多或一对一的关联关系。在这个入门示例中,我们将探讨如何使用`Association`进行复杂类型的映射,以及如何在查询结果中嵌入这些关联对象。 首先,`...
在这个“mybatis入门实例(多对一xml)”中,我们将深入探讨如何在MyBatis中处理多对一的关系映射,以及如何通过XML配置文件实现这种映射。 首先,多对一关系指的是在数据库设计中,一个实体(表)可以与多个其他实体...
5. **一对一关联映射**: 在两个表之间存在一对一关系时,Mybatis可以通过resultMap标签定义两个实体间的关联。比如,一个用户表和一个地址表,用户表中包含地址ID,可以通过外键关联获取完整的地址信息。 6. **一...
- **关联查询**:使用`association`和`collection`元素定义关联关系。 通过上述内容的学习,我们不仅了解了如何使用MyBatis进行基本的CRUD操作,还深入探讨了其高级特性,为日后使用MyBatis解决实际问题打下了坚实...
这个简单的一对多小例子展示了 MyBatis 如何优雅地处理关联查询,避免了手动编写复杂的 JOIN SQL,提高了代码的可维护性和可读性。通过 MyBatis 的映射机制,我们可以更加专注于业务逻辑,而不是数据库交互细节。
### MyBatis 学习知识点概述 #### 一、MyBatis 概述与特性 - **MyBatis**:一种支持普通SQL查询、存储过程以及高级映射的优秀持久层框架。它允许开发者直接编写SQL语句,并通过简单的XML或注解进行参数设置和结果...
在数据库设计中,1对1关联是指两个表之间存在一对一的关系,即一个表中的每一行只能与另一个表中的唯一一行对应。在MyBatis中,我们可以通过`<association>`标签来配置这种关联。例如,假设我们有一个`User`表和一个...
它涵盖了MyBatis的核心功能,包括基本的CRUD操作、一对一和一对多关联映射,以及如何在Spring环境中配置和使用MyBatis。通过深入研究这个示例,你可以逐步熟悉MyBatis的工作原理,并将其应用于实际的项目开发中。
Mybatis提供了处理复杂关联关系的能力,通过association(一对一)、collection(一对多)和many-to-many(多对多)标签,可以轻松地映射出复杂的数据库表关系。 12、自定义类型处理器 对于特殊的数据类型,Mybatis...
这个“Mybatis入门项目”提供了一个基础的学习平台,帮助初学者快速掌握Mybatis的核心概念和用法。在这个项目中,我们将深入探讨Mybatis的配置、基本操作以及实体类自动生成。 1. **Mybatis配置**: Mybatis的配置...
- **association**:用于处理一对多或多对一的关系。 - **collection**:用于处理多对多的关系。 - **分步查询**:解决因查询数据量过大导致性能问题的一种方法。 - **延迟加载**:通过懒加载机制提高系统性能。 ##...
2. **关联查询**:MyBatis 支持一对多、多对多等复杂关系的关联查询。在处理实体类之间的关联关系时,可以通过 `<association>` 和 `<collection>` 标签来定义。比如,一个用户可以有多个订单(一对多),而一个订单...
MyBatis支持JOIN操作,可以在Mapper XML文件中编写JOIN语句,或者使用`<association>`、`<collection>`等标签进行复杂关联映射。 7. **事务管理**:MyBatis提供了基于编程和基于配置两种事务管理方式。编程式事务...
mybatis实战教程mybatis in action之四实现关联数据的查询 mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action...
MyBatis支持一级缓存和二级缓存。一级缓存默认开启,用于缓存同一个SQLSession内的查询结果;二级缓存则需要显式启用,并可以跨SQLSession共享查询结果。 示例: ```xml ... ``` #### 十一、整合Spring ...