springboot多对一关系映射
原文:https://blog.csdn.net/h993438890/article/details/89146483
spring boot项目的创建省略
创建两张表
t_user 字段 主键id,username(varchar) , pwd(varchar) ,did(外键)
t_dept 字段 主键id,dname(varchar)
建立两个实体类User ,Dept。提供相应的getter和setter方法
public class User {
private Integer id;
private String username;
private String pwd;
//多对一
private Dept dept;
//此处省略getter/setter方法
}
public class Dept {
private Long id;
private String dname;
//...此处省略getter/setter方法
}
第一种:嵌套结果查询
在usermapper.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.example.springboot.mapper.UserMapper">
<resultMap id="queAllMap" type="com.example.springboot.domain.User">
<id property="id" column="id"/>
<result property="username" column="username"/>
<result property="pwd" column="pwd"/>
<association property="dept" column="did" javaType="com.example.springboot.domain.Dept">
<id property="id" column="d_id"/><!--根据sql查询出列,这里为了和t_user表的主键id区分,取了别名,如果不区分,结果会出错-->
<result property="dname" column="dname"/>
</association>
</resultMap>
<select id="queAll" resultMap="queAllMap">
select u.*,d.id d_id ,d.dname from t_user u left join t_dept d on u.did=d.id
</select>
</mapper>
在对应的UserMapper.java中代码
@Mapper
public interface UserMapper {
//@Select("select * from t_user")
List<User> queAll();
}
第二种:嵌套查询
<?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.example.springboot.mapper.UserMapper">
<select id="queAll" resultMap="queAllMap">
select u.*,d.id ,d.dname from t_user u left join t_dept d on u.did=d.id
</select>
<resultMap id="queAllMap" type="com.example.springboot.domain.User">
<id property="id" column="id"/>
<result property="username" column="username"/>
<result property="pwd" column="pwd"/>
<association property="dept" column="did" select="getDeptById"/>
</resultMap>
<select id="getDeptById" parameterType="Long" resultType="com.example.springboot.domain.Dept">
select * from t_dept where id=#{id}
</select>
</mapper>
还要在DeptMapper.java中添加一个方法
@Mapper
public interface DeptMapper {
@Select("select * from t_dept where id=#{id}")
Dept getDeptById(Long id);
}
对assacation标签的属性进行解释一下
- property 对象属性的名称
- javaType 对象属性的类型
- column 所对应的外键字段名称
- select 使用另一个查询封装的结果
springboot多对一关系映射的更多相关文章
- 【Java EE 学习 46】【Hibernate学习第三天】【多对多关系映射】
一.多对多关系概述 以学生和课程之间的关系为例. 1.在多对多关系中涉及到的表有三张,两张实体表,一张专门用于维护关系的表. 2.多对多关系中两个实体类中应当分别添加对方的Set集合的属性,并提供se ...
- Hibernate多对多关系映射(建表)
下边讲述Hibernate多对多关系映射. 多对多关系的表的结构为: 两个实体表,还包含一个关系表,关系表为复合主键,如果要使用Hibernate多对多关系映射,则关系表必须只包含两个字段,如果生成了 ...
- 菜鸟学习Hibernate——多对多关系映射
Hibernate中的关系映射,最常见的关系映射之一就是多对多关系映射例如用户与角色的关系,一个用户对应多个角色,一个角色对应多个用户.如图: Hibernate中如何来映射这两个的关系呢? 下面就为 ...
- Hibernate学习笔记(五) — 多对多关系映射
多对多关系映射 多对多建立关系相当于在第三张表中插入一行数据 多对多解除关系相当于在第三张表中删除一行数据 多对多改动关系相当于在第三张表中先删除后添加 多对多谁维护效率都一样.看需求 在实际开发过程 ...
- Hibernate自身一对多和多对多关系映射
一对多关系映射大家都明白,关系双方都一个含有对方多个引用,但自身一对多很多同学都不明白什么意思,那么首先我就说明一下什么是自身一对多,其实也很好理解,自身一对多就是自身含有本身的多个引用,例如新闻类别 ...
- Java基础-SSM之mybatis一对多和多对一关系映射
Java基础-SSM之mybatis一对多和多对一关系映射 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表) 1>.创建customers表: ...
- hibernate学习(5)——多对多关系映射
1.创建实体和映射 package com.alice.hibernate03.vo; import java.util.HashSet; import java.util.Set; public c ...
- Hibernate框架之双向多对多关系映射
昨天跟大家分享了Hibernate中单向的一对多.单向多对一.双向一对多的映射关系,今天跟大家分享下在Hibernate中双向的多对多的映射关系 这次我们以项目和员工举个栗子,因为大家可以想象得到,在 ...
- [Z]Spring Data JPA 之 一对一,一对多,多对多 关系映射
一.@OneToOne关系映射 JPA使用@OneToOne来标注一对一的关系. 实体 People :用户. 实体 Address:家庭住址. People 和 Address 是一对一的关系. 这 ...
随机推荐
- java方法重写规则 重载
方法的重写规则 参数列表必须完全与被重写方法的相同: 返回类型必须完全与被重写方法的返回类型相同: 访问权限不能比父类中被重写的方法的访问权限更低.例如:如果父类的一个方法被声明为public,那么在 ...
- 【NS2】TCL debug (转载)
1.使用NS2进行模拟,就不可避免的会接触TCL/OTCL和C/C++.两者配合使用.一般设置场景啊,业务流啊,都使用TCL/OTCL来编写脚 本.要进行路由实验模拟的话,同一类的实验,这些脚本基本上 ...
- ADT上跑java application
Invalid layout of java.lang.String at value## A fatal error has been detected by the Java Runtime En ...
- 阿里云亮相2019联通合作伙伴大会,边缘计算等3款云产品助力5G时代产业数字化转型
4月23日,2019中国联通合作伙伴大会在上海正式开幕,本次大会以“合作不设限,共筑新生态”为主题,涉及5G.边缘计算.云计算.物联网.新媒体.人工智能.互联网化等各领域超过600家合作伙伴与3万名各 ...
- SDUT-3331_数据结构实验之链表八:Farey序列
数据结构实验之链表八:Farey序列 Time Limit: 10 ms Memory Limit: 600 KiB Problem Description Farey序列是一个这样的序列:其第一级序 ...
- Python基础:24with语句
一:with语句 在Python 2.6 中正式引入的with语句,是用来简化代码的.这与用try-except 和try-finally所想达到的目的前后呼应.try-except 和try-fin ...
- react 问题记录
1.控制台报错: Uncaught Error: addComponentAsRefTo(...): Only a ReactOwner can have refs. You might be add ...
- 屏蔽指定地区IP访问
<?php if ($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]) { $ip = $HTTP_SERVER_VARS["HT ...
- 洛谷 2152 [SDOI2009]SuperGCD
Description Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数的GCD(最大公约 数)!因此他经常和别人比赛计算GCD.有一天Sheng bill很嚣张地找到了你,并要 ...
- sql语句列名为变量(Spring Boot+mybitis实验环境)
之前用的#{参数},在列名.表明部分一直不能成为变量.折腾了很久,结果仅仅是改为${变量}就可以了.