MyBatis 动态SQL
-
动态SQL
动态SQL是MyBatis的一项非常强大的功能。它使程序员能够根据场景动态构建查询。例如,如果要基于MyBatis中学生的姓名搜索Student数据库,则必须使用动态SQL编写查询。MyBatis使用功能强大的动态 SQL语言,可在任何映射的SQL语句中使用。以下是MyBatis提供的基于OGNL的动态SQL表达式。- if
- choose (when, otherwise)
- trim (where, set)
- foreach
-
if语句
动态SQL中最常见的操作是有条件地包含where子句的一部分。例如-该语句提供了可选的文本搜索功能。如果您不输入名称,那么将返回所有活动记录。但是,如果你传递了一个名字,它会寻找与给定的名称类似的条件。您可以将多个if条件包括在内- -
where
查看我们之前的示例,看看如果不满足任何条件会发生什么。您最终将得到一个看起来像这样的SQL这将失败,但是MyBatis有一个简单的解决方案,只需进行一次简单的更改,一切就可以正常工作-where元素只在包含标记返回任何内容时插入where。此外,如果内容以AND或or开头,它知道如何去掉它。 -
foreach
使用foreach元素,您可以指定一个集合,并声明可以在该元素主体内使用的项目和索引变量。它还允许您指定打开和关闭字符串,并添加分隔符以放置在两次迭代之间。您可以按如下方式建立IN条件- -
动态SQL示例
如果使用动态SQL,这是一个示例。考虑,我们在MySQL中有以下Student表-让我们假设这个表有两个记录为- -
Student POJO 类
为了执行读取操作,让我们在Student.java中有一个Student类,如下所示 -
Student.xml文件
该文件包含名为Student的结果映射,以映射SELECT查询的结果。我们将定义一个“id”,它将在mybatisRead.java中用于在数据库上执行动态SQL SELECT查询。 -
GetRecordByName.java文件
该文件具有应用程序级逻辑,可从Student表中读取条件记录- -
编译并运行
以下是编译和运行getRecords程序的步骤。在继续进行编译和执行之前,请确保已正确设置了PATH和CLASSPATH。- 如上所示创建Student.xml。
- 如本教程的MYBATIS-配置XML章节中所示,创建SqlMapConfig.xml 。
- 如上所示创建Student.java并进行编译。
- 如上所示创建GetRecordByName.java并进行编译。
- 执行GetRecordByName二进制文件以运行程序。
您将得到以下结果,并且将从Student表中读取一条记录。