0%

10.2 MyBatis动态SQL 10.2.0测试项目框架

10.2 MyBatis动态SQL

在实际项目开发中,经常需要根据不同条件拼接SQL语句,拼接时一定不能忘了必要的空格,有时候还要注意省略掉列名列表最后的逗号,等等。在使用JDBC或其他类似持久层框架操作数据库时,处理这种情况是非常麻烦的,甚至可以用痛苦来形容,而在MyBatis中利用动态SQL这一特性可以很简单地解决这个问题.
动态SQL元素和使用JSTL或其他类似基于XML的文本处理器相似,MyBatis采用功能强大的基于OGNL的表达式来完成动态SQLOGNL的表达式可以用在任意的SQL映射语句.
常用的动态SQL元素包括:

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

下面我们就用一个简单示例来看看在MyBatis中怎么使用动态SQL.

创建测试项目框架

创建数据库表

首先,给之前创建的mybatis数据库创建一个表tb_employee,并插入测试数据脚本如下:
mybatis数据库中执行SQL脚本,完成创建数据库和表的操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 创建数据表
DROP TABLE IF EXISTS `tb_employee`;
CREATE TABLE `tb_employee` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`loginname` varchar(18) DEFAULT NULL,
`password` varchar(18) DEFAULT NULL,
`name` varchar(18) DEFAULT NULL,
`sex` char(2) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`phone` varchar(21) DEFAULT NULL,
`sal` double DEFAULT NULL,
`state` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
# 插入数据
INSERT INTO `tb_employee` VALUES ('1', 'xiaoming', 'xiaoming', '小明', '男', '19', '123456789123', '9800', 'active');
INSERT INTO `tb_employee` VALUES ('2', 'xiaowang', 'xiaowang', '小王', '男', '21', '123456789123', '6800', 'active');
INSERT INTO `tb_employee` VALUES ('3', 'xiaoli', 'xiaoli', '小丽', '女', '23', '123456789123', '7800', 'active');
INSERT INTO `tb_employee` VALUES ('4', 'xiaofang', 'xiaofang', '小芳', '女', '22', '123456789123', '8800', 'active');

创建持久化对象

接下来,创建一个Employee对象映射tb_emp1oyee表。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package domain;
public class Employee {
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;
// 构造方法
public Employee()
{
super();
}
// 此处省略getter和setter方法,请自己补上
@Override
public String toString()
{
return "Employee [id=" + id + ", loginname=" + loginname + ", password=" + password
+ ", name=" + name + ", sex=" + sex + ", age=" + age + ", phone=" + phone + ", sal="
+ sal + ", state=" + state + "]";
}
}

创建Mapper.xml映射文件

1
2
3
4
5
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="mapper.EmployeeMapper">

</mapper>

这个是个空的映射文件,后面用到的标签再往里面添加.

创建mapper接口

1
2
3
package mapper;
public interface EmployeeMapper {
}

这个接口是可空接口,后面有用到的方法再往接口中添加.

原文链接: 10.2 MyBatis动态SQL 10.2.0测试项目框架