Blage's Coding Blage's Coding
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
  • MySQL

  • ORM框架

    • Mybatis
      • 1.Mybatis标签
      • 2.mybatis标签
      • 3.Mybatis拦截器
      • 4.Mybatis驼峰与lombok
    • Mybatis_Plus
  • 数据库
  • ORM框架
phan
2023-05-15
目录

Mybatis

# Mybatis

# 1.Mybatis<where>标签

Mybatis的<where>标签结合<if>标签使用(替代1=1,优化过滤需要MySQL做,减轻压力):①子句开头为and或者or时,where标签会自动把它剔除。②至少一个if标签有内容才会插入where子句。

好处:sql语句复用,涵盖指定条件查询和全表查询(查所有)两种查询情况,repository层不需要做null判断。

<where>
    <if test="data != null and data.systemId != ''">
        and system_id = #{data.systemId}
    </if>
    <if test="data != null and data.interfaceId != ''">
        and interface_id = #{data.interfaceId}
    </if>
</where>
1
2
3
4
5
6
7
8

# 2.mybatis<foreach>标签

mybatis实现可以通过<foreach>标签,实现把dao形参里的list集合插入到表中。好处在于高效,只用从连接池获取一次连接执行一条sql语句。

<insert id="insertList" parameterType="java.util.List">
        INSERT INTO award(award_id, award_type, award_name, award_content, create_time, update_time)
        VALUES
        <foreach collection="list" item="item" index="index" separator=",">
            (
            #{item.awardId},
            #{item.awardType},
            #{item.awardName},
            #{item.awardContent},
            NOW(),
            NOW()
            )
        </foreach>
</insert>
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 3.Mybatis拦截器

Mybatis可以拦截的四大对象如下:

  • Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)拦截执行器(查询缓存,数据库操作,事务管理)
  • ParameterHandler (getParameterObject, setParameters)拦截sql语句参数处理(给sql语句动态赋值具体实现,也就是#{}里面的参数)
  • ResultSetHandler (handleResultSets, handleOutputParameters)拦截结果集处理和组装(resulttype将结果映射成响应的结果对象)
  • StatementHandler (prepare, parameterize, batch, update, query)拦截sql语法构建的处理(创建封装statement对象。parameterize调用parameterhandler类方法对sql站位符进行赋值。prepare方法根据Connection连接获取statement对象)

MappedStatement:对mapper.xml某个sql方法的封装,相当于一个sql语句,通过Invocation 对象的 getArgs() 方法获取到,getArgs()[1]表示传入sql语句第二个参数。

delegate.mappedStatement:存储映射语句信息。映射语句定义了该执行哪个curd操作,以及sql语句与java对象如何映射。

# 4.Mybatis驼峰与lombok

  • Mybatis中的配置文件只能指定一份,要么在spring的yml中configuration下添加所有的配置,要么在资源文件下创建mybatis-config.xml文件,所有配置添加里面,并用config-location指明位置。否则会报错
  • uId字段使用lombok@Data注解后,mybatis开启驼峰导致数据库接收不到数据。原因是当使用@Data注解时,自动生成的setter,getter方法为getUId,不符合javaBean规范。 解决方法是遇到第二个字母大写的字段一定要重写getter,setter方法。
编辑 (opens new window)
#Mybatis
上次更新: 2023/12/15, 15:49:57
MySQL面试
Mybatis_Plus

← MySQL面试 Mybatis_Plus→

Theme by Vdoing | Copyright © 2023-2024 blageCoder
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式