mybatis多对多关联实战教程(推荐)

所属分类: 软件编程 / java 阅读数: 18
收藏 0 赞 0 分享

MyBatis3.0 添加了association和collection标签专门用于对多个相关实体类数据进行级联查询,但仍不支持多个相关实体类数据的级联保存和级联删除操作

一、创建student、teacher和stu_teach_rel三张张表

DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
 `id` int(11) NOT NULL,
 `name` varchar(255) DEFAULT NULL,
 `age` int(11) DEFAULT NULL,
 `gender` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `student` VALUES ('1', '刘德华', '55', '0');
INSERT INTO `student` VALUES ('2', '张惠妹', '49', '1');
INSERT INTO `student` VALUES ('3', '谢霆锋', '35', '0');
INSERT INTO `student` VALUES ('4', '王菲', '47', '1');
INSERT INTO `student` VALUES ('5', '汪峰', '48', '0');
INSERT INTO `student` VALUES ('6', '章子怡', '36', '1');
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher` (
 `id` int(11) NOT NULL,
 `name` varchar(255) DEFAULT NULL,
 `gender` varchar(255) DEFAULT NULL,
 `subject` varchar(255) DEFAULT NULL,
 `degree` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `teacher` VALUES ('1', '王晶', '0', 'CHINESE', '大专');
INSERT INTO `teacher` VALUES ('2', '冯小刚', '0', 'ENGLISH', '本科');
INSERT INTO `teacher` VALUES ('3', '吴京', '0', 'MATHEMATICS', '大专');
INSERT INTO `teacher` VALUES ('4', '王倦', '1', 'MATHEMATICS', '研究生');
DROP TABLE IF EXISTS `stu_teach_rel`;
CREATE TABLE `stu_teach_rel` (
 `id` int(11) NOT NULL,
 `stu_id` int(11) NOT NULL,
 `teach_id` int(11) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


INSERT INTO `stu_teach_rel` VALUES ('1', '1', '1');
INSERT INTO `stu_teach_rel` VALUES ('2', '2', '1');
INSERT INTO `stu_teach_rel` VALUES ('3', '1', '2');
INSERT INTO `stu_teach_rel` VALUES ('4', '2', '2');
INSERT INTO `stu_teach_rel` VALUES ('5', '2', '3');
INSERT INTO `stu_teach_rel` VALUES ('6', '3', '1');
INSERT INTO `stu_teach_rel` VALUES ('7', '3', '2');
INSERT INTO `stu_teach_rel` VALUES ('8', '1', '3');
INSERT INTO `stu_teach_rel` VALUES ('9', '4', '1');
INSERT INTO `stu_teach_rel` VALUES ('10', '4', '2');
INSERT INTO `stu_teach_rel` VALUES ('11', '5', '3');
INSERT INTO `stu_teach_rel` VALUES ('12', '5', '4');
INSERT INTO `stu_teach_rel` VALUES ('13', '6', '1');
INSERT INTO `stu_teach_rel` VALUES ('14', '6', '3');

二、新建和表相关的实体类

package com.yihaomen.mybatis.model;
import com.yihaomen.mybatis.enums.Gender;
import java.util.List;

public class Student {
 private String id;
 private String name;
 private int age;
 private Gender gender;
 private List<Teacher> teachers;

 setters&getters
 
}
package com.yihaomen.mybatis.model;
import com.yihaomen.mybatis.enums.Gender;
import com.yihaomen.mybatis.enums.Subject;
import java.util.List;

public class Teacher {
 private int id;
 private String name;
 private Gender gender;
 private Subject subject;
 private String degree;
 private List<Student> students;

 setters&getters
}

三、新建映射关系

package com.yihaomen.mybatis.dao;
import com.yihaomen.mybatis.model.Student;
import org.springframework.stereotype.Repository;
import java.util.List;

@Repository
public interface StudentMapper {
 List<Student> selectStudents();
}

student.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yihaomen.mybatis.dao.StudentMapper">
 <resultMap id="studentMap" type="Student">
  <id property="id" column="id" />
  <result property="name" column="name" />
  <result property="age" column="age" />
  <result property="gender" column="gender" typeHandler="org.apache.ibatis.type.EnumOrdinalTypeHandler" />
 </resultMap>
 <resultMap id="collectionMap" type="Student" extends="studentMap">
  <collection property="teachers" ofType="Teacher">
   <id property="id" column="teach_id" />
   <result property="name" column="tname"/>
   <result property="gender" column="tgender" typeHandler="org.apache.ibatis.type.EnumOrdinalTypeHandler"/>
   <result property="subject" column="tsubject" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>
   <result property="degree" column="tdegree" javaType="string" jdbcType="VARCHAR"/>
  </collection>
 </resultMap>
 <select id="selectStudents" resultMap="collectionMap">
  SELECT
   s.id, s.name, s.gender, t.id teach_id, t.name tname, t.gender tgender, t.subject tsubject, t.degree tdegree
  FROM
   student s
  LEFT JOIN
   stu_teach_rel str
  ON
   s.id = str.stu_id
  LEFT JOIN
   teacher t
  ON
   t.id = str.teach_id
 </select>
</mapper>

四、在configuration.xml中配置相关mapper

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
 <properties resource="jdbc.properties"/>
 <typeAliases>
  <typeAlias alias="Student" type="com.yihaomen.mybatis.model.Student" />
  <typeAlias alias="Teacher" type="com.yihaomen.mybatis.model.Teacher" />
 </typeAliases>

 <environments default="development">
  <environment id="development">
   <transactionManager type="JDBC"/>
   <dataSource type="POOLED">
    <property name="driver" value="${jdbc.driver}"/>
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
   </dataSource>
  </environment>
 </environments>

 <mappers>
  <mapper resource="com/yihaomen/mybatis/model/Student.xml"/>
 </mappers>
</configuration>

五、测试

package com.yihaomen.service.student;
import com.yihaomen.mybatis.dao.StudentMapper;
import com.yihaomen.mybatis.model.Student;
import com.yihaomen.mybatis.model.Teacher;
import com.yihaomen.service.BaseTest;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import java.util.List;

public class TestStudent extends BaseTest {
 public static void testStuTeachRela() {
  SqlSessionFactory sqlSessionFactory = getSession();
  SqlSession session = sqlSessionFactory.openSession();
  StudentMapper mapper = session.getMapper(StudentMapper.class);
  List<Student> list = mapper.selectStudents();

  for(Student s : list) {
   System.out.println("------------------");
   System.out.println(s.getName() + "," + s.getAge() + "," + s.getGender());
   for(Teacher t : s.getTeachers()) {
    System.out.println(t.getName() + "," + t.getGender() + "," + t.getSubject());
   }
  }
 }

 public static void main(String[] args) {
  testStuTeachRela();
 }
}

以上这篇mybatis多对多关联实战教程(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

Java基础之反射原理与用法详解

这篇文章主要介绍了Java基础之反射原理与用法,结合实例形式详细分析了java反射的相关概念、原理、使用方法与操作注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

java字符串的截取方法substring()代码解析

这篇文章主要介绍了java字符串的截取方法substring()代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Mybatis一对多关联关系映射实现过程解析

这篇文章主要介绍了Mybatis一对多关联关系映射实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Java整数和字符串相互转化实例详解

这篇文章主要介绍了Java整数和字符串相互转化实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Spring Boot 项目设置网站图标的方法

这篇文章主要介绍了Spring Boot 项目设置网站图标的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

java多态机制原理特点详解

在本篇文章里小编给大家分享的是关于java多态机制原理特点详解,有需要的朋友们可以跟着学习下。
收藏 0 赞 0 分享

Jmeter如何添加循环控制器

这篇文章主要介绍了Jmeter如何添加循环控制器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

java虚拟机创建失败的原因整理

在本篇文章里小编给大家整理了关于创建java虚拟机失败的解决方法和知识点,需要的朋友们可以参考学习下。
收藏 0 赞 0 分享

Java如何把int类型转换成byte

这篇文章主要介绍了Java如何把int类型转换成byte,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

linux中java获取路径的实例代码

在本篇文章里小编给大家整理的是一篇关于linux中java获取路径的实例代码以及相关知识点,有兴趣的朋友们可以学习参考下。
收藏 0 赞 0 分享
查看更多