1)如图

2)创建students.sql和courses.sql和middles.sql

  1. drop table middles;
  2. drop table students;
  3. drop table courses;
  4. create table students(
  5. sid int(5) primary key,
  6. sname varchar(10)
  7. );
  8. create table courses(
  9. cid int(5) primary key,
  10. cname varchar(10)
  11. );
  12. create table middles(
  13. sid int(5),
  14. cid int(5),
  15. primary key(sid,cid)
  16. );
  17. insert into students(sid,sname) values(1,'哈哈');
  18. insert into students(sid,sname) values(2,'呵呵');
  19. insert into courses(cid,cname) values(1,'java');
  20. insert into courses(cid,cname) values(2,'net');
  21. insert into middles(sid,cid) values(1,1);
  22. insert into middles(sid,cid) values(1,2);
  23. insert into middles(sid,cid) values(2,1);
  24. insert into middles(sid,cid) values(2,2);
  25. select * from students;
  26. select * from courses;
  27. select * from middles;

3)创建Student.java和Course.java

  1. /**
  2. * 学生(多方)*/
  3. public class Student {
  4. private Integer id;
  5. private String name;
  6. private List<Course> courseList = new ArrayList<Course>();
  7. public Student(){}
  8. public Integer getId() {
  9. return id;
  10. }
  11. public void setId(Integer id) {
  12. this.id = id;
  13. }
  14. public String getName() {
  15. return name;
  16. }
  17. public void setName(String name) {
  18. this.name = name;
  19. }
  20. public List<Course> getCourseList() {
  21. return courseList;
  22. }
  23. public void setCourseList(List<Course> courseList) {
  24. this.courseList = courseList;
  25. }
  26. }
  27. /**
  28. * 课程(多方)
  29. */
  30. public class Course {
  31. private Integer id;
  32. private String name;
  33. private List<Student> studentList = new ArrayList<Student>();
  34. public Course(){}
  35. public Integer getId() {
  36. return id;
  37. }
  38. public void setId(Integer id) {
  39. this.id = id;
  40. }
  41. public String getName() {
  42. return name;
  43. }
  44. public void setName(String name) {
  45. this.name = name;
  46. }
  47. public List<Student> getStudentList() {
  48. return studentList;
  49. }
  50. public void setStudentList(List<Student> studentList) {
  51. this.studentList = studentList;
  52. }
  53. }

4)创建StudentMapper.xml和CourseMapper.xml

StudentMapper.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <mapper namespace="studentNamespace">
  5. <resultMap type="loaderman.many2many.Student" id="studentMap">
  6. <id property="id" column="sid" />
  7. <result property="name" column="sname"/>
  8. </resultMap>
  9. <select id="findStudentByName" parameterType="string" resultMap="studentMap">
  10. select s.sid,s.sname
  11. from students s,middles m,courses c
  12. where s.sid = m.sid
  13. and m.cid = c.cid
  14. and c.cname = #{name}
  15. </select>
  16. </mapper>

CourseMapper.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <mapper namespace="courseNamespace">
  5. <resultMap type="loaderman.many2many.Course" id="courseMap">
  6. <id property="id" column="cid" />
  7. <result property="name" column="cname"/>
  8. </resultMap>
  9. <select id="findCourseByName" parameterType="string" resultMap="courseMap">
  10. select c.cid,c.cname
  11. from students s,middles m,courses c
  12. where s.sid = m.sid
  13. and m.cid = c.cid
  14. and s.sname = #{name}
  15. </select>
  16. </mapper>

5)创建students.dao

  1. public class StudentDao {
  2. /**
  3. * 查询哈哈选学的【课程】
  4. */
  5. public List<Course> findCourseByName(String name) throws Exception{
  6. SqlSession sqlSession = null;
  7. try{
  8. sqlSession = MybatisUtil.getSqlSession();
  9. return sqlSession.selectList("courseNamespace.findCourseByName",name);
  10. }catch(Exception e){
  11. e.printStackTrace();
  12. throw e;
  13. }finally{
  14. MybatisUtil.closeSqlSession();
  15. }
  16. }
  17. /**
  18. * 查询java课程有哪些【学生】
  19. */
  20. public List<Student> findStudentByName(String name) throws Exception{
  21. SqlSession sqlSession = null;
  22. try{
  23. sqlSession = MybatisUtil.getSqlSession();
  24. return sqlSession.selectList("studentNamespace.findStudentByName",name);
  25. }catch(Exception e){
  26. e.printStackTrace();
  27. throw e;
  28. }finally{
  29. MybatisUtil.closeSqlSession();
  30. }
  31. }
  32. public static void main(String[] args) throws Exception{
  33. StudentCourseDao dao = new StudentCourseDao();
  34. //List<Course> courseList = dao.findCourseByName("哈哈");
  35. //for(Course c : courseList){
  36. // System.out.println(c.getId()+":"+c.getName());
  37. //}
  38. List<Student> studentList = dao.findStudentByName("java");
  39. for(Student s : studentList){
  40. System.out.println(s.getId()+":"+s.getName());
  41. }
  42. }
  43. }

