MyBatis动态SQL介绍

MyBatis还有一个强大特性就是它的动态SQL。在实际项目开发中,经常需要根据不同条件拼接SQL语句,拼接时还要确保不能忘了必要的空格,有时候还要注意省掉列名列表最后的逗号...等等。在使用JDBC 或其他类似持久层框架操作数据库时,处理这种情况是非常麻烦的,甚至可以用痛苦来形容,而在MyBatis中利用动态SQL这一特性可以很简单地解决这个问题。

动态SQL元素和使用JSTL或其他类似基于XML的文本处理器相似,MyBatis采用功能强大的基于OGNL的表达式来完成动态SQL。OGNL 的表达式可以被用在任意的SQL 映射语句中。

MyBatis动态SQL元素

常用的动态SQL元素包括:

  • if
  • choose (when、otherwise)
  • where
  • set
  • foreach
  • bind

数据准备

为了体会MyBatis动态SQL的强大,我们需要提前准备数据。首先,在数据库创建一个表tb_employee,并插入测试数据。SQL脚本如下:

CREATE TABLE tb_employee(
ID INT(11) PRIMARY KEY AUTO_INCREMENT,
loginname VARCHAR(18),
PASSWORD VARCHAR(18),
NAME VARCHAR(18) DEEAULT NULL,
SEX CHAR(2) DEEAULT NULL,
AGE INT(11) DEFAULT NULL,
phone VARCHAR(21),
sal DOUBLE,
state VARCHAR(18)
);
INSERT INTO tb_employee(loginname,PASSWORD,NAMB,sex,age,phone,sal,state
VALUES('jack','123456','马云",'男',26,'13900000001',9800,'ACTIVE');
INSERT INTO tb_employee (loginname,PASSWORD,NAMB,sex,age,phone,sal,state)
VALUES('rose','123456','黛西','女',21,'13900000002',6800,'ACTIVE');
INSERT INTO tb_employee (loginname,PASSWORD,NAME,sex,age,phone,sal,state)
VALUES('tom','123456','汤姆','男',25,'13900000003,8800,'ACTIVE');
INSERT INTO tb_employee (loginname,PASSWORD,NAME sex,age,phone,sal,state)
VALUES('alice','123456','爱丽丝','女’,20,'13900000004,5800,ACTIVE');

在数据库中执行SQL 脚本,完成创建数据库和表的操作。接下来,创建一个Employee对象映射tb_employee表。

public Class Employee implements Serializable {
// 主键id
private Integer id;
// 登录名
private String loginname;
// 密码
private String password;
// 真实姓名
private String name;
// 性别
private String sex;
// 年龄
private Integer age;
// 电话
private String phone;
// 薪水
private Double sal;
// 状态
private String state;
// 省略构造器和set/get方法......
}

标签: none

添加新评论