在上一个篇文章中只是简单讲了单表查询或者多表查询到一个对象的情况,下面我们着重讲一下在一个对象中包含其他的一个或者多个对象的情况的查询,也就是在查询中我们所说的一对一关系和一对多关系的查询。
首先一对一关系的查询,是在一个对象中定义另外的一个对象,而一对多关系的查询是在一个对象中定义一个集合。
最后我们会讲一下深度查询。
首先在数据库中创建两张表,如下:
下面创建两个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();
在下一篇中讲解一对多关系,和深度查询。
相关推荐
MyBatis in Practice: A Step by Step Approach for Learning MyBatis Framework一书的源代码
study mybatis非常详细的入门资料
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创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,...
【狂神说】mybatis学习总结后源码下载(全) mybatis-study.zip
mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例mybatis入门案例...
生成已tk.mybatis封装的mybatis代码
mybatis deom.mybatis 的简单入门实例。基于maven开发的。
mybatis源码是mybatis-3.2.6的源码,用户使用mybatis时可以进行参考
mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis...
mybatis
mybatis
mybatis、mybatis详细设计、mybatis配置
开发工具 mybatis-3.4.2开发工具 mybatis-3.4.2开发工具 mybatis-3.4.2开发工具 mybatis-3.4.2开发工具 mybatis-3.4.2开发工具 mybatis-3.4.2开发工具 mybatis-3.4.2开发工具 mybatis-3.4.2开发工具 mybatis-3.4.2...
MyBatis增 删 改 查 struts2分页
maven构建项目,简单的struts2、spring、mybatis结构实现,页面展示用的easyui
MyBatis学习代码: mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程mybatis in action之三实现数据的增删改查 mybatis实战教程mybatis in...
MyBatis