首页 > 其他分享 >Mybatis中Mapper映射文件

Mybatis中Mapper映射文件

时间:2023-08-29 11:07:16浏览次数:28  
标签:Mapper 映射 args param 查询 names Mybatis 加载

1)CRUD

Mybatis中Mapper映射文件_延迟加载

① 返回插入的自增长主键

Mybatis中Mapper映射文件_延迟加载_02

②Mybatis维护非自增长的主键值的插入

signed数据类型:表示有符号的数值,可以存储负数、0、正数

unsigned数据类型:表示无符号的数值,可以存储0、正数

Mybatis中Mapper映射文件_延迟加载_03

Mybatis中Mapper映射文件_延迟加载_04

2) 入参处理

Mybatis中Mapper映射文件_主键_05

Mybatis中Mapper映射文件_Mybatis_06

Mybatis中Mapper映射文件_Mybatis_07

如果传入的是对象,则直接#{对象的属性名}获取参数(常用)

如果传入的是Map,则直接通过#{map的key}获取参数

Mybatis中Mapper映射文件_Mybatis_08

3) 入参处理源码

Mybatis中Mapper映射文件_获取参数_09

public Object getNamedParams(Object[] args) {
    // names: {0=arg0, 1=arg1}    args:[70,30]
    final int paramCount = names.size();
    if (args == null || paramCount == 0) {
      return null;
    } else if (!hasParamAnnotation && paramCount == 1) {
      return args[names.firstKey()];
    } else {
      final Map<String, Object> param = new ParamMap<Object>();
      int i = 0;
      for (Map.Entry<Integer, String> entry : names.entrySet()) {
        // 把names的value作为参数map的key
// 把names的key作为args数组下标取到的值作为参数map的value
        param.put(entry.getValue(), args[entry.getKey()]);
        // add generic param names (param1, param2, ...)
        // genericParamName =param1,在参数map中一个值放了两个key:arg0 、 param1
        final String genericParamName = GENERIC_NAME_PREFIX + String.valueOf(i + 1);
        // ensure not to overwrite parameter named with @Param
        if (!names.containsValue(genericParamName)) {
          param.put(genericParamName, args[entry.getKey()]);
        }
        i++;
      }
      // {arg1=20, arg0=70, param1=70, param2=20}
      return param;
    }
  }
 

4) #{}、${}的区别

Mybatis中Mapper映射文件_延迟加载_10

5) JdbcType处理NULL值

Mybatis中Mapper映射文件_主键_11

6) 返回值类型

Mybatis中Mapper映射文件_获取参数_12

7) 映射规则

① 自动映射

Mybatis中Mapper映射文件_Mybatis_13

Mybatis中Mapper映射文件_Mybatis_14

② resultMap手动映射

Mybatis中Mapper映射文件_主键_15

Mybatis中Mapper映射文件_Mybatis_16

8) 关联关系映射N-1

① 方式一:可以通过连接查询把另一张表中的字段在当前表对应的bean中添加普通属性进行映射即可

② 方式二:在N端bean中添加1端的对象

Mybatis中Mapper映射文件_主键_17

③ 方式三:association赋值

Mybatis中Mapper映射文件_延迟加载_18

④ 方式四:分步查询

A、在N端只需根据id查询出外键列

Mybatis中Mapper映射文件_获取参数_19

B、在resultmap中配置关联属性,会把aid字段列的值传入select中的参数

Mybatis中Mapper映射文件_Mybatis_20

C、定义1端根据id查询的对象

Mybatis中Mapper映射文件_获取参数_21

Mybatis中Mapper映射文件_延迟加载_22

⑤ 延迟加载|懒加载策略

即当需要使用哪个对象时才向数据库发送sql请求

在分步查询中可以实现懒加载:

Mybatis中Mapper映射文件_Mybatis_23

9) 关联关系映射1-N

① 通过collection标签指定集合属性

Mybatis中Mapper映射文件_主键_24

② 分步查询

A、在1端配置查询

Mybatis中Mapper映射文件_获取参数_25

