java后台管理系统项目学习day10--mybatis<一对多,一对一>

目录

1、resultMap的用法及关联结果集映射

1-1、概念

resultMap可以实现将查询结果映射为复杂类型的pojo,例如:在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。

测试代码太多,耦合在一起了,重新新建一个Moudule和表来讲resultMap

1-2、新建一个worker表

要求:
1、worker_id主键自增
2、varchar(66) worker_name

sql语句 : create table worker(worker_id int primary key auto_increment,worker_name varchar(66));

3、表里随意添加几条数据:
sql语句:insert into worker values(55,“总办”),(null,“公关部”),(null,“销售部”),(null,“火星部”),(null,“喵星部”);

偷个懒:直接到sqlyog里可视化软件添加

在这里插入图片描述

1-3、重新创建一个module,名字为springboot_mybatis_demo3

**不会创建,在前几天的讲解里有创建步骤 **

1-4、创建pojo里的Worker实体对象

前面说过:属性要和表里的字段相关联

在这里插入图片描述

1-4、创建Worker_Mapper接口

在这里插入图片描述

1-5、创建WorekerMapper映射文件

在这里插入图片描述

1-6、在核心配置文件配置WorkerMapper映射文件

在这里插入图片描述

1-7、测试类添加代码

在这里插入图片描述

代码如下:

  //查询worker表数据
    @Test
    public void select1(){
   
        Worker_Mapper worker_mapper = session.getMapper(Worker_Mapper.class);
        List<Worker> list = worker_mapper.selectW();
        System.out.println(list);
        session.close();//释放session资源
    }

1-8、接口添加代码

在这里插入图片描述

代码如下:

List<Worker> selectW();

1-9、映射文件添加代码

在这里插入图片描述

代码如下:

<!-- 查询worker表数据 -->
    <select id="selectW" resultType="Worker">
        select * from worker
    </select>

1-10、运行单元测试结果

在这里插入图片描述

明明查出了数据的,可是显示的却是null,这是为什么?

主要是因为我们worker实体对象里的属性名和数据库的字段对应不上,导致映射结果出错。

在这里插入图片描述

2、WorkerMapper映射文件添加resultmap

resultType可以把查询结果封装到pojo类型中,但必须pojo类的属性名和查询到的数据库表的字段名一致。但是如果sql查询到的字段与pojo的属性名不一致,则需要使用resultMap将字段名和属性名对应起来,进行手动配置封装,将结果映射到pojo中

简而言之:实体类属性名和字段名相同时用resultType,不同时用resultMap

2-1、workermapper映射文件编辑代码

在这里插入图片描述

代码如下

  <!-- 查询worker表数据 
        实体对象属性名和表字段名不同时,使用resultMap自定义映射关系
    -->
    <select id="selectW" resultMap="workerORM">
        select * from worker
    </select>
    <!--自定义映射关系
        1、<resultMap>标签中id属性是resultMap的唯一标识符
        2、type是结果集映射对象路径,使用了别名包标签,所以直接写对象名
        3、<id>标签代表每一个表中的主键
        4、column是要映射的表字段
        5、property是实体对象的属性名
        6、<result>是除了<id>标签主键的其他非主键进行映射
        7、javaType是实体对象属性的类型,可写可不写
        8、一对多时使用<collection>集合标签,多对一时使用<association>对象标签
    -->
    <resultMap id="workerORM" type="Worker">
        <id column="worker_id" property="workerId" javaType="Integer"/>
        <result column="worker_name" property="workerName" javaType="String"/>
    </resultMap>

2-2、运行单元测试结果:

在这里插入图片描述

3、关联查询

3-1、关联关系

一对一:媳妇和老公(法律上规定,别乱想!!!!) 员工和部门

一对多:一个部门对应多个员工

多对多:是多个一对多的关系,比如:1、一个父亲对应多个孩子。 2、一个孩子多个父亲(母亲多次重组家庭),但是多对多在java里是不能直接表现,只能多个一对多去表现。

3-2、一对一

3-2-1、数据库里创建workforce(员工)表

字段:workforce_id,wordforce_name,wordforce_age,为了关联员工表和部门表之间的关系添加 worker_id,SQL语句:

1、create table workforce(workforce_id int primary key auto_increment,workforce_name varchar(66),workforce_age int,worker_id int);

2、insert into workforce values(1,“龙龟”,3000,55),(2,“塞拉斯”,26,56),(3,“光辉”,18,57),(4,“女枪”,16,58),(5,“JS”,40,59);

也可以直接去sqlyog可视化软件直接创建数据如下:

在这里插入图片描述

表构建好以后,再次去创建WorkForce实体对象,创建WorkForce_Mapper接口,WorkForceMapper映射文件,mybatis.xml核心配置文件配置映射文件

3-2-2、创建WorkForce类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值