程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> MyBatis多對多映照初識教程

MyBatis多對多映照初識教程

編輯:關於JAVA

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多對多映照初識教程,願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對網站的支撐!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved