MyBatis多對多映照初識教程。本站提示廣大學習愛好者:(MyBatis多對多映照初識教程)文章只能為提供參考,不一定能成為您想要的結果。以下是MyBatis多對多映照初識教程正文
MyBatis是一個支撐通俗SQL查詢,存儲進程和高等映照的優良耐久層框架。MyBatis清除了簡直一切的JDBC代碼和參數的手工設置和對成果集的檢索封裝。MyBatis可使用簡略的XML或注解用於設置裝備擺設和原始映照,將接口和Java的POJO(Plain Old Java Objects,通俗的Java對象)映照成數據庫中的記載。
在上篇文章給年夜家引見MyBatis一對一映照初識教程。
上面給年夜家說下mybatis多對多映照常識,詳細概況以下所示:
多對多的例子也很多,好比課程與先生之間的關系,一個課程可以有多個先生選修,而一個先生也能夠選修多門學科。先生與先生之間的關系,一個先生有多個先生,一個先生有多個先生。
以先生和課程之間的關系為例。
我們樹立數據表的時刻有兩種計劃:
第一種:
在樹立student數據表的時刻,寄存一個課程的外鍵字段,
在樹立course數據表的時刻,寄存一個先生的外鍵字段。
然則如許是有很年夜弊病的,那就是假如我要刪student表,卻有course表的外鍵字段,
同理,我想刪除course表的時刻,卻有student表的外鍵字段,哎,欠好辦啊。
第二種:
我們樹立student和course表,在兩張表平分別寄存各自的字段和記載,
再罕見一個student_course表,作為中央表,寄存student和course的外鍵。
如許我們刪除字表的時刻很便利哦,所以采取如許計劃。
數據庫劇本
-- 多對多映照 -- 刪除數據庫 drop database if exists mybatis; -- 創立數據庫 create database if not exists mybatis default character set utf8; -- 選擇數據庫 use mybatis; -- 刪除數據表 drop table if exists student; drop table if exists course; drop table if exists student_course; -- 創立數據表 create table student( sid int(255), sname varchar(32), constraint pk_sid primary key (sid) ); create table course( cid int(255), cname varchar(32), constraint pk_cid primary key (cid) ); create table student_course( sid int(255), cid int(255), constraint pk_sid_cid primary key(sid,cid), constraint fk_sid foreign key (sid) references student(sid), constraint fk_cid foreign key (cid) references course(cid) ); -- 測試數據 insert into student (sid,sname) values (1,'哈哈'); insert into student (sid,sname) values (2,'呵呵'); insert into course (cid,cname) values (1,'java'); insert into course (cid,cname) values (2,'.NET'); insert into student_course (sid,cid) values (1,1); insert into student_course (sid,cid) values (1,2); insert into student_course (sid,cid) values (2,1); insert into student_course (sid,cid) values (2,2);
新建many2many.Course.java類
package many2many; import java.io.Serializable; import java.util.ArrayList; import java.util.List; /** * 課程 * @author Administrator * */ @SuppressWarnings("serial") public class Course implements Serializable{ private Integer cid; private String cname; private List<Student> students = new ArrayList<Student>(); public Integer getCid() { return cid; } public void setCid(Integer cid) { this.cid = cid; } public String getCname() { return cname; } public void setCname(String cname) { this.cname = cname; } public List<Student> getStudents() { return students; } public void setStudents(List<Student> students) { this.students = students; } }
新建many2many.Student.java類
package many2many; import java.io.Serializable; import java.util.ArrayList; import java.util.List; /** * 先生類 * @author Administrator * */ @SuppressWarnings("serial") public class Student implements Serializable { private Integer sid; private String sname; private List<Course> courses = new ArrayList<Course>(); public Integer getSid() { return sid; } public void setSid(Integer sid) { this.sid = sid; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } public List<Course> getCourses() { return courses; } public void setCourses(List<Course> courses) { this.courses = courses; } }
新建StudentMapper.xml文件和CourseMapper.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="studentMapper"> <resultMap type="many2many.Student" id="studentMap"> <id property="sid" column="sid"/> <result property="sname" column="sname"/> </resultMap> </mapper> <?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="courseNamespace"> <resultMap type="many2many.Course" id="courseMap"> <id property="cid" column="cid"/> <result property="cname" column="cname"/> </resultMap> <!-- 查詢“哈哈”選修了那幾門課程 --> <select id="findAllByName" parameterType="string" resultMap="courseMap"> select c.cname,c.cid from student s,course c,student_course sc where s.sid = sc.sid and c.cid = sc.cid and s.sname = #{sname}; </select> </mapper>
新建耐久層類StudentCourseDAO.java類
package many2many; import java.util.Iterator; import java.util.List; import one2many.Student; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import util.MyBatisUtil; public class StudentCourseDAO { /** * 查詢“哈哈”選修了那幾門課程 * @param name 先生的姓名 * @return * @throws Exception */ public List<Course> findAllByName(String name) throws Exception{ SqlSession sqlSession = null; try { sqlSession = MyBatisUtil.getSqlSession(); return sqlSession.selectList("courseNamespace.findAllByName", name); } catch (Exception e) { e.printStackTrace(); throw e; }finally{ MyBatisUtil.closeSqlSession(); } } @Test public void testFindAllByName() throws Exception{ StudentCourseDAO dao = new StudentCourseDAO(); List<Course> courses = dao.findAllByName("哈哈"); for (Course course : courses) { System.out.println(course.getCid()+":"+course.getCname()); } } }
在mybatis.cfg.xml文件中加載設置裝備擺設文件
<!-- 加載映照文件 --> <mappers> <mapper resource="one2one/CardMapper.xml"/> <mapper resource="one2one/StudentMapper.xml"/> <mapper resource="one2many/GradeMapper.xml"/> <mapper resource="one2many/StudentMapper.xml"/> <mapper resource="many2many/StudentMapper.xml"/> <mapper resource="many2many/CourseMapper.xml"/> </mappers>
以上所述是小編給年夜家引見的MyBatis多對多映照初識教程,願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對網站的支撐!