目录
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核心配置文件配置映射文件