【Mybatis用法】Mybatis框架中一对一,一对多association和collection的使用举例方法

简介: 【Mybatis用法】Mybatis框架中一对一,一对多association和collection的使用举例方法

一、association 标签(一对一)

association通常用来映射一对一的关系,例如,有个类User,对应的实体类如下:(getter,setter方法省略)

@Data
public class User {
    /**
     * 主键
     */
    private String id;
    /**
     * 用户姓名
     */
    private String userName;
}

有个类Article,对应的实体类如下:

@Data
public class Article {
    /**
     * 主键
     */
    private String id;
    /**
     * 文章标题
     */
    private String articleTitle;
    /**
     * 文章内容
     */
    private String articleContent;
}

如果我想查询一个用户的时候,也查到他写的一篇文章,那么怎样写呢?其实可以在类User中加入一个属性Article类:

@Data
public class User {
    /**
     * 主键
     */
    private String id;
    /**
     * 用户姓名
     */
    private String userName;
    /**
     * 类Article
     */
    private Article article;
}

mapper.xml 我在user类的UserMapper.xml这样配置

<mapper namespace="com.uiot.practice.mysqltest.dao.UserMapper">
  <resultMap type="com.uiot.practice.mysqltest.entity.Article" id="articleMap">
    <id column="id" property="id" jdbcType="VARCHAR" javaType="java.lang.String"/>
    <result column="userName" property="userName" jdbcType="VARCHAR" javaType="java.lang.String"/>
    <!--这里把user的id传过去,com.uiot.practice.mysqltest为命名空间-->
    <association property="article" column="id" select="com.uiot.practice.mysqltest.selectArticleByUserId" />
  </resultMap>
</mapper>

同时,我的article对应的ArticleMapper.xml这样写:

<mapper namespace="com.uiot.practice.mysqltest.dao.ArticleMapper">
    <resultMap type="com.uiot.practice.mysqltest.entity.Article" id="ArticleResultMap">
        <id column="id" property="id" jdbcType="VARCHAR" javaType="java.lang.String"/>
        <result column="articleTitle" property="articleTitle" jdbcType="VARCHAR" javaType="java.lang.String"/>
        <result column="articleContent" property="articleContent" jdbcType="VARCHAR" javaType="java.lang.String"/>
    </resultMap>
    <select id="selectArticleByUserId" parameterType="java.lang.String" resultMap="ArticleResultMap">
        select * from tb_article where userId=#{userId}
    </select>
</mapper>

二、collection 标签(一对多)

一对多,collection,理解了一对一,一对多容易理解

@Data
public class User {
    /**
     * 主键
     */
    private String id;
    /**
     * 用户姓名
     */
    private String userName;
    /**
     * 类Article
     */
    private List<Article> articleList;
}

UserMapper.xml这样配置

<mapper namespace="com.uiot.practice.mysqltest.dao.UserMapper">
  <resultMap type="com.uiot.practice.mysqltest.entity.User" id="articleMap">
    <id column="id" property="id" jdbcType="VARCHAR" javaType="java.lang.String"/>
    <result column="userName" property="userName" jdbcType="VARCHAR" javaType="java.lang.String"/>
    <!--这里把user的id传过去,com.uiot.practice.mysqltest为命名空间-->
    <collection property="articleList" column="id" select="com.uiot.practice.mysqltest.selectArticleByUserId"/>
  </resultMap>
  <!--以下省略,类同,Mybatis会把结果封装成List类型。-->
</mapper>

 

完结!


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
SQL XML Java
432 0
|
11月前
|
SQL Java 数据库连接
区分iBatis与MyBatis:两个Java数据库框架的比较
总结起来:虽然从技术角度看,iBATIS已经停止更新但仍然可用;然而考虑到长期项目健康度及未来可能需求变化情况下MYBATISS无疑会是一个更佳选择因其具备良好生命周期管理机制同时也因为社区力量背书确保问题修复新特征添加速度快捷有效.
880 12
|
SQL XML Java
MyBatis框架如何处理字符串相等的判断条件。
总的来说,MyBatis框架提供了灵活而强大的机制来处理SQL语句中的字符串相等判断条件。无论是简单的等值判断,还是复杂的条件逻辑,MyBatis都能通过其标签和属性来实现,使得动态SQL的编写既安全又高效。
823 0
|
Oracle 关系型数据库 Java
|
SQL 缓存 Java
框架源码私享笔记(02)Mybatis核心框架原理 | 一条SQL透析核心组件功能特性
本文详细解构了MyBatis的工作机制,包括解析配置、创建连接、执行SQL、结果封装和关闭连接等步骤。文章还介绍了MyBatis的五大核心功能特性:支持动态SQL、缓存机制(一级和二级缓存)、插件扩展、延迟加载和SQL注解,帮助读者深入了解其高效灵活的设计理念。
|
SQL Java 数据库连接
对Spring、SpringMVC、MyBatis框架的介绍与解释
Spring 框架提供了全面的基础设施支持,Spring MVC 专注于 Web 层的开发,而 MyBatis 则是一个高效的持久层框架。这三个框架结合使用,可以显著提升 Java 企业级应用的开发效率和质量。通过理解它们的核心特性和使用方法,开发者可以更好地构建和维护复杂的应用程序。
1036 29
|
SQL Java 数据库连接
MyBatis-Plus的几种常见用法
MyBatis-Plus 为 MyBatis 提供了许多增强功能,使得开发更加便捷高效。通过基础的 CRUD 操作、条件构造器、分页插件和自动填充等功能,开发者可以显著减少代码量,提高开发效率。在实际应用中,根据具体需求选择合适的功能模块,能够更好地利用 MyBatis-Plus 提升项目开发效率。
540 22
|
XML Java 数据库连接
Mybatis一对一,一对多关联查询
## MyBatis一对一、一对多关联查询详解 MyBatis是一款优秀的持久层框架,提供了灵活的SQL映射功能,支持复杂的数据库操作。本文将详细介绍MyBatis中一对一和一对多关联查询的实现。 ### 一对一关联查询 一对一关联关系指的是一个表中的一条记录与另一个表中的一条记录相关联。例如,一个用户有一个地址信息。 #### 数据库表设计 假设有两个表:`user`和 `address`。 ``` CREATE TABLE user ( id INT PRIMARY KEY, name VARCHAR(50) ); CREATE TABLE address
625 18
|
SQL Java 数据库连接
MyBatis-Plus高级用法:最优化持久层开发
MyBatis-Plus 通过简化常见的持久层开发任务,提高了开发效率和代码的可维护性。通过合理使用条件构造器、分页插件、逻辑删除和代码生成器等高级功能,可以进一步优化持久层开发,提升系统性能和稳定性。掌握这些高级用法和最佳实践,有助于开发者构建高效、稳定和可扩展的企业级应用。
1037 13
|
SQL Java 数据库连接
持久层框架MyBatisPlus
持久层框架MyBatisPlus
576 1
持久层框架MyBatisPlus