原文: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 使用另一个查询封装的结果