Mybatis 动态sql的编写|开启二级缓存(上)

简介: Mybatis 动态sql的编写|开启二级缓存

前言

上篇博文把表连接查询和三种对应关系的写法记录总结了,本篇要把 mybatis 中的动态sql 的使用以及缓存知识记录下来。


动态SQL

在解释 where if 标签之前先进行一个模糊查询的操作。


模糊查询

如下面一张表:

9fce07be35454ed8b0b3f0cc7c0a2c17.png


查询所有 李 姓人员的信息:


在mapper接口中定义方法:

List<Person> selectName(String name);

在 xml 中编写 sql 语句:


<select id="selectName" resultMap="personMap">
        select *
        from t_person
        where person_name like concat('%', #{name}, '%');
    </select>

这里的 concat('%', #{name}, '%') 写法使用了字符串拼接的技巧,这样在查询语句里就是 %name% 的模糊查询了。

如果这样写:'%#{name}%' 是不行的,#{}会失效。


编写测试类:


bbd1fa5f14bc4d4da640364d5211a4fb.png

测试结果:

227c5a226b1448ed8eeddc8d1a29f1b3.png

可以看到所有 李 姓的人信息被查询到了。


where if 标签

姓李的太多,那么我们可以加一个年龄范围,于是需要增加两个参数:


5670f1c1436344a392e9ca64eb31c7ee.png


这里要注意,参数在两个以上需要使用 注解 来绑定。


重点来看 xml中的 sql 语句:

<select id="selectContent" resultMap="personMap">
        select * from t_person
        <where>
            <if test="name != null and name !=''">
                person_name like concat('%',#{name},'%')
            </if>
            <if test="ageMin > 0">
                and age &gt;= #{ageMin}
            </if>
            <if test="ageMax > ageMin">
                and age &lt;= #{ageMax}
            </if>
        </where>
    </select>

可以看到这里的 where 关键字变成了一个标签 <where>,这是因为:

如果这三个参数都不填写的话,where 下的条件就不会起作用,

此条 sql 就变成了查询所有。

显然,查询所有的语法里是没有 where 关键字的,因此使用标签代替。

除了使用 <where> 标签之外,也可以使用类似 1=1 加 and 的方法拼接。

比如: select * from t_person where 1=1 and ...

此外,where 标签还可以去除多余的 and 前缀。

if 标签用来做判断,test 里写判断的条件,标签内写判断成功后的 sql 语句:

这里就是判断名字是否为空以及年龄的取值范围是否合理:

test 里面的符号正常写,and 和 or 代表并且和或者。

sql 语句里,&gt; 是大于的意思,&lt; 是小于的意思。

编写测试类:


65e734e25d3d4c0db5a5be5766770efa.png


测试结果:

943c47b4485c4e26b6457554730210b6.png

很明显,年龄在 20~28 且姓李的只有 “李白” 自己。


顾昀
+关注
目录
打赏
0
0
0
0
4
分享
相关文章
mybatis复习05,mybatis的缓存机制(一级缓存和二级缓存及第三方缓存)
文章介绍了MyBatis的缓存机制,包括一级缓存和二级缓存的配置和使用,以及如何整合第三方缓存EHCache。详细解释了一级缓存的生命周期、二级缓存的开启条件和配置属性,以及如何通过ehcache.xml配置文件和logback.xml日志配置文件来实现EHCache的整合。
mybatis复习05,mybatis的缓存机制(一级缓存和二级缓存及第三方缓存)
|
1天前
|
mybatis实现动态sql
MyBatis的动态SQL功能为开发人员提供了强大的工具来应对复杂的查询需求。通过使用 `<if>`、`<choose>`、`<foreach>`等标签,可以根据不同的条件动态生成SQL语句,从而提高代码的灵活性和可维护性。本文详细介绍了动态SQL的基本用法和实际应用示例,希望对您在实际项目中使用MyBatis有所帮助。
20 11
MyBatis缓存机制
MyBatis提供两级缓存机制:一级缓存(Local Cache)默认开启,作用范围为SqlSession,重复查询时直接从缓存读取;二级缓存(Second Level Cache)需手动开启,作用于Mapper级别,支持跨SqlSession共享数据,减少数据库访问,提升性能。
25 1
深入探讨:Spring与MyBatis中的连接池与缓存机制
Spring 与 MyBatis 提供了强大的连接池和缓存机制,通过合理配置和使用这些机制,可以显著提升应用的性能和可扩展性。连接池通过复用数据库连接减少了连接创建和销毁的开销,而 MyBatis 的一级缓存和二级缓存则通过缓存查询结果减少了数据库访问次数。在实际应用中,结合具体的业务需求和系统架构,优化连接池和缓存的配置,是提升系统性能的重要手段。
35 4
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
1月前
|
MyBatis如何关闭一级缓存(分注解和xml两种方式)
MyBatis如何关闭一级缓存(分注解和xml两种方式)
69 5
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
49 10
使用MyBatis缓存的简单案例
MyBatis 是一种流行的持久层框架,支持自定义 SQL 执行、映射及复杂查询。本文介绍了如何在 Spring Boot 项目中集成 MyBatis 并实现一级和二级缓存,以提高查询性能,减少数据库访问。通过具体的电商系统案例,详细讲解了项目搭建、缓存配置、实体类创建、Mapper 编写、Service 层实现及缓存测试等步骤。
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
文章介绍了MyBatis中动态SQL的用法,包括if、choose、where、set和trim标签,以及foreach标签的详细使用。通过实际代码示例,展示了如何根据条件动态构建查询、更新和批量插入操作的SQL语句。
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
AI助理

阿里云 AI 助理已上线!

快来体验一下吧。