4.SSM整合_多表_多对多的增删改查
多对多关系,课程和学生
接口
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整合_多表_多对多的增删改查的更多相关文章
- 第二百七十七节,MySQL数据库-数据表、以及列的增删改查
MySQL数据库-数据表.以及列的增删改查 1.创建一个表 CREATE(创建) TABLE(表) ENGINE(引擎) ENGINE=INNODB(引擎)还有很多类引擎,这里只是简单的提一下INNO ...
- Spring Boot入门系列(十八)整合mybatis,使用注解的方式实现增删改查
之前介绍了Spring Boot 整合mybatis 使用xml配置的方式实现增删改查,还介绍了自定义mapper 实现复杂多表关联查询.虽然目前 mybatis 使用xml 配置的方式 已经极大减轻 ...
- Django中ORM表的创建以及基本增删改查
Django作为重量级的Python web框架,在做项目时肯定少不了与数据库打交道,编程人员对数据库的语法简单的还行,但过多的数据库语句不是编程人员的重点对象.因此用ORM来操作数据库相当快捷.今天 ...
- SSMybatis整合 --详细解读Mybatis对oracle数据库进行增删改查(一)
Mybatis是现在主流的持久化层框架,与Hibernate不同的是,它鼓励程序员使用原声SQL语句对数据库进行操作.因此提供了非常灵活的功能.特别是当数据库同时访问数过多,需要进行优化时,使用sql ...
- IDEA对数据库、表、记录的(增删改查可视化操作)、数据库安全性问题的演示
对数据库的增删改查 新增数据库 修改数据库 删除数据库 对表的增删改查 新增表 修改表 删除表 对记录的增删改查 数据库安全性问题的演示 演示脏读 一个事物里面读到了另外一个事物没有提交的数据: ...
- 2.SSM整合_多表_一对一或多对一的增删改查
一对一和多对一配置一样,这里就放到一起. 1.配置文件跟上一章一样,这里就不多写了,主要是Mapper映射文件 多 接口 public interface NewsMapper { public vo ...
- 【hbase】——Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询
1.搭建环境 新建JAVA项目,添加的包有: 有关Hadoop的hadoop-core-0.20.204.0.jar 有关Hbase的hbase-0.90.4.jar.hbase-0.90.4-tes ...
- (转)Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询
1.搭建环境 新建JAVA项目,添加的包有: 有关Hadoop的hadoop-core-0.20.204.0.jar 有关Hbase的hbase-0.90.4.jar.hbase-0.90.4-tes ...
- Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询
1.搭建环境 新建JAVA项目,添加的包有: 有关Hadoop的hadoop-core-0.20.204.0.jar 有关Hbase的hbase-0.90.4.jar.hbase-0.90.4-tes ...
随机推荐
- android shape 圆圈 圆环 圆角
定义圆圈:比如角标: xml布局文件 <TextView android:id="@+id/item_order_pay_count" android:layout_widt ...
- ubuntu命令安装
1.当make时,发现没有对应的命令: apt-get install build-essential 安装工具,可解决这个问题
- 记录一个pom文件
rt <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://m ...
- [Linux]fcntl函数文件锁概述
概述 fcntl函数文件锁有几个比较容易忽视的地方: 1.文件锁是真的进程之间而言的,调用进程绝对不会被自己创建的锁锁住,因为F_SETLK和F_SETLKW命令总是替换调用进程现有的锁(若已存在), ...
- java类(Class)的概念;对象的概念,声明类的属性 和方法,局部变量和成员变量,面向对象编程思维,抽象的概念
类(Class)的概念 类是对一组具有相同特征和行为的对象的抽象描述. 理解: [1] 类包含了两个要素:特性和行为 => 同一类事物具有相同的特征和行为. [2] 类是一个群体性概念.例如:网 ...
- memset函数的实现&printf函数几种输出格式的输出结果
#include<stdio.h> #include<stdlib.h> void *memmset(void *dest, int ch, int count){ void ...
- buaaoo_first_assignment
四周之前,我不懂面向对象是什么:四周之后,我依然不懂面向对象是什么. 一.第一次作业 (1)实现 说起来,本次作业是最惨烈的一次. 虽然它很简单,但由于未熟悉正则表达式的应用,导致判断wrong fo ...
- Redis实战 - 2.list、set和Sorted Set
List Redis的List是通过Linked List(链表)来实现的String集合,所以插入数据的速度很快. 但是缺点就是在数据量比较大的时候,访问某个数据的时间可能会很长,但针对这种情况,可 ...
- 关于tomcat WEB-INF/lib下类加载顺序
关于tomcat WEB-INF/lib下类加载顺序问题 问题描述 smc应用最近碰到一个线上问题,预发机器规则测试接口没问题,但是线上机器就是调用有问题,表面上看,maven模块引用的是自己想要的j ...
- DbHelperSQL 增加事务处理方法(2种)
方法一: 1 public static bool ExecuteSqlByTrans(List<SqlAndPrams> list) { bool success = true; Ope ...