返回顶部
首页 > 资讯 > 后端开发 > Python >【MyBatis】自定义resultMap三种映射关系
  • 566
分享到

【MyBatis】自定义resultMap三种映射关系

mybatisjava后端数据库sqlmaven 2023-09-03 12:09:41 566人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录 一、一对一映射(One-to-One) 1.1 表关系 1.2 resultMap设置自定义映射  二、一对多映射(One-to-Many) 2.1 创建实体 2.2 级联方式处理映射关系 2.3 定义SQL 2.4 OrderMap

目录

一、一对一映射(One-to-One)

1.1 表关系

1.2 resultMap设置自定义映射 

二、一对多映射(One-to-Many)

2.1 创建实体

2.2 级联方式处理映射关系

2.3 定义SQL

2.4 OrderMapper接口

2.5 编写业务逻辑层

2.6 Junit测试

三、多对多映射(Many-to-Many)

3.1 表关系

3.2 创建实体

3.3 处理映射关系、定义sql

3.4 HBookMapper 接口

3.5 编写业务逻辑层

3.6 Junit测试


一、一对一映射(One-to-One)

1.1 表关系

         一对一映射是指一个对象与另一个对象具有一对一的关系。例如,一个用户(User)与一个地址(Address)之间的关系。假设我们有以下表结构:

user 表:

id (int)name (varchar)address_id (int)

address 表:

id (int)street (varchar)city (varchar)

首先,创建 User 和 Address 实体类:

User.java

public class User {    private int id;    private String name;    private Address address;    // getters and setters}

Address.java

public class Address {    private int id;    private String street;    private String city;    // getters and setters}

接下来,创建一个 resultMap 进行一对一映射:

1.2 resultMap设置自定义映射 

UserMapper.xml

            //一对一关系使用association                                

属性:

  • id:表示自定义映射的唯一标识
  • type:查询的数据要映射的实体类的类型

子标签:

  • id:设置主键的映射关系
  • result:设置普通字段的映射关系
  • association :设置多对一的映射关系
  • collection:设置一对多的映射关系

子标签属性:

  • property:设置映射关系中实体类中的属性名
  • column:设置映射关系中表中的字段名

最后,编写一个查询方法来使用这个 resultMap: 

UserMapper.xml

    SELECT u.id, u.name, a.id as address_id, a.street, a.city    FROM user u    INNER JOIN address a ON u.address_id = a.id    WHERE u.id = #{id}

        最后实现接口findUserWithAddress方法测试即可,通过以上简单的案例,我相信你已经明白自定义关系映射了。往往实际开发中数据和表是要复杂的多,进阶用法请看以下示例:

二、一对多映射(One-to-Many)

        一对多映射是指一个对象与多个对象具有一对多的关系。例如,一个订单(Oeder)与一个订单详情(OrderItem)之间的关系。假设我们有以下表结构:

2.1 创建实体

 利用mybatis逆向工程(generatorConfig.xml)生成模型层代码 :

   创建 OrderVo 它是一个值对象(Value Object),继承 Order 类并添加了一个额外的属性 orderItems。该类用于在应用程序的各个层之间传递数据,尤其是在表示层和业务逻辑层之间。在这个例子中,OrderVo 类用于表示一个订单及其关联的订单项。

package com.ycxw.vo;import com.ycxw.model.Order;import com.ycxw.model.OrderItem;import lombok.Data;import java.util.ArrayList;import java.util.List;@Datapublic class OrderVo extends Order {    private List orderItems = new ArrayList<>();}

2.2 级联方式处理映射关系

                            //多关系使用collection                                                                    

2.3 定义sql

        SELECT      *    FROM      t_hibernate_book b,      t_hibernate_category c,      t_hibernate_book_category bc    WHERE      b.book_id = bc.bid      AND c.category_id = bc.bcid      AND b.book_id = #{bid}  

3.4 HBookMapper 接口

HBookVo selectByBookId(@Param("bid") Integer bid);

3.5 编写业务逻辑层

HBookBiz 接口
package com.ycxw.biz;import com.ycxw.vo.HBookVo;public interface HBookBiz {    HBookVo selectByBookId(Integer bid);}
HBookBizImpl 接口实现类
package com.ycxw.biz.impl;import com.ycxw.biz.HBookBiz;import com.ycxw.mapper.HBookMapper;import com.ycxw.vo.HBookVo;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Servicepublic class HBookBizImpl implements HBookBiz {    @Autowired    private HBookMapper hBookMapper;    @Override    public HBookVo selectByBookId(Integer bid) {        return hBookMapper.selectByBookId(bid);    }}

3.6 Junit测试

package com.ycxw.biz.impl;import com.ycxw.biz.HBookBiz;import com.ycxw.vo.HBookVo;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = {"classpath:spring-mybatis.xml"})public class OrderBizImplTest {    @Autowired    private HBookBiz hBookBiz;    @Test    public void selectByBookId(){        HBookVo hBookVo = hBookBiz.selectByBookId(22);        //数据所有信息        System.out.println(hBookVo);        //书籍有关的类别        System.out.println(hBookVo.getBookc());    }}

 反之亦然,如:根据类别id查找书籍信息

                                       

测试运行:

来源地址:https://blog.csdn.net/Justw320/article/details/132512497

--结束END--

本文标题: 【MyBatis】自定义resultMap三种映射关系

本文链接: https://lsjlt.com/news/392227.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作