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就被查出来.