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 且姓李的只有 “李白” 自己。


目录
相关文章
|
3月前
|
缓存 Java 数据库连接
mybatis复习05,mybatis的缓存机制(一级缓存和二级缓存及第三方缓存)
文章介绍了MyBatis的缓存机制,包括一级缓存和二级缓存的配置和使用,以及如何整合第三方缓存EHCache。详细解释了一级缓存的生命周期、二级缓存的开启条件和配置属性,以及如何通过ehcache.xml配置文件和logback.xml日志配置文件来实现EHCache的整合。
mybatis复习05,mybatis的缓存机制(一级缓存和二级缓存及第三方缓存)
|
5天前
|
SQL XML Java
mybatis实现动态sql
MyBatis的动态SQL功能为开发人员提供了强大的工具来应对复杂的查询需求。通过使用 `<if>`、`<choose>`、`<foreach>`等标签,可以根据不同的条件动态生成SQL语句,从而提高代码的灵活性和可维护性。本文详细介绍了动态SQL的基本用法和实际应用示例,希望对您在实际项目中使用MyBatis有所帮助。
27 11
|
1月前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
27天前
|
SQL Java 数据库连接
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
|
2月前
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
54 10
|
3月前
|
SQL XML Java
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标签的用法
|
3月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
67 1
|
3月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
5月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
134 13
|
5月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。