博客
关于我
学习在IDEA中使用Mybatis(五)动态sql
阅读量:390 次
发布时间:2019-03-05

本文共 3095 字,大约阅读时间需要 10 分钟。

MyBatis 动态 SQL 常用功能解析

1. if条件判断及ONML

在MyBatis中,通过if标签可以实现条件查询。if标签的基本使用方式是判断参数中某个字段的值是否满足特定条件。如果条件满足,则会在SQL语句中添加相应的过滤条件。

1.1 接口定义

定义一个动态SQL接口EmployeeMapperDynamicSQL,添加get方法:

public List
getEmpsByConditionIf(Employee employee);

1.2 SQL配置

mybatis-config.xml中添加接口配置:

1.3 测试方法

调用getEmpsByConditionIf方法,传入对应的参数,MyBatis会根据参数值动态生成查询条件。

2. where标签优化

在查询时,如果某些条件未提供,可能导致SQL拼接出现语法错误。使用where标签可以避免这种问题。

2.1 where标签使用方法

将所有查询条件放在where标签内,MyBatis会自动处理多余的andor

示例:

2.2 注意事项

  • where标签只能去掉第一个多余的andor,需确保拼接后的SQL语句格式正确。
  • 可以将andor放在SQL语句的开头,以避免格式错误。

3. trim标签 - 拼接优化

where标签无法解决的情况下,可以使用trim标签进行拼接优化。通过设置prefixsuffixsuffixOverrides等属性,可以对拼接后的字符串进行格式调整。

3.1 trim标签示例

id=#{id} and
last_name like #{last_name} and
email=#{email} and
gender=#{gender}

4. choose标签 - 条件分支

通过choose标签实现条件分支,例如根据不同的字段进行不同的查询。

4.1 接口定义

定义动态SQL接口EmployeeMapperDynamicSQL,添加getEmpsByConditionChoose方法:

public List
getEmpsByConditionChoose(Employee employee);

4.2 SQL配置

4.3 测试方法

调用getEmpsByConditionChoose方法,传入参数,MyBatis会根据参数值选择适用的查询条件。

5. set标签 - 动态更新

使用set标签实现动态更新,封装修改条件并与if标签结合使用。

5.1 接口定义

定义动态SQL接口EmployeeMapperDynamicSQL,添加updateEmp方法:

public void updateEmp(Employee employee);

5.2 SQL配置

update tbl_employee
last_name=#{last_name},
email=#{email},
gender=#{gender}
where id=#{id}

6. foreach遍历集合

通过foreach标签实现对集合的动态遍历,常用于批量插入或更新操作。

6.1 接口定义

定义动态SQL接口EmployeeMapperDynamicSQL,添加getEmpsByConditionForeach方法:

public List
getEmpsByConditionForeach(List
ids);

6.2 SQL配置

6.3 批量插入示例

INSERT INTO tbl_employee(last_name, email, gender, d_id)VALUES('tom','tom@qq.com','0',1),       ('jack','jack@qq.com','1',2);

6.4 配置文件示例

INSERT INTO tbl_employee(last_name, email, gender, d_id)
(#{emp.last_name}, #{emp.email}, #{emp.gender}, #{emp.dept.id})

7. 内置参数与bind标签

MyBatis提供了内置参数_parameter_databaseId,可以用于动态SQL中。bind标签用于将OGNL表达式的值绑定到变量中。

7.1 示例

8. SQL片段与include标签

通过sqlinclude标签,可以将重复使用的SQL片段抽取出来,便于引用和管理。

8.1 示例

employee_id, last_name, email
last_name, email, gender, d_id

8.2 引用片段

insert into employees

通过这些功能,MyBatis允许开发者对SQL语句进行灵活的定义和优化,充分发挥动态SQL的优势。

转载地址:http://vvewz.baihongyu.com/

你可能感兴趣的文章
POI:POI+JXL实现xls文件添加水印
查看>>
POI:POI实现docx文件添加水印
查看>>
POJ 1006
查看>>
Quartz中时间表达式的设置-----corn表达式
查看>>
poj 1035
查看>>
POJ 1061 青蛙的约会 (扩展欧几里得)
查看>>
Quartz2.2.1简单使用
查看>>
POJ 1080 Human Gene Functions(DP:LCS)
查看>>
Quant 开源项目教程
查看>>
POJ 1088 滑雪
查看>>
POJ 1095 Trees Made to Order
查看>>
POJ 1113 Wall(计算几何--凸包的周长)
查看>>
poj 1125Stockbroker Grapevine(最短路)
查看>>
Qualitor processVariavel.php 未授权命令注入漏洞复现(CVE-2023-47253)
查看>>
poj 1151 (未完成) 扫描线 线段树 离散化
查看>>
POJ 1151 / HDU 1542 Atlantis 线段树求矩形面积并
查看>>
poj 1163 数塔
查看>>
POJ 1177 Picture(线段树:扫描线求轮廓周长)
查看>>
Qualitor checkAcesso.php 任意文件上传漏洞复现(CVE-2024-44849)
查看>>
POJ 1182 食物链(并查集拆点)
查看>>