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

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 3 <mapper namespace="com.example.springboot.mapper.UserMapper">
 4     <resultMap id="queAllMap" type="com.example.springboot.domain.User">
 5         <id property="id" column="id"/>
 6         <result property="username" column="username"/>
 7         <result property="pwd" column="pwd"/>
 8         <association property="dept" column="did" javaType="com.example.springboot.domain.Dept">
 9             <id property="id" column="d_id"/><!--根据sql查询出列,这里为了和t_user表的主键id区分,取了别名,如果不区分,结果会出错-->
10             <result property="dname" column="dname"/>
11         </association>
12     </resultMap>
13     <select id="queAll" resultMap="queAllMap">
14         select u.*,d.id d_id ,d.dname from t_user u left join t_dept d on u.did=d.id
15     </select>
16 </mapper>

在对应的UserMapper.java中代码

@Mapper
public interface UserMapper {
    //@Select("select * from t_user")
    List<User> queAll();
}

第二种:嵌套查询

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 3 <mapper namespace="com.example.springboot.mapper.UserMapper">
 4     <select id="queAll" resultMap="queAllMap">
 5         select u.*,d.id ,d.dname from t_user u left join t_dept d on u.did=d.id
 6     </select>
 7     <resultMap id="queAllMap" type="com.example.springboot.domain.User">
 8         <id property="id" column="id"/>
 9         <result property="username" column="username"/>
10         <result property="pwd" column="pwd"/>
11         <association property="dept" column="did" select="getDeptById"/>
12     </resultMap>
13     <select id="getDeptById" parameterType="Long" resultType="com.example.springboot.domain.Dept">
14         select * from t_dept where id=#{id}
15     </select>
16 </mapper>

还要在DeptMapper.java中添加一个方法

@Mapper
public interface DeptMapper {
    @Select("select * from t_dept where id=#{id}")
    Dept getDeptById(Long id);
}

对assacation标签的属性进行解释一下

  •   property      对象属性的名称
  •   javaType     对象属性的类型
  •   column        所对应的外键字段名称
  •   select          使用另一个查询封装的结果
posted @ 2019-07-07 16:21  爱你如初  阅读(1552)  评论(0编辑  收藏  举报