码迷,mamicode.com
首页 > 其他好文 > 详细

mybatis(6)--自定义结果集(一对一)

时间:2020-02-03 22:23:50      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:对象   tis   情况   sam   mamicode   foreign   span   锁表   auto   

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>

 

mybatis(6)--自定义结果集(一对一)

标签:对象   tis   情况   sam   mamicode   foreign   span   锁表   auto   

原文地址:https://www.cnblogs.com/ywqtro/p/12249467.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!