多对多关系,课程和学生

接口

public interface CourseMapper {
/**
* 获取所有课程
* @return
* @throws Exception
*/
public List<Course> getAll() throws Exception;
}

映射文件

<mapper namespace="com.demo2.mapper.CourseMapper">

	<select id="getAll" resultType="Course">
select t1.c_id id, t1.c_name name, t1.c_credit credit
from t_course t1
</select> </mapper>

实体类

public class Course {

	private Integer id;
private String name;
private Double credit;
private List<Student> students;
//省略getter和setter

接口

public interface StudentMapper {
/**
* 查询所有学生的选课情况
* @return
* @throws Exception
*/
public List<Student> getStuCou() throws Exception; /**
* 删除指定id用户的某门课(根据课程id)的选课情况
* @param StudentCourseLink
* @throws Exception
* 入参为多个参数时,可以使用Map,model,或者@param
*/
public void delStuCouById(@Param("s_id") String s_id, @Param("c_id") String c_id) throws Exception; /**
* 添加选课
* @param sc
* @throws Exception
*/
public void addCou(Stu_Cou sc) throws Exception; /**
* 根据ID获取指定的学生以及选课情况
* @param id
* @return
* @throws Exception
*/
public Student getStuById(String id) throws Exception; }

映射文件

<mapper namespace="com.demo2.mapper.StudentMapper">
<!-- 多对多,多表查询 -->
<!-- 查询有两种方式, -->
<!--方式一嵌套结果: 就是把所有的字段都映射,一条SQL连表查询, <collection>标签映射-->
<resultMap id="stuCouMap" type="Student">
<id column="s_id" property="id"/>
<result column="s_name" property="name"/>
<result column="s_sex" property="sex"/>
<result column="s_age" property="age"/>
<!-- 多对多关联 -->
<collection property="courses" ofType="Course">
<id column="c_id" property="id"/>
<result column="c_name" property="name"/>
<result column="c_credit" property="credit"/>
</collection>
</resultMap>
<!-- 查询所有学生及他们的选择课程的信息,因为返回的结果集所有字段使用result标签映射实体属性,所以直接使用*查询所有 -->
<select id="getStuCou" resultMap="stuCouMap">
select t1.*, t2.*
from t_student t1,
t_course t2,
t_stu_cou t3
where t1.s_id = t3.sc_s_id
and t2.c_id = t3.sc_c_id
</select> <!--方式二嵌套查询: 就是把所有的字段都映射,两条SQL,单独查询, <collection>标签映射-->
<resultMap id="stuCouMap2" type="Student">
<id column="s_id" property="id"/>
<result column="s_name" property="name"/>
<result column="s_sex" property="sex"/>
<result column="s_age" property="age"/>
<!-- 多对多关联,该column属性值为id为getStuByIdSelect标签查询的结果中的id -->
<collection column="s_id" property="courses" javaType="ArrayList" ofType="Course" select="getCourse">
</collection>
</resultMap>
<!-- 注意此处查询的课程的字段返回的字段没有使用result标签映射实体属性,所以要使用别名来映射 -->
<select id="getCourse" parameterType="int" resultType="Course">
select t1.c_id id, t1.c_name name, t1.c_credit credit
from t_course t1
left join t_stu_cou t2
on t1.c_id = t2.sc_c_id
where t2.sc_s_id = #{id}
</select> <!-- 根据学生ID获取学生信息以及选课信息,此处返回的结果集使用了result标签映射实体属性,所以可以直接使用*查询所有字段 -->
<select id="getStuById" parameterType="String" resultMap="stuCouMap2">
select *
from t_student
where s_id = #{id}
</select> <!-- 根据学生ID删除学生的选课信息,入参为多个参数时,可以使用Map,model,或者@param -->
<delete id="delStuCouById">
delete from t_stu_cou
where sc_s_id = #{s_id}
and sc_c_id = #{c_id}
</delete> <insert id="addCou" parameterType="Stu_Cou">
insert into t_stu_cou(sc_s_id, sc_c_id, createtime) value(#{stu.id}, #{cou.id}, #{createtime})
</insert>
</mapper>

实体类

public class Student {

	private Integer id;
private String name;
private String sex;
private Integer age;
private List<Course> courses;
//省略getter和setter

中间表

实体类

public class Stu_Cou {

	private Student stu;
private Course cou;
private Date createtime;
//省略getter和setter

4.SSM整合_多表_多对多的增删改查的更多相关文章

  1. 第二百七十七节,MySQL数据库-数据表、以及列的增删改查

    MySQL数据库-数据表.以及列的增删改查 1.创建一个表 CREATE(创建) TABLE(表) ENGINE(引擎) ENGINE=INNODB(引擎)还有很多类引擎,这里只是简单的提一下INNO ...

  2. Spring Boot入门系列(十八)整合mybatis,使用注解的方式实现增删改查

    之前介绍了Spring Boot 整合mybatis 使用xml配置的方式实现增删改查,还介绍了自定义mapper 实现复杂多表关联查询.虽然目前 mybatis 使用xml 配置的方式 已经极大减轻 ...

  3. Django中ORM表的创建以及基本增删改查

    Django作为重量级的Python web框架,在做项目时肯定少不了与数据库打交道,编程人员对数据库的语法简单的还行,但过多的数据库语句不是编程人员的重点对象.因此用ORM来操作数据库相当快捷.今天 ...

  4. SSMybatis整合 --详细解读Mybatis对oracle数据库进行增删改查(一)

    Mybatis是现在主流的持久化层框架,与Hibernate不同的是,它鼓励程序员使用原声SQL语句对数据库进行操作.因此提供了非常灵活的功能.特别是当数据库同时访问数过多,需要进行优化时,使用sql ...

  5. IDEA对数据库、表、记录的(增删改查可视化操作)、数据库安全性问题的演示

    对数据库的增删改查 新增数据库 修改数据库 删除数据库 对表的增删改查 新增表 修改表 删除表 对记录的增删改查 数据库安全性问题的演示 演示脏读 ​ 一个事物里面读到了另外一个事物没有提交的数据: ...

  6. 2.SSM整合_多表_一对一或多对一的增删改查

    一对一和多对一配置一样,这里就放到一起. 1.配置文件跟上一章一样,这里就不多写了,主要是Mapper映射文件 多 接口 public interface NewsMapper { public vo ...

  7. 【hbase】——Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询

    1.搭建环境 新建JAVA项目,添加的包有: 有关Hadoop的hadoop-core-0.20.204.0.jar 有关Hbase的hbase-0.90.4.jar.hbase-0.90.4-tes ...

  8. (转)Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询

    1.搭建环境 新建JAVA项目,添加的包有: 有关Hadoop的hadoop-core-0.20.204.0.jar 有关Hbase的hbase-0.90.4.jar.hbase-0.90.4-tes ...

  9. Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询

    1.搭建环境 新建JAVA项目,添加的包有: 有关Hadoop的hadoop-core-0.20.204.0.jar 有关Hbase的hbase-0.90.4.jar.hbase-0.90.4-tes ...

随机推荐

  1. Running Tensorflow on AMD GPU

    keras+tensorflow: based on AMD GPU https://rustyonrampage.github.io/deep-learning/2018/10/18/tensorf ...

  2. Leetcode-1.两数之和

    题目描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数 ...

  3. git知识总结-3.gitignore文件说明

    1.前言 一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表. 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等. 在这种情况下,我们可以创建一个名 ...

  4. ubuntu 配置apt-get源

    ubantu安装软件速度慢一般是因为系统默认选择的源导致,可以通过手动配置源设置解决. 1. 原文件备份 sudo mv /etc/apt/sources.list /etc/apt/sources. ...

  5. Helloworld——SpringMVC

    搭建环境:eclipse 这里需要配置Server runtime environment——Apache Tomcat 到官网下载 解压 在eclipse中: Window perferences ...

  6. LeetCode 9. Palindrome Number(c语言版)

    题目: Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same ...

  7. Python IDLE配置清屏快捷键(Ctrl+L)

    1.在Python\Lib\idlelib下,新建一个ClearWindow.py文件(没有时就新建),内容如下: """ Clear Window Extension ...

  8. 定义一个javascript方法,实现对数组集合的正向排序

    function sortArr (arr) { var newArr = arr.map(val => parseInt(val)).sort((a, b) => a-b); newAr ...

  9. spring-mybatis的整合

    1.导入包 2.创建一个请求文件发送请求 <%@ page language="java" contentType="text/html; charset=UTF- ...

  10. walle2.0 nginx.conf配置文件参数

    vim /usr/local/nginx/conf #user nobody; worker_processes ; events { worker_connections ; } http{ inc ...