Mybatis中Mapper映射文件_获取参数_26

B、在N端配置根据外键列查询的集合

Mybatis中Mapper映射文件_主键_27

③ 延迟加载

和N-1的一样,在全局配置好即可

Mybatis中Mapper映射文件_主键_28

④ 延迟加载的另一个属性

Mybatis中Mapper映射文件_主键_29


标签:Mapper,映射,args,param,查询,names,Mybatis,加载
From: https://blog.51cto.com/u_16229215/7273314

相关文章

  • VMware:如何配置虚拟机与宿主机的端口映射
    一、虚拟网络编辑在VM中点击编辑-虚拟网络编辑器,然后找到类型为NAT模式的网络,点击右下角的NAT设置打开界面如下二、配置端口转发填写主机端口,虚拟机IP,虚拟机端口,保存即可。这样我们就可以将虚拟机的8008端口映射到宿主机的8008端口上然后确定->确定,待重启网络即可通过宿......
  • docker为已启动的容器添加端口映射
    针对已运行的容器添加端口映射1、查看容器是否映射端口dockerport[容器id或容器名]1有端口映射:无端口映射:2、查看容器完整Iddockerinspect[容器id]|grepId//得到以下结果//"Id":"fcae55f5180a79487662de426863565c7df05ed9b87854093b62776734928d25"......
  • 【STM32】5_1 串口通信 printf映射
    串口通信配置完成后,在主函数中添加stdio.h的头文件#include"stdio.h" 在主函数main()之前添加一下函数#ifdef__GNUC__#definePUTCHAR_PROTOTYPEint__io_putchar(intch)#else#definePUTCHAR_PROTOTYPEintfputc(intch,FILE*f)#endifPUTCHAR_PROTOTYPE{......
  • 学习mybatis连接
    1.在pom中添加mybatis,Junit依赖,以及MySQL数据库驱动在配置文件夹创建xml文件,默认名称为mybatis-config.xml在xml中配置数据库连接环境,官方文档有模板<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTDConfig3.0//EN"......
  • Spring Boot集成Mybatis-plus+hive
    运行环境jdk1.8springboot:2.7.151.在pom.xml文件中加入<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version>......
  • AutoMapper (将实体转dto 或 将dto 转成实体)
    第一步:  安装nuget包1、AutoMapper.Extensions.Microsoft.DependencyInjection(依赖注入扩展包)2、AutoMapper (核心) 第二步:创建一个类1、添加一个类文件  起名为RbacProfile.cs这样一文件2、RbacProfile需要继承 Profile 父类3、RbacProfile添加一个构造函数第三......
  • 无涯教程-进程 - 内存映射
    mmap()系统调用提供了将文件或设备映射到内存的调用进程的虚拟地址空间中的映射。这有两种类型-文件映射 - 此映射将进程的虚拟内存区域映射到文件,这意味着读取或写入那些内存区域会导致文件被读取或写入,这是默认的映射类型。匿名映射 - 此映射进程的虚拟内存区域,没有......
  • 12、整合Mybatis
    12、整合Mybatis导包<dependencies><!--https://mvnrepository.com/artifact/org.springframework/spring-webmvc--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifact......
  • hibernate——一对一映射(1)
    一对一映射本来以为挺简单的,但是一接触发现还是有些琢磨头的,但是理解之后,才会发现原来是挺简单的。一对一映射关系,也有一个主表和从表的概念,例如人和身份证就是一对一的关系,如果将IdCard的主键设为Person的主键,那么Person为主表,而IdCard为从表,这样的映射关系决定了从表不能单独存在......
  • hibernate——多对一和一对多映射浅析
    首先应该清楚多对一和一对多只是站在不同的角度看待问题,其本质是一样的。在思考这个问题的时候,不要把这两个概念混在一起,这样不容易理解,而要分开,站在不同的角度去解决同一个问题。就拿员工和部门的例子来说,我们站在不同的角度,可能会遇到如下的几种情况:站在员工的角度看,是多对一的关......