MyBatis框架的关联映射

MyBatis框架的关联映射

MyBatis是一个简化数据库操作的Java框架,它能让我们通过对象来操作数据库,而不是直接编写SQL.

关联映射主要用于处理表之间的关系

关于MyBatis的关联映射,以下是简要说明

关联映射

一对一(association)

用途:用来表示两个表之间的一个记录对应一个记录的关系,比如用户和用户详细信息。

表结构示例

users表:存储用户基本信息

user_details表:存储用户的详细信息(地址,电话等)

外键:在user_details表中,user_id是外键,表示这个详细信息是属于哪个用户的。
用于两个表之间一对一的关系。

可以通过<association>元素定义。

例如,用户表和用户详细信息表的关联

假设有两个表:user(用户表)和user_details(用户详细表),其中每个用户都有对应的详细信息

表结构:

CREATE TABLE users(
    id INT PRIMARY KEY,
    username VARCHAR(100)
);

CREATE TABLE user_details(
    id INT PRIMARY KEY,
    user_id INT,
    address VARCHAR(255),
    phone(VARCHAR(15),
    FOREING KEY (user_id) REFERENCES users(id)
);

MyBatis配置 

<resultMap id="userResultMap" type="User">
    <id property="id" column="id"/>
    <result property="username" column="username"/>
    <association property="userDetails" column="id"
            select="selectUserDetailsByUserId"/>
</resultMap>

<select id="selectUserById" resultMap="userResultMap">
    SELECT * FROM users WHERE id = #{id}
</selecy>

<select id="selectUserDetailsByUserId" resultType="UserDetails">
    SELECT * FORM user_dateils WHERE user_id = #{userId}
</select>

resultMap定义了如何将数据库的记录映射到Java对象

association表示用户和用户详细信息之间的关系。 

一对多(collenction) 

用途:表示一个用户可以有多个订单

表结构示例:

orders表:存储每个订单的信息,包含一个user_id字段,指向用户。

适用于一个表与多个记录的关联,使用<collection>元素。

例如,用户与其订单之间的关系

假设一个用户可以有多个订单

表结构:

CREATE TABLE orders{
    id INT PRIMARY KEY,
    user_id INT,
    order_number VARCHAR(100),
    FOREING KEY (user_id) REFERENCES users(id)
);

MyBatis配置
 

<resultMap id="userWithOrdersMap" type="User"/>
    <id property="id" column="id"/>
    <result property="username" column="username"/>
    <collection property="orders" ofType="Order"
                column="id" select="selectOrdersByUserId"/>
</resultMap>

<select id="selectUserWithOrders" resultMap="userWithOrdersMap"?
    SELECT * FROM users WHERE id = #{id}
</select>

<select id="selectOrdersByUserId" resultType="Order">
    SELECT * FROM orders WHERE user_id = #{userId}

collection表示一个用户可以有多个订单,ofTypr指定了订单类型 

多对多(collection)

用途:表示用户和角色之间的关系,每个用户可以有多个角色,每个角色也可以有多个用户。

表结构示例

roles表:存储角色信息

user_roles表:是中间表,存储用户与角色的关系

涉及两个表的多对多关系,通常需要中间表来管理,可以通过<collection>定义在关联的结果集中

假设用户可以拥有多个角色,角色也可以被多个用户拥有

CREATE TABLE roles{
    id INT PRIMARY KEY,
    role_name VARCHAR(100)
};

CREATE TABLE user_roles{
    user_id INT,
    role_id INT,
    PRiMARY KEY (user_id,role_id),
    FOREIGN KEY(user_id) REFERENCES users(id),
    FOREING KEY (role_id) REFERENCES roles(id)
);

MyBatis配置

<resultMap id="userWithRoleMap" type="User"/>
    <id property="id" column="id"/>
    <resultn property="username" column="username"/>
    <collection property="roles" ofType="ROle"
                column="id" select="selectRolesByUserId"/>
</resultMap>

<select id="selectUserWithRoles" resultMap="userWithRolesMap">
    SELECT * FROM users WHERE id = #{id}
</select>

<select id="selectRolesByUserId" resultType="Role">
    SELECT r.*FROM rolse r
    JOIN user user_roles ur ON r.id = ur.role_id
    WHERE ur.user_id = #{userId}
</select>

 resultMap自动映射级别:

MyBatis支持自动映射,具体级别包括基础属性映射和复杂类型映射。

可以通过<resultMap>自定义映射关系,提供灵活性

MyBatis的resultMap提供了不同的映射方式,可以通过以下方式进行自定义:

基础属性映射:直接使用<result>元素将列与对象属性映射

复杂类型映射:使用<association>和<collection>处理复杂对象和集合。

小结

外键用于表示表之间的关系,确保数据的一致性

resultMap定义了如何将数据库中的数据转换为Java对象

关联映射允许我们通过对象来服务和操作相关的数据

MyBatis的关联映射功能非常强大,可以灵活地处理不同类型的关系,提供了清晰的数据访问层设计。
实际是干嘛的?
好的,让我们来明确一下MyBatis的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值