怎么让mybatise Gennerator 生成的代码实现级联查询

mybatise Gennerator 插件自己生成的代码是不能实现级联查询的,mybatise Gennerator 插件只能实现简单的查询…

当然就只是利用生成的语句也是可以实现级联查询,本人也使用过,但是那种方法也确实太low了点,或者说…不太优雅…

写一下mybatise Gennerator 级联查询的一个例子防备以后忘记

第一步

在mybatise Gennerator自动创建的bean包下创建extend包,然后在extend包中创建一个UserExtend类,并且添加代码`
在这里插入图片描述

public class UserExtend extends User {
    private User detail;


    public User getDetail() {
        return detail;
    }

    public void setDetail(User detail) {
        this.detail = detail;
    }


}

这里解释一下,这里继承User类是想将这个类的所有属性拿过来用.
还有这里一定要拿继承过来的类创建一个Object,这里的object也就是你当前表中的外键

第二步

在mapper包下也创建extend包并且在包中创建接口
在这里插入图片描述

public interface UserExtendMapper {
    List<UserExtend> findAll();

}

第三步

创建如下图所示的.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.lzy.btsf.supermarket.mapper.extend.UserExtendMapper">
    <select id="findAll" resultMap="UserExtendResultMap">
       select * from User;
    </select>
    <resultMap id="UserExtendResultMap" extends="com.lzy.btsf.supermarket.mapper.UserMapper.BaseResultMap" type="com.lzy.btsf.supermarket.bean.extend.UserExtend">
        <association property="detail" column="detail_id" select="com.lzy.btsf.supermarket.mapper.UserMapper.selectByPrimaryKey"></association>
    </resultMap>

</mapper>

代码内容解释

namespace:为在上面mapper包中添加的那个Mapper的路径,这里不是.xml的
路径
id:唯一标识这里写的是接口当中那个方法名

resultMap:是Mybatis最强大的元素,它可以将查询到的复杂数据(比如查询到几个表中数据)映射到一个结果集当中,这里简单的介绍一下resultMap这个标签里面可以写哪些东西,并且它们的含义是什么.大家可以挑重点看,有些属性也不太会用到.

resultMap标签解释
<!--column不做限制,可以为任意表的字段,而property须为type 定义的pojo属性-->
<resultMap id="唯一的标识" type="映射的pojo对象">
  <id column="表的主键字段,或者可以为查询语句中的别名字段" jdbcType="字段类型" property="映射pojo对象的主键属性" />
  <result column="表的一个字段(可以为任意表的一个字段)" jdbcType="字段类型" property="映射到pojo对象的一个属性(须为type定义的pojo对象中的一个属性)"/>
  <association property="pojo的一个对象属性" javaType="pojo关联的pojo对象">
    <id column="关联pojo对象对应表的主键字段" jdbcType="字段类型" property="关联pojo对象的主席属性"/>
    <result  column="任意表的字段" jdbcType="字段类型" property="关联pojo对象的属性"/>
  </association>
  <!-- 集合中的property须为oftype定义的pojo对象的属性-->
  <collection property="pojo的集合属性" ofType="集合中的pojo对象">
    <id column="集合中pojo对象对应的表的主键字段" jdbcType="字段类型" property="集合中pojo对象的主键属性" />
    <result column="可以为任意表的字段" jdbcType="字段类型" property="集合中的pojo对象的属性" />  
  </collection>
</resultMap>

如果collection标签是使用嵌套查询,格式如下

<collection column="传递给嵌套查询语句的字段参数" property="pojo对象中集合属性" ofType="集合属性中的pojo对象" select="嵌套的查询语句" > 
 </collection>

具体的用法可以直接百度找
而我这里直接使用extend属性,直接将自动生成的UserMapper中的BaseResultMap继承过来(这里只是使用人家的代码,毕竟官方人员写的代码才是大佬级别的)

property:写的是我们之前在UserExtend创建的User对象
column:写的是在当前表中外键的列名
select:这里写的是将上面的列名按照selectByPrimaryKey的方式将表中的那行数据查询出来

结果

在这里插入图片描述这里我们就看到detail就被查出来.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值