本文共 2669 字,大约阅读时间需要 8 分钟。
好久没写MyBatis了,今天继续。
处理has-one关系需要用到association元素,而处理has many关系则需要用到collection元素。例如本例中,假设一名教师可同时指导多名学生,下面就来介绍如何使用collection元素来实现这种映射,具体的任务是查询出教师及其指导的多个学生的信息(本示例源代码下载页面:)。
一、为Teacher实体增加相关属性
为教师实体增加指导学生集合的属性如下:
private ListsupStudents;//指导学生
并为其增加setter和getter方法,这里略过。
二、TeacherMapper接口
为实现教师实体映射,应先创建映射器接口如下:
package com.abc.mapper;import com.abc.domain.Teacher;public interface TeacherMapper {public Teacher getById(int id);}
三、映射文件
为教师实体创建的映射文件如下:
相应地,学生实体的映射文件如下:
在工程的src\resources目录下新建子目录mappers,用来统一存放映射文件。为了能让MyBatis找到这些映射文件,修改其核心配置文件configuration.xml中的mappers元素如下:
注意:resources目录在工程编译前会被复制到classes目录下(详见工程生成文件build.xml中的copy-resources和compile这两个target),而classes目录会被ant添加到classpath中。
四、执行类
执行类为CollectionDemo,其内容如下:
package com.demo;import org.springframework.context.ApplicationContext;import com.abc.mapper.StudentMapper;import com.abc.mapper.TeacherMapper;import com.abc.domain.Teacher;import com.abc.domain.Student;import org.springframework.context.support.ClassPathXmlApplicationContext;import java.util.List;public class CollectionDemo{private static ApplicationContext ctx;static{//在类路径下寻找resources/beans.xml文件ctx = new ClassPathXmlApplicationContext("resources/beans.xml");}public static void main(String[] args){//从Spring容器中请求映射器TeacherMapper mapper =(TeacherMapper)ctx.getBean("teacherMapper");//查询id为1的教师Teacher teacher = mapper.getById(1);if(teacher == null){System.out.println("未找到相关教师信息。");}else{//教师信息System.out.println("**********************************************");System.out.println("教师姓名:" + " " + teacher.getName());System.out.println("教师职称:" + " " + teacher.getTitle());System.out.println("**********************************************");System.out.println("指导学生信息:");//遍历指导的学生for(Student s : teacher.getSupStudents()){System.out.println("**********************************************");System.out.println( s.getName() + " " + s.getGender() + " " + s.getGrade()+ " " + s.getMajor());//从学生端访问教师System.out.println("指导教师研究方向:" + s.getSupervisor().getResearchArea());}System.out.println("**********************************************");}}}
从中可看出,可以从任意一端访问另一端的对象。
五、修改build.xml
为了能用ant运行此程序,需修改build.xml中的run target,指定类CollectionDemo为执行类。如下:
运行结果如下:
MyBatis技术交流群:188972810,或扫描二维码:
【MyBatis学习笔记】系列之七:MyBatis一对多双向关联
转载地址:http://zfwda.baihongyu.com/