ibatis多对多实例

create table student
(
  stu_id int auto_increment not null,
  stu_name varchar(50) not null,
  stu_age int not null,
  primary key (stu_id)
);

create table teacher
(
  ter_id int auto_increment not null,
  ter_name varchar(50) not null,
  ter_subject varchar(50) not null,
  primary key (ter_id)
);

create table student_teacher_relation
(
  stu_id int not null,
  ter_id int not null
  primary key(stu_id,ter_id)
);

insert into student values (null,‘张三‘,20);
insert into student values (null,‘李四‘,21);
insert into student values (null,‘王五‘,22);
insert into student values (null,‘赵六‘,23);

insert into teacher values(null,‘mike‘,‘数学‘);
insert into teacher values(null,‘mary‘,‘语文‘);
insert into teacher values(null,‘bob‘,‘外语‘);
insert into teacher values(null,‘jack‘,‘物理‘);

insert into student_teacher(1,1);
insert into student_teacher(1,2);
insert into student_teacher(1,3);

insert into student_teacher(2,1);
insert into student_teacher(2,2);
insert into student_teacher(2,3);

insert into student_teacher(3,1);
insert into student_teacher(3,2);
insert into student_teacher(3,3);

  

<sqlMapConfig>
<!--     <settings cacheModelsEnabled="false" enhancementEnabled="true"
    lazyLoadingEnabled="false" errorTracingEnabled="true" maxRequests="200"
    maxSessions="60" maxTransactions="20" useStatementNamespaces="true"
    defaultStatementTimeout="2" /> -->
    <transactionManager type="JDBC">
        <dataSource type="SIMPLE">
            <property value="com.mysql.jdbc.Driver" name="JDBC.Driver" />
            <property value="jdbc:mysql://127.0.0.1:3306/myblogdb" name="JDBC.ConnectionURL" />
            <property value="root" name="JDBC.Username" />
            <property value="root" name="JDBC.Password" />
        </dataSource>
    </transactionManager>
    <sqlMap resource="sqlmapmysql/Student.xml" />
    <sqlMap resource="sqlmapmysql/Teacher.xml" />
</sqlMapConfig>
public class Student {
      private int stuId;
      private String stuName;
      private String stuBirthday;
      private List teachers;

     生成get set方法。
}
public class Teacher {
      private int terId;
      private String  terName;
      private String  terBirthday;
      private List students;

