千家信息网

iBATIS的多对多映射配置方法有哪些

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,小编给大家分享一下iBATIS的多对多映射配置方法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!iBATIS的多对多
千家信息网最后更新 2026年11月04日iBATIS的多对多映射配置方法有哪些

小编给大家分享一下iBATIS的多对多映射配置方法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

iBATIS的多对多映射配置1,建表。数据库中三个表,分别为:

 CREATE TABLE [student] (   [id] [int] IDENTITY (1, 1) NOT NULL ,   [name] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,   [birthday] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,   CONSTRAINT [PK_student] PRIMARY KEY  CLUSTERED    (    [id]   )  ON [PRIMARY]   ) ON [PRIMARY]  GO  --------------------------------------------------  CREATE TABLE [teacher] (   [id] [int] IDENTITY (1, 1) NOT NULL ,   [name] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,   [subject] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,   CONSTRAINT [PK_teacher] PRIMARY KEY  CLUSTERED    (    [id]   )  ON [PRIMARY]   ) ON [PRIMARY]  GO  ---------------------------------------------------  CREATE TABLE [student_teacher] (   [studentid] [int] NOT NULL ,   [teacherid] [int] NOT NULL ,   CONSTRAINT [PK_student_teacher] PRIMARY KEY  CLUSTERED    (    [studentid],    [teacherid]   )  ON [PRIMARY]   ) ON [PRIMARY]  GO

iBATIS的多对多映射配置2,准备数据

insert into student(name,birthday) values('张三','1982-01-01')  insert into student(name,birthday) values('李四','1983-02-02')  insert into student(name,birthday) values('王五','1984-03-03')   insert into student(name,birthday) values('赵六','1985-04-04')  insert into teacher(name,subject) values('Jerry','语文')  insert into teacher(name,subject) values('Tom','数学')   insert into teacher(name,subject) values('Steven','英语')  insert into student_teacher(studentid,teacherid) values(1,1)  insert into student_teacher(studentid,teacherid) values(1,2)  insert into student_teacher(studentid,teacherid) values(2,1)  insert into student_teacher(studentid,teacherid) values(3,2)

iBATIS的多对多映射配置3,properties文件内容如下:

driver=com.microsoft.jdbc.sqlserver.SQLServerDriver   url=jdbc:microsoft:sqlserver://localhost:1433;SelectMethod=cursor;DatabaseName=ibatistest   username=sa   password=000

iBATIS的多对多映射配置4,总配置文件SqlMapConfig.xml内容如下:

﹤?xml version="1.0" encoding="UTF-8" ?﹥  ﹤!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"      "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"﹥   ﹤sqlMapConfig﹥    ﹤properties resource="com/lsm/cfg/jdbc.properties" /﹥   ﹤transactionManager type="JDBC"﹥    ﹤dataSource type="SIMPLE"﹥     ﹤property value="${driver}" name="JDBC.Driver" /﹥     ﹤property value="${url}" name="JDBC.ConnectionURL" /﹥     ﹤property value="${username}" name="JDBC.Username" /﹥     ﹤property value="${password}" name="JDBC.Password" /﹥    ﹤/dataSource﹥   ﹤/transactionManager﹥   ﹤sqlMap resource="com/lsm/domain/Student.xml" /﹥   ﹤sqlMap resource="com/lsm/domain/Teacher.xml" /﹥   ﹤/sqlMapConfig﹥

iBATIS的多对多映射配置5,domain对象两个,Student 和 Teacher,如下:

Teacher.java

package com.lsm.domain;  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 void setStudents(List students)   {    this.students = students;   }   //省略掉其他的getter and setter  }   //Student.java  package com.lsm.domain;   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  }

iBATIS的多对多映射配置6,sqlmap配置文件

Teacher.xml

﹤?xml version="1.0" encoding="UTF-8" ?﹥  !DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"        "http://ibatis.apache.org/dtd/sql-map-2.dtd"﹥          ﹤sqlMap namespace="teacher"﹥         ﹤typeAlias alias="Teacher" type="com.lsm.domain.Teacher" /﹥   ﹤typeAlias alias="Student" type="com.lsm.domain.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﹥   tudent.xml   ﹤?xml version="1.0" encoding="UTF-8" ?﹥  !DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"        "http://ibatis.apache.org/dtd/sql-map-2.dtd"﹥          ﹤sqlMap namespace="student"﹥         ﹤typeAlias alias="Student" type="com.lsm.domain.Student" /﹥   ﹤typeAlias alias="Teacher" type="com.lsm.domain.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﹥

iBATIS的多对多映射配置7,测试

 package com.lsm.test;   import java.io.Reader;  import java.sql.SQLException;  import java.util.List;  import com.ibatis.common.resources.Resources;  import com.ibatis.sqlmap.client.SqlMapClient;  import com.ibatis.sqlmap.client.SqlMapClientBuilder;  import com.lsm.domain.Student;  import com.lsm.domain.Teacher;   public class Many2Many  {    private static SqlMapClient sqlMapClient = null;   static  {    try   {     Reader reader = Resources.getResourceAsReader("com/lsm/cfg/SqlMapConfig.xml");     sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);    }    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;   }   }

8,输出

学生信息如下:  name:张三 birthday:1982-01-01  his teachers as follows:  teacher name:Jerry  teacher name:Tom  name:李四 birthday:1983-02-02  his teachers as follows:  teacher name:Jerry  name:王五 birthday:1984-03-03  his teachers as follows:  teacher name:Tom  name:赵六 birthday:1985-04-04  his teachers as follows:  老师信息如下:  name:Jerry subject:语文  his students as follows:  student name:张三  student name:李四  name:Tom subject:数学  his students as follows:  student name:张三  student name:王五  name:Steven subject:英语  his students as follows:

查询学生时带出老师信息,查询老师时带出学生信息,说明多对多映射成功。

以上是"iBATIS的多对多映射配置方法有哪些"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

配置 信息 学生 老师 内容 结果 张三 查询 文件 篇文章 李四 王五 UTF-8 方法 多个 数学 数据 类型 语文 英语 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳市人人互联网科技有限公司 互联网为科技 华宇互联网科技 喔噻互联网科技 互联网科技英文 云电互联网科技 创业天下互联网科技有限公司 宁夏科技产业互联网案例 厦门比较好的科技互联网公司 佛山市翊博互联网络科技有限公司 特约风豹互联网科技为什么扣费 恒生互联网科技业指数调整周期 上海钢联属于互联网科技股吗 张召忠谈中国互联网科技 2021世界互联网领先科技成果发布 九思连强互联网电子科技有限公司 广州梦谷互联网科技有限公司领导 福州德业互联网科技 华人运通互联网科技公司 青岛互联网科技园 极限挑战互联网科技 云电互联网科技 无锡溥仪互联网科技有限公司 恒生科技互联网指数分析 华脉科技工业互联网产品 团飞科技与伯堂互联网服务平台 互联网科技革命什么开始 科技互联网经济论坛 互联网科技博主张洲 陕西彩京云互联网科技有限公司
0