ibatis学习(3)多对多关系

ibatis多对多配置文件写法:

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中

你可能感兴趣的:(sql,xml,ibatis)