mybatis(6)--自定义结果集(一对一)
1.自定义结果集介绍
自定义结果集,可以给复杂的对象使用。也就是对象内又嵌套一个对象。或者一个集合。在这种情况下。前面学过的知识点,已经无法直接获取出对象内对象的信息。这个时候就需要使用resultMap自定义结果集来返回需要的数据。
2.创建数据表的sql
## 一对一数据表
## 创建锁表
create table t_lock(
`id` int primary key auto_increment,
`name` varchar(50)
);
## 创建钥匙表
create table t_key(
`id` int primary key auto_increment,
`name` varchar(50),
`lock_id` int ,
foreign key(`lock_id`) references t_lock(`id`)
);
## 插入初始化数据
insert into t_lock(`name`) values(‘阿里巴巴‘);
insert into t_lock(`name`) values(‘华为‘);
insert into t_lock(`name`) values(‘联想‘);
insert into t_key(`name`,`lock_id`) values(‘马云‘,1);
insert into t_key(`name`,`lock_id`) values(‘任正非‘,2);
insert into t_key(`name`,`lock_id`) values(‘柳传志‘,3);3.JavaBean对象(省略一些方法)
public class Key {
private int id;
private String name;//Lock对象
private Lock lock;
}
public class Lock {
private int id;
private String name;
}4.一对一的使用示例

(涉及分步查询)
package com.mapper;
import com.pojo.Key;
public interface KeyMapper {
public Key queryKeyByIdForSample(Integer id);
public Key queryKeyByIdForTwoStep(int i);
}package com.mapper;
import com.pojo.Key;
import com.pojo.Lock;
public interface LockMapper {
public Lock queryLockById(Integer id);
}级联属性的映射配置
<!--
resultMap标签专门用来定义自定义的结果集数据。
type属性设置返回的数据类型
id属性定义一个唯一标识
-->
<resultMap type="com.pojo.Key" id="queryKeyForSimple_resultMap">
<!-- id定义主键列 -->
<id column="id" property="id"/>
<!-- result 定义一个列和属性的映射 -->
<result column="name" property="name"/>
<!-- lock.id 和 lock.name 叫级联属性映射 -->
<result column="lock_id" property="lock.id"/>
<result column="lock_name" property="lock.name"/>
</resultMap>
<!--
select 标签用于定义一个select语句
id属性设置一个statement标识
parameterType设置参数的类型
resultMap 设置返回的结果类型
-->
<select id="queryKeyForSimple" parameterType="int" resultMap="queryKeyForSimple_resultMap">
select t_key.*,t_lock.name lock_name
from
t_key left join t_lock
on
t_key.lock_id = t_lock.id
where
t_key.id = #{id}
</select><association /> 嵌套结果集映射配置
<!--
resultMap标签专门用来定义自定义的结果集数据。
type属性设置返回的数据类型
id属性定义一个唯一标识
-->
<resultMap type="com.atguigu.bean.Key" id="queryKeyForSimple_resultMap_association">
<!-- id定义主键列 -->
<id column="id" property="id"/>
<!-- result 定义一个列和属性的映射 -->
<result column="name" property="name"/>
<!--
association 标签可以给一个子对象定义列的映射。
property 属性设置 子对象的属性名 lock
javaType 属性设置子对象的全类名
-->
<association property="lock" javaType="com.pojo.Lock">
<!-- id 属性定义主键 -->
<id column="lock_id" property="id"/>
<!-- result 标签定义列和对象属性的映射 -->
<result column="lock_name" property="name"/>
</association>
</resultMap>定义分步查询
LockMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mapper.LockMapper">
<select id="queryLockById" resultType="com.pojo.Lock">
select id,name from t_lock where id = #{id}
</select>
</mapper>KeyMapper.xml中的实现
<!-- public Key queryKeyByIdForTwoStep(int i); -->
<resultMap type="com.pojo.Key" id="queryKeyByIdForTwoStep_resultMap">
<id column="id" property="id" />
<result column="name" property="name" />
<!--
association标签定义一个子对象的集合集
property 属性映射子对象的名称
select 属性定义执行的查询语句
也就是说。property指定的lock子对象,是通过执行。select标识的查询语句返回
column 属性定义需要传递给select语句的参数
-->
<association property="lock" column="lock_id"
select="com.mapper.LockMapper.queryLockById" />
</resultMap>
<select id="queryKeyByIdForTwoStep" resultMap="queryKeyByIdForTwoStep_resultMap">
select
id,name,lock_id from t_key where id = #{id}
</select> 相关推荐
xiuyangsong 2020-11-16
Nishinoshou 2020-11-09
jimgreatly 2020-09-01
dongxurr 2020-08-18
Dullonjiang 2020-08-15
Dullonjiang 2020-08-11
Dullonjiang 2020-08-09
dongxurr 2020-08-08
yunzhonmghe 2020-08-07
jimgreatly 2020-08-03
Dullonjiang 2020-07-30
jimgreatly 2020-07-27
liqiancao 2020-07-26
xiuyangsong 2020-07-26
dongxurr 2020-07-26
mcvsyy 2020-07-26
helloxusir 2020-07-25
牧场SZShepherd 2020-07-20