mybatis多对多映射【学生与课程】
1)如图
2)创建students.sql和courses.sql和middles.sql
- drop table middles;
- drop table students;
- drop table courses;
- create table students(
- sid int(5) primary key,
- sname varchar(10)
- );
- create table courses(
- cid int(5) primary key,
- cname varchar(10)
- );
- create table middles(
- sid int(5),
- cid int(5),
- primary key(sid,cid)
- );
- insert into students(sid,sname) values(1,'哈哈');
- insert into students(sid,sname) values(2,'呵呵');
- insert into courses(cid,cname) values(1,'java');
- insert into courses(cid,cname) values(2,'net');
- insert into middles(sid,cid) values(1,1);
- insert into middles(sid,cid) values(1,2);
- insert into middles(sid,cid) values(2,1);
- insert into middles(sid,cid) values(2,2);
- select * from students;
- select * from courses;
- select * from middles;
3)创建Student.java和Course.java
- /**
- * 学生(多方)*/
- public class Student {
- private Integer id;
- private String name;
- private List<Course> courseList = new ArrayList<Course>();
- public Student(){}
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public List<Course> getCourseList() {
- return courseList;
- }
- public void setCourseList(List<Course> courseList) {
- this.courseList = courseList;
- }
- }
- /**
- * 课程(多方)
- */
- public class Course {
- private Integer id;
- private String name;
- private List<Student> studentList = new ArrayList<Student>();
- public Course(){}
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public List<Student> getStudentList() {
- return studentList;
- }
- public void setStudentList(List<Student> studentList) {
- this.studentList = studentList;
- }
- }
4)创建StudentMapper.xml和CourseMapper.xml
StudentMapper.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="studentNamespace">
- <resultMap type="loaderman.many2many.Student" id="studentMap">
- <id property="id" column="sid" />
- <result property="name" column="sname"/>
- </resultMap>
- <select id="findStudentByName" parameterType="string" resultMap="studentMap">
- select s.sid,s.sname
- from students s,middles m,courses c
- where s.sid = m.sid
- and m.cid = c.cid
- and c.cname = #{name}
- </select>
- </mapper>
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="courseNamespace">
- <resultMap type="loaderman.many2many.Course" id="courseMap">
- <id property="id" column="cid" />
- <result property="name" column="cname"/>
- </resultMap>
- <select id="findCourseByName" parameterType="string" resultMap="courseMap">
- select c.cid,c.cname
- from students s,middles m,courses c
- where s.sid = m.sid
- and m.cid = c.cid
- and s.sname = #{name}
- </select>
- </mapper>
5)创建students.dao
- public class StudentDao {
- /**
- * 查询哈哈选学的【课程】
- */
- public List<Course> findCourseByName(String name) throws Exception{
- SqlSession sqlSession = null;
- try{
- sqlSession = MybatisUtil.getSqlSession();
- return sqlSession.selectList("courseNamespace.findCourseByName",name);
- }catch(Exception e){
- e.printStackTrace();
- throw e;
- }finally{
- MybatisUtil.closeSqlSession();
- }
- }
- /**
- * 查询java课程有哪些【学生】
- */
- public List<Student> findStudentByName(String name) throws Exception{
- SqlSession sqlSession = null;
- try{
- sqlSession = MybatisUtil.getSqlSession();
- return sqlSession.selectList("studentNamespace.findStudentByName",name);
- }catch(Exception e){
- e.printStackTrace();
- throw e;
- }finally{
- MybatisUtil.closeSqlSession();
- }
- }
- public static void main(String[] args) throws Exception{
- StudentCourseDao dao = new StudentCourseDao();
- //List<Course> courseList = dao.findCourseByName("哈哈");
- //for(Course c : courseList){
- // System.out.println(c.getId()+":"+c.getName());
- //}
- List<Student> studentList = dao.findStudentByName("java");
- for(Student s : studentList){
- System.out.println(s.getId()+":"+s.getName());
- }
- }
- }
mybatis多对多映射【学生与课程】的更多相关文章
- mybatis多对多映射
数据库里面有角色实体类app_cms_role
- 04—mybatis的关联映射
mybatis的关联映射一对一一对多多对多 一.一对一(一个人只能有一个身份证号) 1.创建表创建表tb_card CREATE TABLE `tb_card` ( `id` int(11) NOT ...
- java web(六):mybatis之一对一、一对多、多对多映射
前言: 百度百科: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可 ...
- Mybatis的多对多映射
一.Mybatis的多对多映射 本例讲述使用mybatis开发过程中常见的多对多映射查询案例.只抽取关键代码和mapper文件中的关键sql和配置,详细的工程搭建和Mybatis详细的流程代码可参见& ...
- Mybatis(四) 高级映射,一对一,一对多,多对多映射
天气甚好,怎能不学习? 一.单向和双向 包括一对一,一对多,多对多这三种情况,但是每一种又分为单向和双向,在hibernate中我们就详细解析过这单向和双向是啥意思,在这里,在重复一遍,就拿一对多这种 ...
- Mybatis学习(四)————— 高级映射,一对一,一对多,多对多映射
一.单向和双向 包括一对一,一对多,多对多这三种情况,但是每一种又分为单向和双向,在hibernate中我们就详细解析过这单向和双向是啥意思,在这里,在重复一遍,就拿一对多这种关系来讲,比如有员工和部 ...
- 【Mybatis高级映射】一对一映射、一对多映射、多对多映射
前言 当我们学习heribnate的时候,也就是SSH框架的网上商城的时候,我们就学习过它对应的高级映射,一对一映射,一对多映射,多对多映射.对于SSM的Mybatis来说,肯定也是差不多的.既然开了 ...
- mybatis入门_一对多,多对多映射以及整合spring框架
一.一对多映射. 1.1 一对多映射之根据多的一方关联查询一的一方 示例:查询出具体的订单信息,同时也查询出来订单的用户信息. 引入的订单表如下所示: 框选出来的为具体的外键. 订单的Pojo类如下所 ...
- MyBatis学习(七)MyBatis关联映射之多对多映射
对于数据库中的多对多关系建议使用一个中间表来维护关系. 1.创建四张表,分别为用户表,商品表,订单表,中间表. DROP TABLE IF EXISTS `t_user`; CREATE TABLE ...
随机推荐
- pip安装超时解决方案
1 安装的后面 用-i接一些国内的镜像,下面这个是清华的,亲测比较快 pip install apache-airflow -i https://pypi.tuna.tsinghua.edu.cn/s ...
- C# Winfrom GDI+ 自定义控件
using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; u ...
- 06_Hive分桶机制及其作用
1.Clustered By 对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分. Hive也是针对某一列进行桶的组织.Hive采用对列值哈希,然后 ...
- CSS 中用户自定义字体 @font-face
@font-face 允许网页中使用自定义的字体,这些自定义的字体被放置在服务器上,从而让网页摆脱对访问者计算机上字体环境的依赖. 简单的说,有了@font-face,只需将字体上传到服务器端,无论访 ...
- Ubuntu系统---EasyECD安装记录
说明:因解决Ubuntu花屏和频繁死机的问题(后来证实本人的电脑显卡驱动有问题),手残毁坏了系统,需重装.之前从未装过系统,经过三天,反复折腾装了近十次的系统,现总结如下. 第一步:Windows 系 ...
- Linux下安装LoaderRunner LoaderGenerator
Linux负载机上安装LR的理由: 1.windows系统,基本上每个vuser会消耗2-5M的内存,单机300-500或者更多的虚拟用户时,CPU占用率已经较高,此时整个测试环境的测试系统的瓶颈实际 ...
- django国际化的简单设置
设置国际化的具体步骤: 一.国际化 1)效果:针对不同的国家的人可以配置不同的语言(一般是英文和中文, English Chinese) 2)目的:增加项目的用户量 3)难度:不难 比较费劲的就是 ...
- Aizu - 1383 Pizza Delivery (最短路图+DAG上的割边)
题意:给出一张有向图,每条边有长度,对于每条边,你要回答将该边的方向取反后,从起点到终点的最短距离是增加or减小or不变. 首先求出起点到所有点的最短距离和所有点到终点的最短距离(两次DIjkstra ...
- BZOJ 2927: [Poi1999]多边形之战 (博弈)
题意 有一个凸多边形,顶点编号逆时针从0到n-1.现在这个n边形被剖分成n-2个三角形,给出这n-2个三角形的顶点,保证这是用n-3条不交叉的对角线划分出来的.现在第一个三角形是黑色,其他都是白色.两 ...
- HDU 6085 - Rikka with Candies | 2017 Multi-University Training Contest 5
看了标程的压位,才知道压位也能很容易写- - /* HDU 6085 - Rikka with Candies [ 压位 ] | 2017 Multi-University Training Cont ...