Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何在mybatis xml文件中定义局部变量?

如何在mybatis xml文件中定义局部变量?

作者头像
索码理
发布于 2022-12-28 06:59:42
发布于 2022-12-28 06:59:42
3.4K00
代码可运行
举报
文章被收录于专栏:索码理索码理
运行总次数:0
代码可运行

mybatis定义全局变量只需要配置一下即可,那如何在mybatis xml文件中定义局部变量呢?这就需要使用<bind>标签了。

「bind」标签允许你在 OGNL 表达式以外创建一个变量,并将其绑定到当前的上下文。通俗来讲它就是声明了一个局部变量,它的优先级是高于其他语句的。

格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<bind name="name" value="value"/>
  • name:定义的变量名称
  • value:value是一个具体的值,它可以是入参,也可以是一个表达式,比如:判断条件

举例

UserInfo实体类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class UserInfo {
    private Long id;
    private String gender;
    private String name;
    private Date createDate;
}

不使用「bind」标签的SQL语句

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<select id="bindTest" resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List" />
    from users
    <where>
        <choose>
            <when test="minId != null and minId > 0 and maxId != null and maxId > 0">
                and id between #{minId} and #{maxId}
            </when>
            <otherwise>
                <if test="minId != null and minId > 0">
                    and id &gt;= #{minId}
                </if>
            </otherwise>
        </choose>
        <if test="username != null and username.trim() != ''">
            and name like concat('%' , #{username} , '%')
        </if>
    </where>
</select>

测试类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Test
public void testBind(){
    SqlSession sqlSession = sqlSessionFactory.openSession();
    UserInfoMapper userInfoMapper = sqlSession.getMapper(UserInfoMapper.class);
    List<UserInfo> userInfos = userInfoMapper.bindTest(1L , 10L, "0");
    System.out.println(userInfos);
}

运行测试类,打印的SQL语句:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sql=select Id, gender , name , create_date from users WHERE id between 1 and 10 and name like concat('%' , '0' , '%')

修改成使用「bind」标签的SQL语句:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<select id="bindTest" resultMap="BaseResultMap">
   <bind name="minIdFlag" value="minId != null and minId > 0"/>
    <bind name="maxIdFlag" value="maxId != null and maxId > 0"/>
    <bind name="usernameLike" value="'%' + username + '%'"/>
    
    select
    <include refid="Base_Column_List" />
    from users
    <where>
        <choose>
            <when test="minIdFlag and maxIdFlag">
                and id between #{minId} and #{maxId}
            </when>
            <otherwise>
                <if test="minIdFlag">
                    and id &gt;= #{minId}
                </if>
            </otherwise>
        </choose>
        <if test="username != null and username.trim() != ''">
            and name like #{usernameLike}
        </if>
    </where>
</select>

运行测试类,打印SQL如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sql=select Id, gender , name , create_date from users WHERE id between 1 and 10 and name like '%0%'

对比一下可以发现使用<bind>标签前后的sql语句都是一样的,也说明<bind>标签替换成功。

注意事项

  • 「bind」标签的value不能为null
  • 「bind」标签name最好不要使用点·进行赋值操作,如果使用的话直接取值是没问题的, 但是如果在<if><when>等标签中使用时会报no getter xx异常。

本篇简单介绍了一下<bind>标签的使用,希望对你有用。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 索码理 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
mybatis常用标签,详细总结
if标签通常用于WHERE语句、UPDATE语句、INSERT语句中,通过判断参数值来决定是否使用某个查询条件、判断是否更新某一个字段、判断是否插入某个字段的值。
Java编程指南
2019/10/30
2.2K0
mybatis常用标签,详细总结
【MyBatis-2】MyBatis之xml 配置版
MyBatis 是一款标准的 ORM 框架,被广泛的应用于各企业开发中。MyBatis 支持普通的 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索封装。MaBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
云深i不知处
2020/09/16
5330
MyBatis动态SQL(认真看看, 以后写SQL就爽多了)
MyBatis 令人喜欢的一大特性就是动态 SQL。 在使用 JDBC 的过程中, 根据条件进行 SQL 的拼接是很麻烦且很容易出错的。 MyBatis 动态 SQL 的出现, 解决了这个麻烦。
用户1093975
2019/03/08
1.9K1
你真的会写mybatis.xml吗?养成好习惯写养眼好用的xml
我们使用mybatis无非就是进行一些增删改查的操作,但是简单的增删改查想要写好却大有门道。
我的小熊不见了丶
2019/05/23
1.3K0
MyBatis动态SQL
传统的使用JDBC的方法,相信大家在组合复杂的的SQL语句的时候,需要去拼接,稍不注意哪怕少了个空格,都会导致错误。MyBatis的动态SQL功能正是为了解决这种问题, 其通过 if、choose、when、otherwise、trim、where、set、foreach和bind等9种标签,可组合成非常灵活的SQL语句,从而提高开发人员的效率。
用户10358987
2024/04/23
1720
别再手动拼接 SQL 了,MyBatis 动态 SQL 写法应有尽有,建议收藏!
动态 SQL 是 MyBatis 的强大特性之一。在 JDBC 或其它类似的框架中,开发人员通常需要手动拼接 SQL 语句。根据不同的条件拼接 SQL 语句是一件极其痛苦的工作。
程序员蜗牛
2024/03/16
1.7K1
别再手动拼接 SQL 了,MyBatis 动态 SQL 写法应有尽有,建议收藏!
Mybatis编程式开发实战
1.API方式 SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。 如下面代码块中的com.gupaoedu.mapper.BlogMapper.selectBlogById
名字是乱打的
2021/12/22
3260
Mybatis编程式开发实战
MyBatis 源码学习笔记(二)- MyBatis 进阶(Part A)
将MyBatis 源码学习笔记(一)- MyBatis概述中创建的mybatis-quick-start工程拷贝并重命名为mybatis-intermediate。
RiemannHypothesis
2022/08/19
1.3K0
MyBatis 源码学习笔记(二)- MyBatis 进阶(Part A)
Maven搭建SpringMVC+Mybatis项目详解
最近比较闲,复习搭建一下项目,这次主要使用spring+SpringMVC+Mybatis。项目持久层使用Mybatis3,控制层使用SpringMVC4.1,使用Spring4.1管理控制器,数据库连接池使用druid数据源,该项数据库暂使用MySQL。(如果是Oracle需修改pom.xml)
yaohong
2019/09/11
6550
数据层框架应用--Mybatis(一) 基于XML映射文件实现数据的CRUD
SqlSessionFactory是MyBatis框架中十分重要的对象,它是单个数据库映射关系经过编译后的内存镜像,其主要作用是创建SqlSession。
lomtom
2021/10/27
9250
数据层框架应用--Mybatis(一) 基于XML映射文件实现数据的CRUD
Java从入门到精通二十一(Mybatis框架)
框架就是一个软件的半成品,许多实现的细节都已经实现。主要的功能就是可以帮助我们减少繁琐重复的操作。 Mybatis就是用来简化JDBC的开发,简化一些繁琐的操作。
兰舟千帆
2022/07/16
4670
Java从入门到精通二十一(Mybatis框架)
mybatis 使用经验小结
一、多数据源问题 主要思路是把dataSource、sqlSesstionFactory、MapperScannerConfigurer在配置中区分开,各Mapper对应的包名、类名区分开 1 <?
菩提树下的杨过
2018/01/19
1.1K0
mybatis 使用经验小结
【Mybatis】探秘 Mybatis:解锁数据库增删查改的密码,驱动数据变革新征程
第一步:首先新建一个Mapper类的包,主要用于存放这里的mapper接口,是 Mybatis 进行数据库操作的关键环节,是Mybatis对于数据库操作的重要一环,对应这对数据库的CRUD;
用户11288949
2025/01/17
1250
【Mybatis】探秘 Mybatis:解锁数据库增删查改的密码,驱动数据变革新征程
SpringBoot入门建站全系列(十九)集成Activiti做工作流
Activiti作为一个流行的开源工作流引擎,正在不断发展,其6.0版本以API形式提供服务,而之前版本基本都是要求我们的应用以JDK方式与其交互,只能将其携带到我们的应用中,而API方式则可以服务器独立运行方式,能够形成一个专网内工作流引擎资源共享的方式。
品茗IT
2019/08/23
1.3K0
深入理解MyBatis XML配置文件:必需部分与可选部分详解
MyBatis 是一个流行的持久层框架,通过 XML 映射文件定义 SQL 语句和映射规则,简化了 Java 应用程序与数据库的交互。本文将深入探讨 MyBatis 中 XML 配置文件的用法,特别是那些部分必须有值,哪些部分可以省略。
九转成圣
2024/08/05
6260
Mybatis传参的方式总结
本文总结了MyBatis中传参的多种方式,包括基本类型参数、对象参数、Map参数、注解参数等。通过了解这些传参方式,读者可以更好地在MyBatis中进行参数的传递与处理。
猫头虎
2024/04/07
6570
Mybatis常用操作
if标签通常用于WHERE语句、UPDATE语句、INSERT语句中,通过判断参数值来决定是否使用某个查询条件、判断是否更新某一个字段、判断是否插入某个字段的值。
啵啵肠
2023/11/20
1670
mybatis 开发自定义插件,你学废了吗
MyBatis 允许你在映射语句执行过程中的某一点进行拦截调用。比如执行前、执行后或者对SQL结果集处理、sql入参处理等,这样就可以在不修改mybatis源码的情况下对sql执行的过程或结果进行修改,实现了解耦。
索码理
2022/09/20
5700
mybatis 开发自定义插件,你学废了吗
从架构角度看MyBatis及foreach用法小结
关注点分离[Separation of Concerns,简称SOC]是最经典的架构设计原则之一,在许多架构设计中被广泛使用。 关注点分离原则为我们的架构设计提出了三点要求。
烟雨平生
2023/03/07
1.3K0
从架构角度看MyBatis及foreach用法小结
MyBatis 源码学习笔记(二)- MyBatis 进阶(Part B)
resultMap 是MyBatis中最重要最强大的标签,它可以让你从90%的JDBC ResultSets代码中解脱,对复杂语句进行联合映射时,会非常方便
RiemannHypothesis
2022/08/19
9150
MyBatis 源码学习笔记(二)- MyBatis 进阶(Part B)
推荐阅读
相关推荐
mybatis常用标签,详细总结
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验