[size=medium]ibatis多对多配置文件写法:[/size]
1、Teacher.java和Student.java
package ibatis.many.many;import java.util.List;public class Student { private int id; private String name; private String birthday; private List teachers; // 这里有一个list类型的teachers,表示一个学生有多个老师 public List getTeachers() { return teachers; } public void setTeachers(List teachers) { this.teachers = teachers; } // 省略掉其他的getter and setter public String getBirthday() { return birthday; } public void setBirthday(String birthday) { this.birthday = birthday; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
package ibatis.many.many;import java.util.List;public class Teacher { private int id; private String name; private String subject; private List students; // 注意这里有个List类型的students,表示一个老师对应多个学生 public List getStudents() { return students; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public void setStudents(List students) { this.students = students; } // 省略掉其他的getter and setter}
2、teacher.xml和student.xml
student.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd"><sqlMap namespace="student"> <typeAlias alias="Student" type="ibatis.many.many.Student" /> <typeAlias alias="Teacher" type="ibatis.many.many.Teacher" /> <resultMap class="Student" id="studentBasicResultMap"> <result property="id" column="id" /> <result property="name" column="name" /> <result property="birthday" column="birthday" /> </resultMap> <resultMap class="Student" id="studentWithTeacherResultMap" extends="studentBasicResultMap"> <result property="teachers" column="id" select="getTeachersByStudentId" /> </resultMap> <select id="getStudents" resultMap="studentWithTeacherResultMap"> <![CDATA[ select * from student ]]> </select> <select id="getTeachersByStudentId" resultClass="Teacher"> <![CDATA[ select t.* from teacher t,student_teacher st where t.id=st.teacherid and st.studentid=#value# ]]> </select></sqlMap>
teacher.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd"><sqlMap namespace="teacher"> <typeAlias alias="Teacher" type="ibatis.many.many.Teacher" /> <typeAlias alias="Student" type="ibatis.many.many.Student" /> <resultMap class="Teacher" id="teacherBasicResultMap"> <result property="id" column="id" /> <result property="name" column="name" /> <result property="subject" column="subject" /> </resultMap> <!-- 下面这个resultMap中有个students属性,这个结果映射继承自上面的结果映射 由于有了继承,结果映射可以任意扩展--> <resultMap class="Teacher" id="teacherWithTeacherResultMap" extends="teacherBasicResultMap"> <result property="students" column="id" select="getStudentsByTeacherId" /> </resultMap> <!-- 这个查询中使用到了上面定义的结果映射,从而决定了查询出来的Teacher中关联出相关的students,在student.xml中配置相似,不再注释。--> <select id="getTeachers" resultMap="teacherWithTeacherResultMap"> <![CDATA[select * from teacher]]> </select> <select id="getStudentsByTeacherId" resultClass="Student"> <![CDATA[ select s.* from student s,student_teacher st where s.id=st.studentid and st.teacherid=#value# ]]> </select></sqlMap>
3、测试类:
package ibatis.many.many;import java.io.Reader;import java.sql.SQLException;import java.util.List;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.ibatis.common.resources.Resources;import com.ibatis.sqlmap.client.SqlMapClient;import com.ibatis.sqlmap.client.SqlMapClientBuilder;public class Many2Many { private static SqlMapClient sqlMapClient = null; static { try { ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); sqlMapClient=(SqlMapClient) ctx.getBean("sqlMapClient"); System.out.println("sqlMapClient=="+sqlMapClient); } catch (Exception e) { e.printStackTrace(); } } /** * @param args */ public static void main(String[] args) { Many2Many m2m = new Many2Many(); List studentlist = null; studentlist = m2m.getStudentInfo(); for (int i = 0; i < studentlist.size(); i++) { Student s = new Student(); s = (Student) studentlist.get(i); System.out.println("name:" + s.getName() + "\t" + "birthday:" + s.getBirthday()); List tlist = s.getTeachers(); if (tlist != null) { System.out.println("his teachers as follows:"); { for (int ti = 0; ti < tlist.size(); ti++) { Teacher t = new Teacher(); t = (Teacher) tlist.get(ti); System.out.println("teacher name:" + t.getName()); } } } } List teacherlist = null; teacherlist = m2m.getTeacherInfo(); for (int i = 0; i < teacherlist.size(); i++) { Teacher t = new Teacher(); t = (Teacher) teacherlist.get(i); System.out.println("name:" + t.getName() + "\t" + "subject:" + t.getSubject()); List slist = t.getStudents(); if (slist != null) { System.out.println("his students as follows:"); for (int si = 0; si < slist.size(); si++) { Student s = new Student(); s = (Student) slist.get(si); System.out.println("student name:" + s.getName()); } } } } // 获取学生信息 public List getStudentInfo() { List studentList = null; try { System.out.println("学生信息如下:"); studentList = sqlMapClient.queryForList("getStudents"); } catch (SQLException e) { e.printStackTrace(); } return studentList; } // 获取老师信息 // 获取学生信息 public List getTeacherInfo() { List studentList = null; try { System.out.println("老师信息如下:"); studentList = sqlMapClient.queryForList("getTeachers"); } catch (SQLException e) { e.printStackTrace(); } return studentList; }}
别忘了吧teacher.xml和student.xml加到sql-map-config.xml中