mybatis多对多关联实战教程(推荐)
发布时间:2020-05-23 13:44:15 所属栏目:Java 来源:互联网
导读:MyBatis3.0添加了association和collection标签专门用于对多个相关实体类数据进行级联查询,但仍不支持多个相关实体类数据的级联保存和级联删除操作
|
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,`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','冯小刚','ENGLISH','本科');
INSERT INTO `teacher` VALUES ('3','吴京','MATHEMATICS','大专');
INSERT INTO `teacher` VALUES ('4','王倦','1','研究生');
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');
INSERT INTO `stu_teach_rel` VALUES ('2','2','1');
INSERT INTO `stu_teach_rel` VALUES ('3','2');
INSERT INTO `stu_teach_rel` VALUES ('4','2');
INSERT INTO `stu_teach_rel` VALUES ('5','3');
INSERT INTO `stu_teach_rel` VALUES ('6','3','1');
INSERT INTO `stu_teach_rel` VALUES ('7','2');
INSERT INTO `stu_teach_rel` VALUES ('8','3');
INSERT INTO `stu_teach_rel` VALUES ('9','4','1');
INSERT INTO `stu_teach_rel` VALUES ('10','2');
INSERT INTO `stu_teach_rel` VALUES ('11','5','3');
INSERT INTO `stu_teach_rel` VALUES ('12','4');
INSERT INTO `stu_teach_rel` VALUES ('13','6','1');
INSERT INTO `stu_teach_rel` VALUES ('14','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多对多关联实战教程(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程小技巧。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
