ibatis学习(3)多对多关系

[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中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值