mybatis多對多關(guān)聯(lián)實(shí)戰(zhàn)教程(推薦)
MyBatis3.0 添加了association和collection標(biāo)簽專門用于對多個(gè)相關(guān)實(shí)體類數(shù)據(jù)進(jìn)行級聯(lián)查詢,但仍不支持多個(gè)相關(guān)實(shí)體類數(shù)據(jù)的級聯(lián)保存和級聯(lián)刪除操作
一、創(chuàng)建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');
二、新建和表相關(guān)的實(shí)體類
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 }
三、新建映射關(guān)系
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中配置相關(guān)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多對多關(guān)聯(lián)實(shí)戰(zhàn)教程(推薦)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
IDEA下SpringBoot指定環(huán)境、配置文件啟動操作過程
這篇文章主要介紹了IDEA下SpringBoot指定環(huán)境、配置文件啟動過程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08SpringBoot+MyBatis-Plus實(shí)現(xiàn)數(shù)據(jù)庫讀寫分離的代碼示例
在當(dāng)今互聯(lián)網(wǎng)應(yīng)用中,數(shù)據(jù)庫讀寫分離是提高系統(tǒng)性能和穩(wěn)定性的重要手段之一,通過將讀操作和寫操作分別路由到不同的數(shù)據(jù)庫節(jié)點(diǎn),可以有效減輕數(shù)據(jù)庫服務(wù)器的負(fù)擔(dān),本文將介紹如何利用SpringBoot和MyBatis-Plus框架實(shí)現(xiàn)數(shù)據(jù)庫讀寫分離,需要的朋友可以參考下2023-11-11Java 迪杰斯特拉算法實(shí)現(xiàn)查找最短距離的實(shí)現(xiàn)
這篇文章主要介紹了Java 迪杰斯特拉算法實(shí)現(xiàn)查找最短距離的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09SpringBoot中通過8項(xiàng)配置優(yōu)化提升Tomcat性能的配置方法
優(yōu)化Spring Boot,Spring Cloud 應(yīng)用程序中Tomcat的配置有助于提高性能和資源利用率,這篇文章主要介紹了SpringBoot中通過8項(xiàng)配置優(yōu)化提升Tomcat性能的配置方法,需要的朋友可以參考下2024-08-08Spring @Async 的使用與實(shí)現(xiàn)的示例代碼
本篇文章主要介紹了Spring @Async 的使用與實(shí)現(xiàn)的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08Java實(shí)現(xiàn)去掉字符串重復(fù)字母的方法示例
這篇文章主要介紹了Java實(shí)現(xiàn)去掉字符串重復(fù)字母的方法,涉及java針對字符串的遍歷、判斷、運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下2017-12-12深入淺出講解Spring框架中AOP及動態(tài)代理的應(yīng)用
在軟件業(yè),AOP為Aspect?Oriented?Programming的縮寫,意為:面向切面編程,通過預(yù)編譯方式和運(yùn)行期間動態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)2022-03-03