- 11.2 注解的使用示例5 测试动态SQL
- 搭建基本项目框架
- 创建数据表
- 插入数据
- 保存为db.properties文件,然后在mybatis-config.xml中通过下面标签引入:
- ">
- 下面的标签放在mybatis-config.xml文件的environments标签的environment子标签的子标签dataSource标签中
"> - [log4j.xml](/blog/e757c688/#log4j-xml) - [mybatis-config.xml](/blog/e757c688/#mybatis-config-xml)
11.2 注解的使用示例5 测试动态SQL
MyBatis
的注解也支持动态SQL
。MyBatis
提供了各种注解,如@InsertProvider
、@UpdateProvider
、@DeleteProvider
和@SelectProvider
,来帮助构建动态SQL
语句,然后MyBatis
可以执行这些SQL
语句。
以上4个Provider
注解都有
type
属性,该属性指定了一个类。method
属性指定该类的方法,其用来提供需要执行的SQL
语句。
SQL类
使用字符串拼接的方法构建SQL
语句是非常困难的,并且容易出错。所以MyBaits
提供了一个SQL
工具类org.apache.ibatis.jdbc.SQL
该类不使用字符串拼接的方式,并且会以合适的空格前缀和后缀来构造SQL
语句。SQL
类的常用方法如下:
方法 | 描述 |
---|---|
T LEFT_OUTER_JOIN(String join) |
同JOIN 子句,连接方式是左外连接(LEFT_OUTER)JOIN )。 |
T RIGHT_OUTER_JOIN(String join) |
同JOIN 子句,连接方式是右外连接(RIGHT_OUTER _JOIN )。 |
T WHERE(String conditions) |
追加一个新的WHERE 子句条件,可以多次调用。 |
T OR() |
使用OR 拆分当前WHERE 子句条件,可以不止一次调用. |
T AND() |
使用AND 拆分当前WHERE 子句条件,可以不止一次调用。 |
T GROUP_BY(String columns) |
追加一个新的GROUP BY 子句元素。 |
T HAVING( String conditions) |
追加一个新的 HAVING 子句条件. |
T ORDER_BY(String columns) |
追加一个新的ORDER BY 子句元素。 |
T INSERT_INTO(String tableName) |
启动INSERT 语句插入到指定表,应遵循由个或多个VALUES() 调用。 |
T VALUES(String columns,String values) |
追加的INSERT 语句。第一个参数是要插入的列,第二个参数是插入的值。 |
T DELETE_FROM(String table) |
启动DELETE 语句,并指定删除表. |
T UPDATE(String table) |
启动一个更新(UPDATE )语句,并指定更新表。 |
T SET(String sets) |
追加一个SET 更新语句列表。 |
动态SQL provider 方法可以接受以下参数: |
|
- 无参数 | |
- java 对象 |
|
- java.util.Map |
搭建基本项目框架
项目结构
1 | E:\workspace_web2\MyADynamicSQLTest |
数据库表
1 | # 创建数据表 |
持久化对象
1 | package domain; |
工具类
1 | package fractory; |
mybatis相关配置文件
数据库信息属性文件db.properties
1 | # 保存为db.properties文件,然后在mybatis-config.xml中通过下面标签引入: |
log4j.xml
1 |
|
mybatis-config.xml
1 |
|
EmployeeMapper接口
1 | package mapper; |
动态SQL生成器
1 | package mapper; |
动态SQL方法写法
1 | public String 方法名称(参数列表) |
注意构造函数SQL()
后面有两个嵌套的大括号,
- 内层大括号里面写上动态
SQL
的生成逻辑, - 外层大括号后面接上
.toString()
,以调用toString
方法生成SQL
语句(字符串)
原文链接: 11.2 基于注解的动态SQL0 项目结构