MyBatis对象关系映射、多表关系

本文介绍了MyBatis的ORM概念,详细阐述了如何通过resultMap处理属性和字段的映射,以及MyBatisPlus中注解的应用,包括@TableName、@TableId和@TableField。此外,还解析了一对一、一对多关系的映射步骤,并给出了具体的案例分析。
摘要由CSDN通过智能技术生成
在昨天总结完java反射和注解后突然对ORM有了新的认知,希望可以帮助自己和有缘人更深刻的理解MyBatis。

MyBatis对象关系映射

  • 名:Object Relational Mapping,简称ORM
  • 通俗解释:使用Java语言操作数据库CRUD(增删改查)数据时,需要将数据库查询出来的表中数据(也称做元数据)存放在”List<复杂对象>“这样的一个集合中,而这个自定义的复杂java对象被称为 实体类POJO、Entity、JavaBean等等。
  • 作用:对象关系映射就是解决了实体类和数据库表的对应关系。
  • 具体体现:
  1. MyBatis:
    在mapper文件的resultMap标签中解决pojo类属性和查询字段对应关系,resultType属性解决了查询结果对应的pojo类。
  2. MyBatisPlus:
    注解@TableName(“TableName”)解决了pojo和java表的对应,注解@TableId(“PrimaryKey”)解决了主键指定,注解@TableField(“ColumnName”)解决了pojo属性和表字段的对应

ORM实现:🐖当查询的字段名称和实体类属e性名称一致时可以自动映射。
不一致时使用< ResultMap >来进行指定,更多的场景应用于复杂查询。如一对一assocation、一对多collection、多对多collection。

步骤

一对一:一个A对应一个B
  1. 数据库中A的一条数据中存有B数据的主键
  2. pojoA类中添加类B属性
  3. A的Mapper文件中编写sql语句
  4. 编写resultMap标签将sql中要查询的字段和类中的字段进行对应,对于对象B的对应使用assocation标签
    一对多和多对多步骤一致

具体案例

一对多
背景:
项目表:一个项目可以有不同年限,不同年限的计划值不同。
计划值表:一个计划值对应一个项目
关系:一对多关系。

  1. 表字段展示:
    tb_project
    在这里插入图片描述
    tb_message:projectid为tb_project表的id外键(应当命名为projectId)
    在这里插入图片描述
  2. pojo展示
package yh.com.pojo;
//一
public class Project {
   
    private Integer id;
    private String company;
    private String name;
    private String properties;
    private List<Message> mLists;
    //get、set、toString方法
}
//多
public class Message {
   
    private int id;
    private String year;
    private double value;
    private int projectid;
    //get、set、toString方法
}
  1. Project类的Mapper文件展示
//mapper文件头文件,复制即可
<?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标签,指定命名空间,即对应哪个dao接口。crud标签的id和dao接口中的抽象方法的名称一致即可。
<mapper namespace="yh.com.dao.ProjectMapper">
    <resultMap id="oneToMany" type="yh.com.pojo.Project">
    //普通字段的映射
        <id column="id" property="id
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值