iBATIS的多对多映射配置方法有哪些
发表于:2025-11-18 作者:千家信息网编辑
千家信息网最后更新 2025年11月18日,小编给大家分享一下iBATIS的多对多映射配置方法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!iBATIS的多对多
千家信息网最后更新 2025年11月18日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安全错误
数据库的锁怎样保障安全
端游绝地求生显示服务器繁忙
永定网络安全管理
专科工业软件开发就业方向
哪个数据库查重最接近知网
北京常用的外贸软件开发
市政府网络安全保密局
宁德网络安全教育
中小学生网络安全与道德
网络安全主要风险点
陕西惠普服务器维修维保哪家便宜
苏州安卓软件开发哪家实惠
如何查看数据库锁定的表
苹果连接服务器出现问题
网络安全和群众合法权益
dell r210服务器
天刀端游服务器人数排名
北京小型软件开发公司现状
服务器放在北极行吗
hp服务器管理口登录
电商网络安全是真的吗
拉萨互动安全文化展厅软件开发
四川代理服务器云空间
数据库外键匹配错误
苏州安卓软件开发哪家实惠
戴尔服务器管理面板
网络安全黑板报字体软件
河北小型软件开发优选企业
深圳python软件开发定制
服务器 交换机连接
松江区银联网络技术推荐咨询