最近项目用到中间表,则遇到如何联查映射的问题,之前一直都是一个表头,多个明细或者一对一这样的关系,没遇到这样的问题,所以趁机找了下资料解决了这个问题。

表结构设计如下:

主表:

CREATE TABLE `process_line_detail` (
`id` char(32) NOT NULL COMMENT 'ID',
`serial_no` int(11) NOT NULL COMMENT '序号',
`process_id` char(32) DEFAULT '' COMMENT '工序id'
)

中间表:

REATE TABLE `process_line_detail_device` (
`process_line_detail_id` char(32) NOT NULL COMMENT '工序线详情id',
`device_id` char(32) NOT NULL COMMENT '设备id'
)
CREATE TABLE `process_line_detail_mould` (
`process_line_detail_id` char(32) NOT NULL COMMENT '工序线详情id',
`mould_id` char(32) NOT NULL COMMENT '模具id'
)

中间表关联表:

CREATE TABLE `device` (
`id` char(32) NOT NULL COMMENT 'ID',
`name` varchar(32) NOT NULL COMMENT '名称'
)
CREATE TABLE `mould` (
`id` char(32) NOT NULL COMMENT 'ID',
`code` varchar(64) NOT NULL COMMENT '编码',
`serial_no` varchar(32) DEFAULT '' COMMENT '序列号',
`name` varchar(32) DEFAULT '' COMMENT '模具名称',
`model` varchar(64) DEFAULT '' COMMENT '模具型号'
)

一对一的关联表:

CREATE TABLE `process` (
`id` char(32) NOT NULL COMMENT 'ID',
`name` varchar(64) DEFAULT '' COMMENT '工序名称'
)

实体类则不需要关联表,只需要在主表中添加关联表的集合或者单个对象即可(简写,省略 get,set):

public class ProcessLineDetail{
private String id;
private String serialNo; // 序号
private Process process; // 工序
private List<Device> deviceList = Collections.emptyList();
private List<Mould> mouldList = Collections.emptyList();
}
public class Device  {
private String name; // 名称
private String id; // id
}
public class Mould {
private String id;
private String code; // 编码
private String serialNo; // 序列号
private String name; // 模具名称
private String model; // 模具型号
}
public class Process  {
private String id; // id
private String name; // 工序名称

mybatis映射文件如下(简写,没包含具体实体的路径):

<sql id="baseColumns">
a.id,
a.serial_no,
a.process_id,
process.name AS "process_name",
device.name AS "device_name",
device.id AS "device_id",
mould.id AS "mould_id",
mould.name AS "mould_name"
</sql>
<resultMap id="AllResultMap" type="ProcessLineDetail">
<id property="id" column="id" />
<result property="serialNo" column="serial_no" />
<association property="process" column="process_id" javaType="Process">
<id column="process_id" property="id" />
<result column="process_name" property="name" />
</association>
<collection property="deviceList" ofType="Device" >
<id column="device_id" property="id" />
<result column="device_name" property="name"/>
</collection>
<collection property="mouldList" ofType="Mould">
<id column="mould_id" property="id" />
<result column="mould_name" property="name" />
</collection>
</resultMap>
<sql id="allJoins">
left join process_line_detail_device detailDevice on detailDevice.process_line_detail_id = a.id
left join device device on device.id = detailDevice.device_id
left join process_line_detail_mould detailMould on detailMould.process_line_detail_id = a.id
left join mould mould on mould.id = detailMould.mould_id
left join process process ON process.id = a.process_id
</sql>
<select id="get" resultMap="AllResultMap" >
SELECT
<include refid="baseColumns"/>
FROM process_line_detail a
<include refid="allJoins"/>
WHERE a.id = #{id}
</select>

如此即可,mybaits会自动将各数据集合一一对应上。

最新文章

  1. 线程池 Threadpool (还需要补充)
  2. 团队开发——冲刺2.e
  3. 《精通CSS网页布局》读书报告 ----2016-12-5补充
  4. javascript引擎工作原理
  5. Android 图片的放大缩小拖拉
  6. chrome调试js工具的使用
  7. java 考试试题
  8. Codeforces Gym 100002 B Bricks 枚举角度
  9. Python 列表实现字典的get功能
  10. Installing scikit-learn
  11. jstree 节点拖拽保存数据库
  12. String or binary data would be truncated. The statement has been terminated.
  13. IE6 png兼容问题
  14. 盒子模型&amp;position定位
  15. SolrCloud Hello Word
  16. Swift3集成极光推送
  17. 关于解决Git项目本地修改代码之后执行pull操作之后报错的问题
  18. Failure to transfer org.apache.maven:maven-archiver:pom:2.5 from http://repo.maven.apache.org/ maven2 was cached in the local repository, resolution will not be reattempted until the update interv
  19. aspnetcore.webapi实战k8s健康探测机制 - kubernetes
  20. 003-SqlHelper.cs/Web.config

热门文章

  1. 数据结构实验之排序四:寻找大富翁(SDUT 3401)
  2. (11)Go方法/接收者
  3. vue Uncaught SyntaxError: Unexpected token &lt; 报错
  4. hdoj - 2602 Bone Collector
  5. 记录linux上mongo迁移使用的命令
  6. MacBook Air在macOS Mojave和macOS Seirra系统下使用Loopback在OBS Studio推流时输出系统软件声音
  7. Activiti task claim
  8. too many positional arguments错误
  9. 深入学习c++--多线程编程(三)thread的两种死法
  10. gdb命名记录