mybatis多对多映射【学生与课程】的更多相关文章

  1. mybatis多对多映射

    数据库里面有角色实体类app_cms_role

  2. 04—mybatis的关联映射

    mybatis的关联映射一对一一对多多对多 一.一对一(一个人只能有一个身份证号) 1.创建表创建表tb_card CREATE TABLE `tb_card` ( `id` int(11) NOT ...

  3. java web(六):mybatis之一对一、一对多、多对多映射

    前言: 百度百科: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可 ...

  4. Mybatis的多对多映射

    一.Mybatis的多对多映射 本例讲述使用mybatis开发过程中常见的多对多映射查询案例.只抽取关键代码和mapper文件中的关键sql和配置,详细的工程搭建和Mybatis详细的流程代码可参见& ...

  5. Mybatis(四) 高级映射,一对一,一对多,多对多映射

    天气甚好,怎能不学习? 一.单向和双向 包括一对一,一对多,多对多这三种情况,但是每一种又分为单向和双向,在hibernate中我们就详细解析过这单向和双向是啥意思,在这里,在重复一遍,就拿一对多这种 ...

  6. Mybatis学习(四)————— 高级映射,一对一,一对多,多对多映射

    一.单向和双向 包括一对一,一对多,多对多这三种情况,但是每一种又分为单向和双向,在hibernate中我们就详细解析过这单向和双向是啥意思,在这里,在重复一遍,就拿一对多这种关系来讲,比如有员工和部 ...

  7. 【Mybatis高级映射】一对一映射、一对多映射、多对多映射

    前言 当我们学习heribnate的时候,也就是SSH框架的网上商城的时候,我们就学习过它对应的高级映射,一对一映射,一对多映射,多对多映射.对于SSM的Mybatis来说,肯定也是差不多的.既然开了 ...

  8. mybatis入门_一对多,多对多映射以及整合spring框架

    一.一对多映射. 1.1 一对多映射之根据多的一方关联查询一的一方 示例:查询出具体的订单信息,同时也查询出来订单的用户信息. 引入的订单表如下所示: 框选出来的为具体的外键. 订单的Pojo类如下所 ...

  9. MyBatis学习(七)MyBatis关联映射之多对多映射

    对于数据库中的多对多关系建议使用一个中间表来维护关系. 1.创建四张表,分别为用户表,商品表,订单表,中间表. DROP TABLE IF EXISTS `t_user`; CREATE TABLE ...

随机推荐

  1. pip安装超时解决方案

    1 安装的后面 用-i接一些国内的镜像,下面这个是清华的,亲测比较快 pip install apache-airflow -i https://pypi.tuna.tsinghua.edu.cn/s ...

  2. C# Winfrom GDI+ 自定义控件

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; u ...

  3. 06_Hive分桶机制及其作用

    1.Clustered By 对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分. Hive也是针对某一列进行桶的组织.Hive采用对列值哈希,然后 ...

  4. CSS 中用户自定义字体 @font-face

    @font-face 允许网页中使用自定义的字体,这些自定义的字体被放置在服务器上,从而让网页摆脱对访问者计算机上字体环境的依赖. 简单的说,有了@font-face,只需将字体上传到服务器端,无论访 ...

  5. Ubuntu系统---EasyECD安装记录

    说明:因解决Ubuntu花屏和频繁死机的问题(后来证实本人的电脑显卡驱动有问题),手残毁坏了系统,需重装.之前从未装过系统,经过三天,反复折腾装了近十次的系统,现总结如下. 第一步:Windows 系 ...

  6. Linux下安装LoaderRunner LoaderGenerator

    Linux负载机上安装LR的理由: 1.windows系统,基本上每个vuser会消耗2-5M的内存,单机300-500或者更多的虚拟用户时,CPU占用率已经较高,此时整个测试环境的测试系统的瓶颈实际 ...

  7. django国际化的简单设置

    设置国际化的具体步骤: 一.国际化 1)效果:针对不同的国家的人可以配置不同的语言(一般是英文和中文,  English  Chinese) 2)目的:增加项目的用户量 3)难度:不难 比较费劲的就是 ...

  8. Aizu - 1383 Pizza Delivery (最短路图+DAG上的割边)

    题意:给出一张有向图,每条边有长度,对于每条边,你要回答将该边的方向取反后,从起点到终点的最短距离是增加or减小or不变. 首先求出起点到所有点的最短距离和所有点到终点的最短距离(两次DIjkstra ...

  9. BZOJ 2927: [Poi1999]多边形之战 (博弈)

    题意 有一个凸多边形,顶点编号逆时针从0到n-1.现在这个n边形被剖分成n-2个三角形,给出这n-2个三角形的顶点,保证这是用n-3条不交叉的对角线划分出来的.现在第一个三角形是黑色,其他都是白色.两 ...

  10. HDU 6085 - Rikka with Candies | 2017 Multi-University Training Contest 5

    看了标程的压位,才知道压位也能很容易写- - /* HDU 6085 - Rikka with Candies [ 压位 ] | 2017 Multi-University Training Cont ...