前言
今天我们来聊聊Mybatis的动态SQL的使用,动态SQL可以说是mybatis的核心,可以对SQL语句进行灵活操作,通过表达式进行判断,对SQL进行灵活拼接,组装。在实际项目开发中,我们还可以将在业务层处理的逻辑转移到SQL中进行处理,因为SQL语句通常会比程序代码执行的要快,毕竟数据库是专门做数据处理和计算的嘛。
我们以 student_score 表为例来说明:
if+where 标签
SQL语句中 < if > 标签和代码中的 if 语句作用是一样的,都是条件判断。加上 if 标签的SQL语句会自动的去判断传入的条件是否为空。
1、< if >标签的使用
//会自动去判断传入的 name 和 math 是否为空, //如果name为空则SQL语句中不会拼接 name=?查询语句 //如果math为空则SQL语句中不会拼接 math=?查询语句 SELECT sc.id,sc.name FROM student_score sc WHERE 1=1 sc.name=#{name} sc.math=#{math} ORDER BY sc.math DESC
上述SQL完成的查询:
- 当name不为空,math为空时,根据name去查询
- 当math不为空,name为空时,根据math去查询
- 当name和math都不为空,同时根据name和math去查询
- 当name和math都为空,无条件查询表中数据。where后加 1=1 恒等式是为了避免当查询条件全都为空时报错。