王小白 Mybatis(4)关联 一对一 一对多

一对一关联

<association></association> 表示一对一关系
举例:
<resultMap type="包名" id="basicMap">
		<association 
			property="dept" 
			column="deptno" 
			select="方法名">
		</association>
	</resultMap>
	<select id="getById" resultMap="basicMap">
		select * from emp where empno = #{empno}
	</select>

补充一个内容:

列名和属性名不一致

<resultMap></resultMap>标签
<resultMap type="包名" id="basicMap">
		<id column="***" property="***" />
		<result column="***" property="***"/>
		<result column="***" property="***"/>
</resultMap>

<id>:用来映射标识列(数据库中的主键列)
<result>:用来映射普通的结果(非主键列)
column:列名
property:属性名

补充完内容咱们再看上文的一对一关联

完整版:尤其注意标签的一行,其中 property是在实体类中的成员变量:
在Emp(员工类)中 有一个 Dept类型的成员变量,所以这个地方要这么写。

<resultMap type="com.neu.po.Emp" id="basicMap">
		<id column="empno" property="empno"></id>
		<result column="job" property="job"/>
		<result column="mgr" property="mgr"/>
		<result column="hiredate" property="hiredate"/>
		<result column="sal" property="sal"/>
		<result column="comm" property="comm"/>
		<result column="ename" property="ename"/>		
		<association property="dept" javaType="com.neu.po.Dept">
			<id column="deptno" property="deptno"></id>
			<result column="dname" property="dname"/>
			<result column="loc" property="loc"/>
		</association>
	</resultMap>
	<select id="getById" resultMap="basicMap">
		SELECT e.*,d.dname,d.loc
		FROM emp e LEFT JOIN dept d
		ON e.deptno = d.deptno
		WHERE e.empno = #{empno}
	</select>

一对多关联

<collection></collection>
大家主要关注含有该标签的行数

下面给出java创建的实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Dept {
	private Integer deptno;
	private String dname1;
	private String loc;	
	//表示该部门的所有员工
	List<Emp> emps;
}

注:
@Data
@AllArgsConstructor (含有全部参数构造)
@NoArgsConstructor ( 无参构造)
这三个标签:是通过引用lomok包后使用的注解,
lomok大幅度精简了代码,通过注解的方式,缩减代码行数
其中引入lomok包通过pom.xml配置

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.20</version>
    <scope>provided</scope>
</dependency>

第一种:用<resultMap>
标签来映射所有属性

<resultMap type="com.neu.po.Dept" id="basicMap">
		<id column="deptno" property="deptno" />
		<result column="dname" property="dname"/>
		<result column="loc" property="loc"/>
		<collection property="emps" ofType="com.neu.po.Emp">
			<id column="empno" property="empno"></id>
			<result column="job" property="job"/>
			<result column="mgr" property="mgr"/>
			<result column="hiredate" property="hiredate"/>
			<result column="sal" property="sal"/>
			<result column="comm" property="comm"/>
			<result column="ename" property="ename"/>
		</collection>
	</resultMap>
	<select id="getById" resultMap="basicMap">
		SELECT e.*,d.dname,d.loc
		FROM emp e LEFT JOIN dept d
		ON e.deptno = d.deptno
		WHERE e.deptno = #{deptno}
	</select>

第二种:通过select属性来进行方法的调用,映射其他Mapper文件中的已写好的查询方法进行实现。

<resultMap type="com.neu.po.Dept" id="basicMap">
		<id column="deptno" property="deptno" />
		<result column="dname" property="dname1"/>
		<!-- <result column="loc" property="loc"/> -->
		<collection 
			property="emps" 
			column="deptno" 
select="com.neu.mapper.EmpMapper.getByDeptno">
		</collection>
</resultMap>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值