Mybatis的基于关联的嵌套结果配置
来源:互联网 发布:3个数最小公倍数算法 编辑:程序博客网 时间:2024/04/30 00:40
在Mybatis的开发中,经常遇到某个表是一个主表的一部分,对应Java的对象概念就是一个Pojo类是另一个Pojo的一部分。这儿讨论的是一对多的关系的关联的嵌套结果配置。
假设:有一个DsBase.mapper.xml,用于对 t_ds_base表(数据源主表)的配置,DsTech.mapper.xml对就ds_tech表(数据源技术信息表)的配置。
Sql如下:
CREATE TABLE t_ds_base
(
ds_id varchar(64) NOT NULL, -- 代理主键
ds_name_en varchar(100), -- 数据源英文标识
ds_name_cn varchar(100), -- 数据源中文标识
ds_desc varchar(500), -- 数据源描述
ds_reg_date date, -- 数据源注册日期
ds_modify_date date, -- 数据源修改日期
ds_valid_sign numeric, -- 数据源有效性标识
CONSTRAINT pk_t_ds_base PRIMARY KEY (ds_id)
)
CREATE TABLE t_ds_tech
(
ds_tech_id varchar(64) NOT NULL, -- 代理主键,数据源技术信息ID
ds_id varchar(64), -- 代理主键
tech_label_en varchar(100), -- 数据源技术信息英文标签
tech_label_cn varchar(100), -- 数据源技术信息中文标签
tech_label_value varchar(100), -- 数据源技术信息标签值
create_date date, -- 创建日期
modify_date date, -- 修改日期
valid_sign numeric, -- 有效性标识
CONSTRAINT pk_t_ds_tech PRIMARY KEY (ds_tech_id),
CONSTRAINT fk_t_ds_tec_reference_t_ds_bas FOREIGN KEY (ds_id)
REFERENCES t_ds_base (ds_id) MATCH SIMPLE
ON UPDATE RESTRICT ON DELETE RESTRICT
)
对应的java对象如下:
public class DsBase {
private String dsId;
private String dsNameEn;
private String dsNameCn;
private String dsDesc;
private Date dsRegDate;
private Date dsModifyDate;
private Integer dsValidSign;
/** 数据源的技术信息 */
private List<DsTech> dsTechList;
//省略getter,setter方法
}
public class DsTech {
private String dsTechId;
private String dsId;
private String techLabelEn;
private String techLabelCn;
private String techLabelValue;
private Date createDate;
private Date modifyDate;
private Integer validSign;
}
目标:我们以一条语句连接语句把DsBase的内容查出,也就是实现下面这条查询语句。
select base.ds_id,base.ds_name_en,base.ds_name_cn,base.ds_desc,base.ds_reg_date,base.ds_modify_date,base.ds_valid_sign,
tech.ds_tech_id,tech.ds_id as t_ds_id,tech.tech_label_en,tech.tech_label_cn,tech.tech_label_value,tech.create_date,tech.modify_date,tech.valid_sign
from T_DS_BASE base left join T_DS_TECH tech on (base.ds_id = tech.ds_id)
问题的关键也就在Mybatis的关联查询的配置,详细的内容可以参考 Mybatis 的 Mapper XML 文件。
配置如下:
DsBase.mapper.xml部分配置
<resultMap id="SelectAllEntity" type="DsBase">
<id property="dsId" column="ds_id"/>
<result property="dsId" column="ds_id" jdbcType="VARCHAR" javaType="String" />
<result property="dsNameEn" column="ds_name_en" jdbcType="VARCHAR" javaType="String" />
<result property="dsNameCn" column="ds_name_cn" jdbcType="VARCHAR" javaType="String" />
<result property="dsDesc" column="ds_desc" jdbcType="VARCHAR" javaType="String" />
<result property="dsRegDate" column="ds_reg_date" jdbcType="DATE" javaType="Date" />
<result property="dsModifyDate" column="ds_modify_date" jdbcType="DATE" javaType="Date" />
<result property="dsValidSign" column="ds_valid_sign" jdbcType="NUMERIC" javaType="Integer" />
<collection property="dsTechList" ofType="DsTech" column="t_ds_id"resultMap="com.cds.datacontrol.dscontrol.dao.DsTechDao.SelectAllTech"></collection>
</resultMap>
关键点也就在上面标注为红色的部分,collection配置的两个属性备注:
1.resultMap的内容为带有namespace的全名Id引用,不带上namespace默认是在当前文件查找。这也就是为什么不同文件的Id可以重复。
2.column的内容说明了以那个字段进行集合归类,也就是List里的对象都有这个特征。在两个表中有同一个字段时,至少要给出一个别名,如上面的sql中标红的。
DsTech.mapper.xml部分配置
<mapper namespace="com.cds.datacontrol.dscontrol.dao.DsTechDao">
<resultMap id="SelectAllTech" type="DsTech">
<id property="dsTechId" column="ds_tech_id"/>
<result property="dsTechId" column="ds_tech_id" jdbcType="VARCHAR" javaType="String" />
<result property="dsId" column="t_ds_id" jdbcType="VARCHAR" javaType="String" />
<result property="techLabelEn" column="tech_label_en" jdbcType="VARCHAR" javaType="String" />
<result property="techLabelCn" column="tech_label_cn" jdbcType="VARCHAR" javaType="String" />
<result property="techLabelValue" column="tech_label_value" jdbcType="VARCHAR" javaType="String" />
<result property="createDate" column="create_date" jdbcType="DATE" javaType="Date" />
<result property="modifyDate" column="modify_date" jdbcType="DATE" javaType="Date" />
<result property="validSign" column="valid_sign" jdbcType="NUMERIC" javaType="Integer" />
</resultMap>
...
</mapper>
- Mybatis的基于关联的嵌套结果配置
- MyBatis结果集的嵌套以及结果集的继承
- 使用MyBatis(八)一对一关联(嵌套查询,嵌套结果)
- mybatis基于注解的关联查询
- 使用MyBatis(十)一对多集合的嵌套结果
- mybatis中查询有复杂关联对象的结果集
- Mybaties的关联映射(嵌套结果映射,嵌套查询映射)
- Mybatis(ibatis)的一对多关联配置
- mybatis 查询结果集的配置
- mybatis基于spring的配置
- MyBatis之高级关联和集合映射(二、嵌套查询和嵌套结果小案例)
- mybatis一对一、一对多关联使用及结果嵌套和条件嵌套理解
- MyBatis框架基于Annotation注解的一对一关联映射
- MyBatis框架基于Annotation注解的一对多关联映射
- myBatis关联的问题
- Mybatis的关联查询
- mybatis的关联查询
- mybatis的关联关系
- Best Practices for Programming MATLAB
- 获取Windwos的版本和名称
- iPhone系统常用文件夹位置
- MFC 菜单编程 -- 总结
- Source Insight 经典教程
- Mybatis的基于关联的嵌套结果配置
- 【插头DP】广场铺砖
- Android PMEM驱动分析
- sql行转列
- 接口测试从零开始系列_mock技术使用
- Dart语言特性简介
- 设计模式-快餐简解-【装饰模式】
- dreamweaver中用正则表达式查找替换批量删除 tppabs标签的方法 一步到位
- struts2利用<s:fielderror/>等标签详细地控制错误消息输出格式