`
wyang2008
  • 浏览: 31180 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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中

分享到:
评论

相关推荐

    ibatis实战之一对多关联(源代码)

    在IT领域,特别是Java开发中,iBatis是一个非常受欢迎的持久层框架,它提供了将SQL语句与Java代码分离的能力,使得数据库操作更加灵活...更多关于iBatis的高级用法和最佳实践,可以通过文章链接中的资源进行深入学习。

    ibatis学习文档

    本文旨在深入解析iBATIS映射文件的基础概念及其重要性,为初学者构建一个清晰的学习路径。 ### iBATIS映射文件:核心中的核心 iBATIS映射文件(Data Map XML File)是iBATIS框架的灵魂所在,它允许开发者明确地...

    ibatis学习总结

    【ibatis学习总结】 在Java应用中,ORM(对象关系映射)框架是连接数据库与业务逻辑的关键。相比像Hibernate和Apache OJB这样的"一站式"ORM解决方案,iBATIS提供了一种更为灵活的"半自动化"策略。iBATIS允许开发者...

    ibatis学习总结,oracle , 敏捷开发,

    在IT行业中,Ibatis、Oracle...希望这篇总结能为你的学习之路提供有价值的指导,进一步深化你对Ibatis、Oracle和敏捷开发的理解。在IT世界中,持续学习和实践是提升自身能力的关键,祝你在技术探索的道路上越走越远。

    ibatis 学习资料

    这份学习资料旨在为初学者和有经验的开发者提供全面的iBatis学习资源。通过这些资料,你可以了解到如何在项目中有效地利用iBatis进行数据库操作,包括但不限于SQL映射、动态SQL、事务管理以及对象关系映射等关键概念...

    ibatis学习IBATIS好资料

    - **结果映射**:理解如何将数据库查询结果自动映射到Java对象,包括一对一、一对多、多对多关系的映射。 - **参数映射**:学习如何传递参数到SQL语句中,包括简单的值、复杂对象和集合参数。 - **插件扩展**:了解...

    J2EE学习 Ibatis开发资料共享 Ibatis开发资料 Ibatis学习框架 Ibatis开发概要

    - **一对多关联**:通过配置文件中的`&lt;association&gt;`标签定义一对多的关系映射。 - **一对一关联**:通过配置文件中的`&lt;association&gt;`标签定义一对一的关系映射。 ##### 2. 延迟加载 - 实现懒加载功能,只有当真正...

    iBATIS2.0学习总结

    iBATIS并不像Hibernate那样是完全的对象关系映射(ORM)框架,而是定位为SQL Mapping框架,它的核心功能是将SQL查询与Java对象之间进行映射。 在iBATIS2.0中,SQL查询被封装在XML文件中,这些XML文件被称为SQL Map ...

    ibatis学习资料大全

    - **结果映射**:ResultMap用于将查询结果映射到Java对象,可以处理一对一、一对多、多对多等各种复杂的对象关系映射。 - **缓存机制**:Ibatis提供了本地缓存和二级缓存,能够提高数据读取速度,减少数据库压力。 ...

    ibatis学习资料及个人学习笔记,对初学者很有用

    【ibatis学习资料及个人学习笔记】 Ibatis,作为一个轻量级的持久层框架,它在Java开发领域中占有重要地位。本资料包是针对Ibatis的学习资源集合,旨在帮助初学者快速掌握这一强大的数据库操作工具。Ibatis的核心...

    ibatis 的关系映射

    标题 "ibatis 的关系映射" 指涉的是在使用 iBatis 框架时,如何处理数据库中的关联关系,包括一对一、一对多和多对多的关系映射。iBatis 是一个轻量级的 Java ORM(对象关系映射)框架,它允许开发者将 SQL 查询直接...

    struts2+spring3+ibatis项目整合案例

    Spring3还提供了对数据库操作的支持,包括JDBC模板和集成ORM(Object-Relational Mapping,对象关系映射)框架,如iBATIS。 iBATIS作为一个轻量级的ORM框架,主要解决了SQL语句与Java代码的分离问题,使得开发者...

    Ibatis.net学习和实例~

    Ibatis.net的核心理念是SQL映射,它允许开发者编写原生的SQL查询,而不是依赖于ORM(对象关系映射)的复杂性。通过XML配置文件或者注解,你可以将SQL语句与.NET对象绑定,使得数据库操作更加直观和高效。学习Ibatis...

    Ibatis.net学习例子以及使用教程书

    3. **结果映射**:使用定义结果集映射,可以将数据库查询结果自动转换为.NET对象,支持一对一、一对多、多对多等多种关系的映射。 4. **事务管理**:Ibatis.net提供了事务控制功能,可以在需要时开启或提交事务,...

    ibatis学习总结文档

    本文档旨在对iBATIS的学习进行深入的总结,帮助初学者快速上手。 一、iBATIS概述 iBATIS的核心理念是“SQL Map”,它将SQL与Java代码分离,通过XML配置文件或注解来定义SQL语句,实现了数据访问层的灵活定制。这...

    SQL&Ibatis学习 ppt

    5. 强大的功能:了解Ibatis的缓存机制、结果集映射(包括一对一、一对多、多对多)、延迟加载等功能,以及如何进行参数和结果的自定义类型处理器。 6. 集成与配置:学习如何将Ibatis框架集成到Spring等其他框架中,...

    ibatis学习文档集合

    《深入理解iBATIS:基于Java的持久层框架》 iBATIS,全称为"Integration Between ADO.NET and SQL Maps",中文译为"SQL地图集成...通过对iBATIS的学习和实践,开发者可以更高效地处理数据库交互,更好地实现业务逻辑。

    iBatis开发指南和一个iBatis实例

    总的来说,这个压缩包为你提供了一个全面的iBatis学习路径,从基础到进阶,从理论到实践。通过深入阅读PDF文档,动手实践代码示例,你将能够熟练地运用iBatis来处理各种数据库操作,提升你的Java开发技能。记得在...

    ibatis学习笔记.txt

    ### iBatis 学习笔记知识点总结 #### 一、iBatis 概念与特点 **1.1 iBatis 定义** - **iBatis** 是一个基于 Java 的开源持久层框架,它专注于 SQL 映射,提供了一种将对象与数据库交互过程中的 SQL 语句进行分离的...

Global site tag (gtag.js) - Google Analytics