     生成get set方法。
}
<?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.zcl.blog.domain.po.Student"/>
    <typeAlias alias="Teacher" type="com.zcl.blog.domain.po.Teacher"/>

    <resultMap class="Student" id="studentBasicResultMap">
        <result property="stuId" column="stu_id"/>
        <result property="stuName" column="stu_name"/>
        <result property="stuBirthday" column="stu_birthday"/>
    </resultMap>

    <resultMap class="Student" id="studentWithTeacherResultMap" extends="studentBasicResultMap">
        <result property="teachers" column="stu_id" select="getTeachersByStudentId"/>
    </resultMap>

    <select id="getStudents" resultMap="studentWithTeacherResultMap">
        <![CDATA[select * from student]]>
    </select>

    <select id="getTeachersByStudentId" resultClass="Teacher">
        <![CDATA[select t.ter_id,t.ter_name terName,ter_subject terSubject from teacher t,student_teacher st where t.ter_id = st.ter_id and st.stu_id = #stuId#]]>
    </select>
</sqlMap>
<?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.zcl.blog.domain.po.Teacher"/>
    <typeAlias alias="Student" type="com.zcl.blog.domain.po.Student"/>

    <resultMap class="Teacher" id="terBasicResultMap">
        <result property="terId" column="ter_id"/>
        <result property="terName" column="ter_name"/>
        <result property="terSubject" column="ter_subject"/>
    </resultMap>

    <resultMap class="Teacher" id="teacherWithStuResultMap" extends="teacherBasicResultMap">
        <result property="students" column="ter_id" select="getStusByTeacherId"/>
    </resultMap>

    <select id="getTeachers" resultMap="teacherWithStuResultMap">
        <![CDATA[select * from teacher]]>
    </select>

    <select id="getStusByTeacherId" resultClass="Stu">
        <![CDATA[select s.stu_id,s.stu_name stuName,s.stu_birthday stuBirthday from student s,student_teacher st where s.stu_id = st.stu_id and st.ter_id = #terId#]]>
    </select>
</sqlMap>
public class ManyToMany {

    private static SqlMapClient sqlMapClient = null;

    static {
        try {
            Reader reader = Resources.getResourceAsReader("sqlmap-config.xml");
            sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        ManyToMany mtm = new ManyToMany();
        for (int i = 0; i < stuList.size(); i++) {
            Student stu = new Student();
            stu = (Student)stuList.get(i);
            //System.out.println(stu.getName());
            List tlist = stu.getTeachers();
            if (tlist != null) {
                for (int j = 0; j < tlist.size(); j++) {
                    Teacher teacher = new Teacher();
                    teacher = (Teacher)tlist.get(j);
                    System.out.println(teacher.getTeacherName());
                }
            }
        }

    }

    public List getStudentInfo() {
        List stuList = null;
        try {
            stuList = sqlMapClient.queryForList("getStudents");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return stuList;
    }

    public List getTagInfo() {
        List tagList = null;
        try {
            tagList = sqlMapClient.queryForList("getAllTag");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return tagList;
    }
}
时间: 2025-01-06 02:29:35

ibatis多对多实例的相关文章

Spring2.5整合Ibatis入门级开发实例

分类: SPRING IBATIS2010-11-22 20:19 1170人阅读 评论(0) 收藏 举报 ibatisspringstringpropertiesclassuser 最近一直在看spring和ibatis的东西,由于目前SSH的流行,大多讲Spring和Hibernate的整合开发,作者一直对Hibernate不是很感冒,也许是因为日常开发程序对性能要求比较高,和Hibernate比较起来Ibatis更合适.虽然网络上有很多讲Spring和Ibatis整合的文章,但查看了许多,

Spring+Ibatis集成开发实例

首先简历数据库demo(本文选mysql) 数据库脚本: CREATE TABLE `ibatis` (  `id` varchar(20) NOT NULL,  `name` varchar(20) default NULL,  PRIMARY KEY  (`id`)) ENGINE=InnoDB DEFAULT CHARSET=gb2312;insert into ibatis values("1","1");insert into ibatis values(

MyBatis的深入原理分析之1-架构设计以及实例分析

MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单.优雅.本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查询实例,深入代码,来探究MyBatis的实现. 一.MyBatis的框架设计        注:上图很大程度上参考了iteye 上的chenjc_it所写的博文原理分析之二:框架整体设计 中的MyBatis架构体图,chenjc_it总结的非常好,赞一个! 1.接口层---和数据库交互的方式 MyBatis

《深入理解mybatis原理》 MyBatis的架构设计以及实例分析

MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单.优雅.本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查询实例,深入代码,来探究MyBatis的实现. 一.MyBatis的框架设计        注:上图很大程度上参考了iteye 上的chenjc_it所写的博文原理分析之二:框架整体设计 中的MyBatis架构体图,chenjc_it总结的非常好,赞一个! 1.接口层---和数据库交互的方式 MyBatis

《深入理解mybatis原理1》 MyBatis的架构设计以及实例分析

<深入理解mybatis原理> MyBatis的架构设计以及实例分析 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单.优雅.本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查询实例,深入代码,来探究MyBatis的实现. 一.MyBatis的框架设计   注:上图很大程度上参考了iteye 上的chenjc_it   所写的博文原理分析之二:框架整体设计 中的MyBatis架构体图,chenjc_it总结的

SQLAlchemy_定义(一对一/一对多/多对多)关系

目录 Basic Relationship Patterns One To Many One To One Many To Many Basic Relationship Patterns 基本关系模式 The imports used for each of the following sections is as follows: 下列的 import 语句,应用到接下来所有的代章节中: from sqlalchemy import Table, Column, Integer, Forei

基于 Spring 和 iBATIS 的动态可更新多数据源持久层

前言 我们时常会遇到一些 web 项目,需要从不同的数据源中抓取数据来进行分析,而这些数据源是有可能变化的,需要用户来进行动态的维护和添加.可是,大多数的 web 程序使用了应用服务器或者容器中间件来管理数据源的生命周期,因此数据源的变化自然不能够独立于程序,而需要由专业人士去进行维护,必要时还需要重新发布程序来适应数据源的变化,而且数据源的个数.数据库的类型也都会有所限制. 那么怎样才可以突破以上这些局限,彻底实现由用户远程对数据源进行维护和管理的需求呢?本文提出了一个有效的解决方案,该方案的

hibernate 的 关联关系之多对多 和 延迟加载

关联关系 多对多 栗子:一个员工可以有写多个项目,一个项目也是由多个程序员来完成,这就是一个典型的多对多实例 下面给根据实例提取出两个实体类 Employee (员工实体), Project (项目实体). 一.单向的多对多:(提添加一个项目,并给这个项目添加两个员工.) 在员工表中植入Project属性 配置Employee.hbm.xml文件: 开始单侧: @Test //双向多对多关联关系 2.添加多个员工到一个部门下 public void manytomanyt1(){ Session

Spring4 MVC+Hibernate4 Many-to-many连接表+MySQL+Maven实例

这篇文章显示 Hibernate 的多对多实例,在 Spring MVC CRUD Web应用程序中连接表.我们将同时讨论管理多对多关系在视图和后端. 我们将使用应用程序的Web界面创建,更新,删除和查询. 本教程是利用 Spring 的 org.springframework.core.convert.converter.Converter 接口,它帮助我们在项目的数据库中实现实体的映射标识. 完整的示例的说明介绍如下. 使用以下技术: Spring 4.1.7.RELEASE Hiberna