iBATIS的多对多映射配置方法有哪些
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,小编给大家分享一下iBATIS的多对多映射配置方法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!iBATIS的多对多
千家信息网最后更新 2025年02月01日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安全错误
数据库的锁怎样保障安全
石嘴山软件开发定制费用
河北区信息网络技术创造辉煌
新郑软件开发
网络安全请你重视图片
数据库自动排序函数
拼图游戏数据库设计
服务器品牌前十大
本届国家网络安全宣传
软件开发项目需求怎么调研
深圳访客管理软件开发中心
天龙八部荣耀版新手服务器
数据库原理王珊萨师煊
护肤品数据库
县网络安全审计
数据库怎么会锁住
mongo 怎么创建多个数据库
非法网络技术评价
VF可以用来软件开发吗
铜陵网络安全和信息化委员会
数据库如何十六进制加密
捷推软件开发有限公司
轩宇互联网科技
数据库指定服务未安装
微信小程序调用数据库中的数据
web 从数据库查询图片吗
数据库三大范式题目及答案
网络安全法规框架图片
数据库外模式的作用
数据库按日统计优化
万方数据库查找期刊