最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis多對多映射初識教程

 更新時間:2016年08月23日 10:59:52   作者:Java大S  
這篇文章重點給大家介紹mybatis多對多映射,多對多映射的例子也很常見,本文通過代碼實例相結(jié)合的方式給大家介紹mybatis多對多映射,需要的朋友參考下吧

MyBatis是一個支持普通SQL查詢,存儲過程和高級映射的優(yōu)秀持久層框架。MyBatis消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及對結(jié)果集的檢索封裝。MyBatis可以使用簡單的XML或注解用于配置和原始映射,將接口和Java的POJO(Plain Old Java Objects,普通的Java對象)映射成數(shù)據(jù)庫中的記錄。

在上篇文章給大家介紹MyBatis一對一映射初識教程

下面給大家說下mybatis多對多映射知識,具體詳情如下所示:

多對多的例子也不少,比如課程與學生之間的關(guān)系,一個課程可以有多個學生選修,而一個學生也可以選修多門學科。老師與學生之間的關(guān)系,一個老師有多個學生,一個學生有多個老師。
以學生和課程之間的關(guān)系為例。

我們建立數(shù)據(jù)表的時候有兩種方案:

第一種:

在建立student數(shù)據(jù)表的時候,存放一個課程的外鍵字段,

在建立course數(shù)據(jù)表的時候,存放一個學生的外鍵字段。

但是這樣是有很大弊端的,那就是如果我要刪student表,卻有course表的外鍵字段,

同理,我想刪除course表的時候,卻有student表的外鍵字段,哎,不好辦啊。

第二種:

我們建立student和course表,在兩張表中分別存放各自的字段和記錄,

再常見一個student_course表,作為中間表,存放student和course的外鍵。

這樣我們刪除字表的時候很方便哦,所以采用這樣方案。

數(shù)據(jù)庫腳本

-- 多對多映射
-- 刪除數(shù)據(jù)庫
drop database if exists mybatis;
-- 創(chuàng)建數(shù)據(jù)庫
create database if not exists mybatis default character set utf8;
-- 選擇數(shù)據(jù)庫
use mybatis;
-- 刪除數(shù)據(jù)表
drop table if exists student;
drop table if exists course;
drop table if exists student_course;
-- 創(chuàng)建數(shù)據(jù)表
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) 
);
-- 測試數(shù)據(jù)
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多對多映射初識教程,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Spring Security的簡單使用

    Spring Security的簡單使用

    這篇文章主要介紹了Spring Security的簡單使用,幫助大家更好的理解和學習使用SpringBoot,感興趣的朋友可以了解下
    2021-04-04
  • Java面向?qū)ο蠡A(chǔ)知識之委托和lambda

    Java面向?qū)ο蠡A(chǔ)知識之委托和lambda

    這篇文章主要介紹了Java面向?qū)ο蟮闹泻?lambda,文中有非常詳細的代碼示例,對正在學習java基礎(chǔ)的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-11-11
  • springboot如何通過URL方式訪問外部資源

    springboot如何通過URL方式訪問外部資源

    這篇文章主要介紹了springboot如何通過URL方式訪問外部資源,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java實現(xiàn)將Webp轉(zhuǎn)為jpg格式方式

    java實現(xiàn)將Webp轉(zhuǎn)為jpg格式方式

    這篇文章主要介紹了java實現(xiàn)將Webp轉(zhuǎn)為jpg格式方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 解決try-catch捕獲異常信息后Spring事務(wù)失效的問題

    解決try-catch捕獲異常信息后Spring事務(wù)失效的問題

    這篇文章主要介紹了解決try-catch捕獲異常信息后Spring事務(wù)失效的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • springboot清除字符串前后空格與防xss攻擊方法

    springboot清除字符串前后空格與防xss攻擊方法

    這篇文章主要介紹了springboot清除字符串前后空格與防xss攻擊方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • EJB基礎(chǔ)知識(入門必看)

    EJB基礎(chǔ)知識(入門必看)

    下面小編就為大家?guī)硪黄狤JB基礎(chǔ)知識(入門必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • java中用ObjectMapper類實現(xiàn)Json與bean的轉(zhuǎn)換示例

    java中用ObjectMapper類實現(xiàn)Json與bean的轉(zhuǎn)換示例

    這篇文章主要給大家介紹了關(guān)于在java中用ObjectMapper類實現(xiàn)Json與bean轉(zhuǎn)換的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面跟著小編來一起學習學習吧。
    2017-08-08
  • Java 跳出遞歸循環(huán)問題解決辦法

    Java 跳出遞歸循環(huán)問題解決辦法

    這篇文章主要介紹了 Java 跳出遞歸循環(huán)問題解決辦法的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 深入分析RabbitMQ中死信隊列與死信交換機

    深入分析RabbitMQ中死信隊列與死信交換機

    這篇文章主要介紹了RabbitMQ中死信隊列與死信交換機,死信隊列就是一個普通的交換機,有些隊列的消息成為死信后,一般情況下會被RabbitMQ清理,感興趣想要詳細了解可以參考下文
    2023-05-05

最新評論

西峡县| 高尔夫| 德阳市| 湖口县| 中超| 东阿县| 五寨县| 贞丰县| 新平| 建瓯市| 化州市| 昌都县| 新绛县| 铜鼓县| 凤冈县| 安阳市| 仙桃市| 汕头市| 红原县| 定结县| 苍溪县| 绵竹市| 蒙阴县| 太湖县| 文成县| 安庆市| 芜湖县| 新晃| 桃园市| 灵台县| 会泽县| 弥渡县| 广德县| 赤峰市| 麦盖提县| 河津市| 团风县| 抚远县| 宜兰市| 吉林省| 岳池县|