MyBatis一对一关系映射

1、使用的数据脚本为:

DROP DATABASE IF EXISTS mybatisdb ;
CREATE DATABASE mybatisdb CHARACTER SET UTF8 ;
USE mybatisdb ;
-- 创建数据表
CREATE TABLE member_login (
    mid         VARCHAR(50) ,
    password        VARCHAR(50) ,
    CONSTRAINT pk_mid PRIMARY KEY(mid)
) ;
CREATE TABLE member_details (
    mid         VARCHAR(50) ,
    name        VARCHAR(50) ,
    age         INT ,
    CONSTRAINT pk_mid2 PRIMARY KEY(mid) ,
    CONSTRAINT fk_mid FOREIGN KEY(mid) REFERENCES member_login(mid) ON DELETE CASCADE           
) ;

2、准备好对应的vo类

public class MemberLogin implements Serializable {
private String mid ;
private String password ;
private MemberDetails details ;
}
public class MemberDetails implements Serializable {
private String mid ;
private String name ;
private Integer age ;
private MemberLogin login ;
}
//省略set和get方法

3、准备MyBatis需要的配置文件;
创建MemberLogin.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="vo.mapping.MemberLoginNS">
    <resultMap type="MemberLogin" id="MemberLoginMap">
        <id column="mid" property="mid" />
        <result column="password" property="password" />
    </resultMap>
</mapper>

创建MemberDetails.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="vo.mapping.MemberDetailsNS">
    <resultMap type="MemberDetails" id="MemberDetailsMap">
        <id column="mid" property="mid" />
        <result column="name" property="name" />
        <result column="age" property="age" />
    </resultMap>
</mapper>

定义操作别名和映射路径

<typeAliases>
    <typeAlias type="cn.mldn.vo.MemberLogin" alias="MemberLogin"/>
    <typeAlias type="cn.mldn.vo.MemberDetails" alias="MemberDetails"/>
</typeAliases>
<mapper namespace="vo.mapping.MemberLoginNS"/>

4、一对一的关系匹配关键在于MemberLogin.xml 与MemberDetails.xml 文件上。
· 修改MemberLogin.xml 文件,追加resultMap 的映射:

<resultMap type="MemberLogin" id="MemberLoginMap">
    <id column="mid" property="mid" />
    <result column="password" property="password" />
    <association property="details" javaType="MemberDetails" column="mid" select="vo.mapping.MemberDetailsNS.findById" />
</resultMap>
MyBatis中的一对一关系映射是通过使用association元素来实现的。在给定的范例中,Person和IdCard之间的一对一关系映射成了Java对象的关系。具体来说,Person对象中有一个名为idCard的属性,该属性引用了一个IdCard对象。这个映射是通过在PersonMapper.xml文件中的resultMap元素中定义的association元素来完成的。 在association元素中,我们可以指定关联属性的名称、数据库中对应的列名,以及关联属性的类型。此外,我们还可以使用select属性来指定一个额外的SQL语句,以在查询Person对象时一起查询关联的IdCard对象。在给定的例子中,select属性的值为"com.wx.mapper.IdCardMapper.searchIdCard",表示在查询Person对象时,同时查询关联的IdCard对象。 在Java代码中调用一对一关系映射的方法可以使用MyBatis的SqlSession对象的selectOne或selectList方法。在给定的例子中,使用了selectList方法来查询id为1的Person对象,并将结果存储在名为list3的List对象中。然后使用System.out.println打印出查询结果。 总结来说,MyBatis中的一对一关系映射可以通过在resultMap中使用association元素来设置关联属性,并在查询时使用select属性来同时查询关联对象的信息。通过调用SqlSession的selectOne或selectList方法可以执行一对一关系映射的查询操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Mybatis中的一对一关系映射](https://blog.csdn.net/Altitude_/article/details/101206178)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值