MyBatis动态SQL(认真看看, 以后写SQL就爽多了)

 MyBatis 令人喜欢的一大特性就是动态 SQL。 在使用 JDBC 的过程中, 根据条件进行 SQL 的拼接是很麻烦且很容易出错的。 MyBatis 动态 SQL 的出现, 解决了这个麻烦。

MyBatis通过 OGNL 来进行动态 SQL 的使用的。

目前, 动态 SQL 支持以下几种标签

元素 作用 备注
if 判断语句 单条件分支
choose(when、otherwise) 相当于 Java 中的 if else 多条件分支
trim(where、set) 辅助元素 用于处理 SQL 拼接问题
foreach 循环语句 批量插入, 更新, 查询时经常用到
bind 创建一个变量, 并绑定到上下文中 用于兼容不同的数据库, 防止 SQL 注入等

1 数据准备

为了后面的演示, 创建了一个 Maven 项目 mybatis-dynamic, 创建了对应的数据库和表

DROP TABLE IF EXISTS `student`;  CREATE TABLE `student` (   `student_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '编号',   `name` varchar(20) DEFAULT NULL COMMENT '姓名',   `phone` varchar(20) DEFAULT NULL COMMENT '电话',   `email` varchar(50) DEFAULT NULL COMMENT '邮箱',   `sex` tinyint(4) DEFAULT NULL COMMENT '性别',   `locked` tinyint(4) DEFAULT NULL COMMENT '状态(0:正常,1:锁定)',   `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '存入数据库的时间',   `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改的时间',   `delete` int(11) DEFAULT NULL,   PRIMARY KEY (`student_id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='学生表';

对应的项目结构

项目结构

2 if 标签

if 标签是我们最常使用的。 在查询、删除、更新的时候很可能会使用到。 必须结合 test 属性联合使用。

2.1 在 WHERE 条件中使用 if 标签

这是常见的一种现象, 我们在进行按条件查询的时候, 可能会有多种情况。

2.1.1 查询条件

根据输入的学生信息进行条件检索

  1. 当只输入用户名时, 使用用户名进行模糊检索;
  2. 当只输入性别时, 使用性别进行完全匹配
  3. 当用户名和性别都存在时, 用这两个条件进行查询匹配查询

关键字:

50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信