• mybatis标签详解,一篇就够了


    文章目录


    前言

    MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 的真正强大在于它的语句映射,这是它的魔力所在,使映射器的 XML 文件显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 致力于减少使用成本,让用户能更专注于 SQL 代码。

    springBoot整合myBatis完整前后端项目实例后,本文详细介绍下mybatis常用标签的使用。


    一、常用属性

    属性

    描述

    id

    在命名空间中唯一的标识符,被用来引用这条语句

    parameterType

    传入这条语句的参数的类全限定名或别名

    resultType

    期望从这条语句中返回结果的类全限定名或别名,resultType 和 resultMap 之间只能同时使用一个

    resultMap

    在命名空间中唯一的标识符,被用来引用这条语句 ,resultType 和 resultMap 之间只能同时使用一个

    flushCache

    将其设置为 true 后,只要语句被调用,都会导致本地缓存和二级缓存被清空,默认值:对于(select语句)false ;对于( insert、update 和 delete 语句)true

    useCache

    将其设置为 true 后,将会导致本条语句的结果被二级缓存缓存起来,默认值:对于(select语句)为 true

    useGeneratedKeys

    (仅适用于 insert 和 update)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系型数据库管理系统的自动递增字段),默认值:false

    keyProperty

    (仅适用于 insert 和 update)指定能够唯一识别对象的属性,MyBatis 会使用 getGeneratedKeys 的返回值或 insert 语句的 selectKey 子元素设置它的值,默认值:未设置(unset)

    二、SQL定义标签

    1. select

    用于数据查询操作,例:

    
    
    • 1
    • 2
    • 3

    2. insert

    用于数据保存操作,例:

    
      insert into user_info (
    	userName,
    	userSex
      )values(
      	#{userName},
      	#{userSex}
      )
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    PS:keyProperty属性可返回此条插入数据的主键值

    3. update

    用于数据更新操作,例:

    
      update  user_info
      set userName=#{userName}
      where id=#{keyId}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4. delete

    用于数据删除操作,例:

    
      delete  from user_info 
      where id=#{keyId}
    
    
    • 1
    • 2
    • 3
    • 4

    5. resultMap

    SQL返回与实体类映射关系信息,例:

    
      
      
    
    
    
    
    将数据表字段userName、userSex映射到实体类User的user_name、user_sex
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    6. sql

    用于定义可重用的 SQL 代码片段,以便在多个SQL语句中使用。 参数可以静态地(在加载的时候)确定下来,并且可以在不同的 include 元素中定义不同的参数值。例:

    
     ${alias}.userName,${alias}.userSex
    
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    三、SQL动态标签

    1. if

    单个条件判断,用以实现条件筛选,例:

    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    PS:此处需要注意,如果参数值为数字int型,判断是否等于某个固定值时可能会导致判断失效,例如:

    
      	……
    
    
    • 1
    • 2
    • 3

    可以修改为:

    
    
      	……
    
    
    • 1
    • 2
    • 3
    • 4

    
    
      	……
    
    
    • 1
    • 2
    • 3
    • 4

    2. foreach

    用于更新或保存数据时的批量操作,例:

    
    insert into user_info(
    userName,
    userSex
    )values
    
    (
    #{item.userName},
    #{item.userSex}
    )
    
    
    
    
    insert into user_info(
    userName
    )values
    
    (
    #{userName}
    )
    
    
    
    update user_info
    set userAge=#{userAge}
    where id in
    
    #{item}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    3. choose/when/otherwise

    用以实现条件的多种判断,类似与if else,例:

    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    4. where

    只会在子元素返回任何内容的情况下才插入 “WHERE” 子句,并且可以自动处理判断条件语句返回的第一个and或or,例:

    不使用where标签时,若userSex为空,语法错误会报错:

    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    修改为:

    
    自动转换为:select * from user_info where userName like ……
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    5. set

    可以动态更新需要更新的列,忽略其它不更新的列,例:

    
      update  user_info
      
      
      userName=#{userName},
      
      userSex=#{userSex}
      
      where id=#{keyId}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    都要2023年了,Android开发是否还值得入场?
    AtCoder Beginner Contest 276「A」「B」「C」「D 思维」「E 联通块」「F 树状数组维护期望」
    API 设计/开发/测试工具:Apifox与怎么通过拦截器
    labelImg
    Tungsten Fabric数据量过大问题处理初探
    Nacos注册中心二
    WPF控件8
    服务器的外网IP查阅方式
    EasyExcel listener无法通过Autowired注入xxMapper
    springboot快速实现多线程执行
  • 原文地址:https://blog.csdn.net/web13618542420/article/details/126112967