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>
原文地址:https://www.cnblogs.com/ywqtro/p/12249467.html
时间: 2024-10-26 06:51:03