在上一个篇文章中只是简单讲了单表查询或者多表查询到一个对象的情况,下面我们着重讲一下在一个对象中包含其他的一个或者多个对象的情况的查询,也就是在查询中我们所说的一对一关系和一对多关系的查询。
首先一对一关系的查询,是在一个对象中定义另外的一个对象,而一对多关系的查询是在一个对象中定义一个集合。
最后我们会讲一下深度查询。
首先在数据库中创建两张表,如下:
下面创建两个java Bean
package com.mybatis.in; public class ClassRoom { private String roomId; private String roomName; private float area; public String getRoomId() { return roomId; } public void setRoomId(String roomId) { this.roomId = roomId; } public String getRoomName() { return roomName; } public void setRoomName(String roomName) { this.roomName = roomName; } public float getArea() { return area; } public void setArea(float area) { this.area = area; } }
package com.mybatis.in; public class Course { private String courseId; private String courseName; private String courseType; private ClassRoom classRoom; public String getCourseId() { return courseId; } public void setCourseId(String courseId) { this.courseId = courseId; } public String getCourseName() { return courseName; } public void setCourseName(String courseName) { this.courseName = courseName; } public String getCourseType() { return courseType; } public void setCourseType(String courseType) { this.courseType = courseType; } public void setClassRoom(ClassRoom classRoom) { this.classRoom = classRoom; } public ClassRoom getClassRoom() { return classRoom; } }
下面创建一个接口
package com.mybatis.in; import java.util.List; public interface CourseMapper { public List<Course> getCourses(); public List<Course> getCoursesClassRoom(); }
下面创建一个映射文件
<resultMap type="ClassRoom" id="classRoom"> <id property="roomId" column="roomId"/> <result property="roomName" column="roomName"/> <result property="area" column="area"/> </resultMap> <resultMap id="courseClassRoom" type="Course"> <id property="courseId" column="courseId"/> <result property="courseType" column="courseType"/> <result property="courseName" column="courseName"/> <association property="classRoom" resultMap="classRoom"></association> </resultMap> <!-- configuration for the SQL --> <select id="getCoursesClassRoom" resultMap="courseClassRoom"> <![CDATA[select c.courseId courseId,c.courseType courseType,c.courseName courseName, room.roomId roomId,room.roomName roomName,room.area area from course c inner join classroom room on c.roomId=room.roomId]]> </select>
我们要对这个配置进行关键的讲解,其中的association配置就起到了映射的作用,相信大家也看的明白,下面我们讲一下association还有其他几种配置方式,
一种就是不要resultMap属性,然后在association中间进行配置,和resultMaper一样的配置方式。association还有两个重要的属性一个javaType,还有一个columnPrefix,对于javaType,就是你可以再javaBean中定义一个抽象的类型,然后在查询的时候决定使用哪一个具体的类型。columnPrefix的作用就是,对于resultMap中所有的column可以再SQL中添加一个prefix达到区分的作用。
<!-- java type mapping --> <typeAliases> <typeAlias alias="Course" type="com.mybatis.in.Course"/> <typeAlias alias="ClassRoom" type="com.mybatis.in.ClassRoom"/> </typeAliases>
最后创建测试代码
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml")); SqlSession session = sqlSessionFactory.openSession(); CourseMapper courseMapper =session.getMapper(CourseMapper.class); List<Course> courses = courseMapper.getCoursesClassRoom(); //List<Course> courses = courseMapper.getCourses(); System.out.println(courses.size()); if(courses.size() > 0){ System.out.println(courses.get(0).getClassRoom().getRoomName()); } session.close();
在下一篇中讲解一对多关系,和深度查询。
相关推荐
2. **Mapper接口和XML映射文件**:Mapper接口定义了数据库操作的方法,而对应的XML映射文件则包含了具体的SQL语句。通过动态代理,MyBatis能够将接口方法调用转换为SQL执行。 3. **实体类**:这些类代表了数据库中...
mybatis联系项目2mybatis联系项目2mybatis联系项目2mybatis联系项目2mybatis联系项目2mybatis联系项目2mybatis联系项目2mybatis联系项目2mybatis联系项目2mybatis联系项目2mybatis联系项目2mybatis联系项目2mybatis...
struts2和mybatis的struts2和mybatis的struts2和mybatis的struts2和mybatis的struts2和mybatis的struts2和mybatis的struts2和mybatis的struts2和mybatis的struts2和mybatis的struts2和mybatis的struts2和mybatis的
E:\mybatis-generator-core-1.3.2\mybatis-generator-core-1.3.2\lib>java -jar mybat is-generator-core-1.3.2.jar -configfile generatorConfig.xml -overwrite MyBatis Generator finished successfully.
MyBatis排序时使用order by 动态参数时需要注意,用$而不是# 字符串替换 默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,...
2. 映射器:MyBatis的Mapper接口允许开发者将SQL操作与Java方法直接绑定,这样在执行SQL时只需要调用相应的Java方法即可。Mapper接口的XML映射文件定义了SQL语句及其参数和返回值的映射。 3. 自动类型映射:MyBatis...
2. **选择模板**:MybatisGenerate通常提供多种模板供用户选择,不同模板会生成不同风格的代码。例如,你可以选择生成tk.mybatis风格的Mapper接口和XML文件,或者选择生成标准Mybatis风格的代码。 3. **运行生成**...
这篇博客"Study:SpringMVC整合Mybatis的完整例子"提供了关于如何将这两个框架集成到同一个项目中的详细教程。以下是对这个主题的详细阐述: **SpringMVC框架** SpringMVC是Spring框架的一个模块,专门用于构建Web...
mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例...
在这个名为"mybatis-study.rar"的压缩包中,我们很可能会找到一系列关于MyBatis的学习资料和实践项目,帮助我们深入理解和掌握这个强大的框架。 首先,MyBatis 框架的核心概念包括XML配置文件、Mapper接口和...
2. **SqlSessionFactoryBuilder**:该类用于构建SqlSessionFactory。它接受配置信息(如XML配置文件或Java配置类),然后创建SqlSessionFactory实例。 3. **SqlSessionFactory**:这是MyBatis的核心,用于创建...
2. **动态SQL**:MyBatis 允许在映射文件中编写动态SQL,可以根据条件灵活地构建查询,避免了大量模板代码。 3. **对象关系映射**:MyBatis 自动将数据库结果映射到Java对象,反之亦然,大大减少了手动转换的步骤。...
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 ...
在这个"Mybatis-Study.rar"压缩包中,我们可能找到了一系列关于MyBatis学习的资源,包括但不限于视频教程、代码示例、笔记文档等。这些资料将帮助我们深入理解和掌握MyBatis的核心概念和技术要点。 1. **MyBatis...
MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以对配置和原生Map使用简单的XML或注解,将接口和Java的POJOs...
2. **核心特性** - **动态SQL**:MyBatis允许在映射语句中使用条件表达式,使得SQL语句更加灵活,可以根据业务需求动态生成不同的SQL。 - **结果映射**:MyBatis自动处理结果集,将数据映射到Java对象,无需手动...
这个名为"Mybatis-Study.zip"的压缩包文件包含了关于Mybatis的学习代码和笔记,对于理解并掌握Mybatis的核心概念和用法非常有帮助。让我们深入探讨一下Mybatis的主要知识点。 1. **Mybatis简介** Mybatis是一个轻...
在"Mybatis-study.zip"压缩包中,我们可以找到一系列关于学习 MyBatis 的练习资料。以下是一些关键知识点的详细介绍: 1. **XML 映射文件**:MyBatis 使用 XML 或注解来配置和映射原生信息,将接口和 Java POJOs...
2. 动态SQL:Mybatis允许在SQL映射文件中编写动态SQL,使查询条件的构建变得更加灵活,能够根据不同的业务需求生成不同的SQL语句。 3. 强大的映射机制:Mybatis可以将数据库的结果集映射到Java对象,同时也支持Java...