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中
分享到:
相关推荐
在IT领域,特别是Java开发中,iBatis是一个非常受欢迎的持久层框架,它提供了将SQL语句与Java代码分离的能力,使得数据库操作更加灵活...更多关于iBatis的高级用法和最佳实践,可以通过文章链接中的资源进行深入学习。
本文旨在深入解析iBATIS映射文件的基础概念及其重要性,为初学者构建一个清晰的学习路径。 ### iBATIS映射文件:核心中的核心 iBATIS映射文件(Data Map XML File)是iBATIS框架的灵魂所在,它允许开发者明确地...
【ibatis学习总结】 在Java应用中,ORM(对象关系映射)框架是连接数据库与业务逻辑的关键。相比像Hibernate和Apache OJB这样的"一站式"ORM解决方案,iBATIS提供了一种更为灵活的"半自动化"策略。iBATIS允许开发者...
在IT行业中,Ibatis、Oracle...希望这篇总结能为你的学习之路提供有价值的指导,进一步深化你对Ibatis、Oracle和敏捷开发的理解。在IT世界中,持续学习和实践是提升自身能力的关键,祝你在技术探索的道路上越走越远。
这份学习资料旨在为初学者和有经验的开发者提供全面的iBatis学习资源。通过这些资料,你可以了解到如何在项目中有效地利用iBatis进行数据库操作,包括但不限于SQL映射、动态SQL、事务管理以及对象关系映射等关键概念...
- **结果映射**:理解如何将数据库查询结果自动映射到Java对象,包括一对一、一对多、多对多关系的映射。 - **参数映射**:学习如何传递参数到SQL语句中,包括简单的值、复杂对象和集合参数。 - **插件扩展**:了解...
- **一对多关联**:通过配置文件中的`<association>`标签定义一对多的关系映射。 - **一对一关联**:通过配置文件中的`<association>`标签定义一对一的关系映射。 ##### 2. 延迟加载 - 实现懒加载功能,只有当真正...
iBATIS并不像Hibernate那样是完全的对象关系映射(ORM)框架,而是定位为SQL Mapping框架,它的核心功能是将SQL查询与Java对象之间进行映射。 在iBATIS2.0中,SQL查询被封装在XML文件中,这些XML文件被称为SQL Map ...
- **结果映射**:ResultMap用于将查询结果映射到Java对象,可以处理一对一、一对多、多对多等各种复杂的对象关系映射。 - **缓存机制**:Ibatis提供了本地缓存和二级缓存,能够提高数据读取速度,减少数据库压力。 ...
【ibatis学习资料及个人学习笔记】 Ibatis,作为一个轻量级的持久层框架,它在Java开发领域中占有重要地位。本资料包是针对Ibatis的学习资源集合,旨在帮助初学者快速掌握这一强大的数据库操作工具。Ibatis的核心...
标题 "ibatis 的关系映射" 指涉的是在使用 iBatis 框架时,如何处理数据库中的关联关系,包括一对一、一对多和多对多的关系映射。iBatis 是一个轻量级的 Java ORM(对象关系映射)框架,它允许开发者将 SQL 查询直接...
Spring3还提供了对数据库操作的支持,包括JDBC模板和集成ORM(Object-Relational Mapping,对象关系映射)框架,如iBATIS。 iBATIS作为一个轻量级的ORM框架,主要解决了SQL语句与Java代码的分离问题,使得开发者...
Ibatis.net的核心理念是SQL映射,它允许开发者编写原生的SQL查询,而不是依赖于ORM(对象关系映射)的复杂性。通过XML配置文件或者注解,你可以将SQL语句与.NET对象绑定,使得数据库操作更加直观和高效。学习Ibatis...
3. **结果映射**:使用定义结果集映射,可以将数据库查询结果自动转换为.NET对象,支持一对一、一对多、多对多等多种关系的映射。 4. **事务管理**:Ibatis.net提供了事务控制功能,可以在需要时开启或提交事务,...
本文档旨在对iBATIS的学习进行深入的总结,帮助初学者快速上手。 一、iBATIS概述 iBATIS的核心理念是“SQL Map”,它将SQL与Java代码分离,通过XML配置文件或注解来定义SQL语句,实现了数据访问层的灵活定制。这...
5. 强大的功能:了解Ibatis的缓存机制、结果集映射(包括一对一、一对多、多对多)、延迟加载等功能,以及如何进行参数和结果的自定义类型处理器。 6. 集成与配置:学习如何将Ibatis框架集成到Spring等其他框架中,...
《深入理解iBATIS:基于Java的持久层框架》 iBATIS,全称为"Integration Between ADO.NET and SQL Maps",中文译为"SQL地图集成...通过对iBATIS的学习和实践,开发者可以更高效地处理数据库交互,更好地实现业务逻辑。
总的来说,这个压缩包为你提供了一个全面的iBatis学习路径,从基础到进阶,从理论到实践。通过深入阅读PDF文档,动手实践代码示例,你将能够熟练地运用iBatis来处理各种数据库操作,提升你的Java开发技能。记得在...
### iBatis 学习笔记知识点总结 #### 一、iBatis 概念与特点 **1.1 iBatis 定义** - **iBatis** 是一个基于 Java 的开源持久层框架,它专注于 SQL 映射,提供了一种将对象与数据库交互过程中的 SQL 语句进行分离的...