2021-08-11MyBatis注解方式多表查询

使用注解的方式,MyBatisConfig.xml文件中mappers标签中的配置

有两种方式1.配置package标签   2.配置mapper标签

<mappers><!--mappers引入映射配置文件-->

    <!--package标签:扫描包含映射关系的接口所在的包也可以-->

    <!--<package name="com.module5.mapper"/>--><!--引入com.module5.mapper包中的所有映射关系-->

    <!--mapper标签:扫描使用注解的接口-->

    <mapper class="com.module5.mapper.StudentMapper"/>

</mappers>

注解

查询 插入 删除 更新的注解

测试语句中通过动态代理获取接口的实现类对象,从而调用接口中的方法

多表查询使用注解的方式

@Result: 实现结果集的封装

@Results: 可以与@Result一起封装多个结果集

column="数据库的列名或别名" 

property="成员变量名"如果名称一一对应,并且不是复杂类型,可以省略不写

一、一对一的数据表

1.首先创建实体类card和person,拥有一下的属性

一对一的表,让card持有person

2.创建包,并配置MyBatisConfig.xml文件

接口在以下的软件包中

3.PersonMapper接口中的配置

因为card类中持有person对象,在PersonMapper接口中的方法时根据id查询

要传入的id则是CardMapper接口中pid(因为card表中的pid外键关联person表中的id)

4.CardMapper接口中的配置

5.测试

二、一对多

1.创建实体类classes student

classes中只有student泛型的list集合

2.配置MyBatisConfig.xml文件中的mappers标签

3.StudentMapper接口

抽象方法 selectByCid(Integer cid) 根据班级编号查询学生,返回值是student泛型的list集合

(  因为学生表的cid班级编号外键关联classes表中的id  )

这个地方的cid,通过下面的ClassesMapper接口中的配置将id传过来

4.ClassesMapper接口

其实和一对一差不多,只是这个地方返回值是一个List集合类型的

5.测试

三、多对多(课程和学生之间)

1.实体类

学生表中持有课程对象,这个对象是course泛型的List集合

学生表
课程表

将多对多的关系转化成一对多

这需要引入第三张表选课表stu_cr,但是这个表不需要写成实体类

stu_cr学科表中的字段

id 选课编号      sid  学生学号      cid课程编号

2.配置MyBatisConfig.xml文件中的mappers标签

3.CourseMapper接口

将course表和stu_cr表结合,再通过学生id进行查找,这就转化成了一对多的关系

学生学号从StudentMapper接口中传过来

4.StudentMapper接口

查询全部学生,有重复的,使用distinct进行去重

5.测试

如果感觉这样麻烦,可以将所有需要的属性都放到一个大表中,然后写一个sql语句,通过注解的方式进行查询

1.实体类

2.创建软件包,配置MyBatisConfig.xml文件中的mappers标签

3.接口

4.测试

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。