动态 SQL 是 MyBatis 的强大特性之一。避免了开发人员在后续根据不同的条件进行拼接SQL语句;
动态 SQL 只有几个基本元素,与 JSTL 或 XML 文本处理器相似,十分简单明了,大量的判断都可以在 MyBatis 的映射 XML 文件里配置,以达到许多需要大量代码才能实现的功能。
动态 SQL 大大减少了编写代码的工作量,更体现了 MyBatis 的灵活性、高度可配置性和可维护性。
动态 SQL 只有几个基本元素,与 JSTL 或 XML 文本处理器相似,十分简单明了,大量的判断都可以在 MyBatis 的映射 XML 文件里配置,以达到许多需要大量代码才能实现的功能。
动态 SQL 大大减少了编写代码的工作量,更体现了 MyBatis 的灵活性、高度可配置性和可维护性。
MyBatis if 类似于 Java 中的 if 语句,是 MyBatis 中最常用的判断语句。使用 if 标签可以节省许多拼接 SQL 的工作,把精力集中在 XML 的维护上。
if 语句使用方法简单,常常与 test 属性联合使用。语法如下。
•
• SQL语句
•
当判断条件为 true 时,才会执行所包含的 SQL 语句。
当where后面的条件较为多的时候,我们一般都会把对应条件都放在对应的if标签中
对应接口文档内容:
public Student selectByCon (Student student);
对应的映射内容XML文件:有两种写法:
1
因为不用where的标签,并且我们看到,每个if标签中,条件的前面都有加上and这个词,所以如果没有
2、第二种方法
通过
If标签中,他只能判断是否有没有,没有就不会接到对应SQL中,不会有其他的一个操作
MyBatis 中动态语句 choose-when-otherwise 类似于 Java 中的 switch-case-default 语句。由于 MyBatis 并没有为 if 提供对应的 else 标签,如果想要达到
动态语句 choose-when-otherwise 语法如下。
SQL语句1
SQL语句2
SQL语句3
SQL语句4
choose 标签按顺序判断其内部 when 标签中的判断条件是否成立,如果有一个成立,则执行相应的 SQL 语句,choose 执行结束;如果都不成立,则执行 otherwise 中的 SQL 语句。这类似于 Java 的 switch 语句,choose 为 switch,when 为 case,otherwise 则为 default。
例子:
接口文档
public Student selectByCon2 (Student student);
对应XML文件内容
在 Mybatis 中,update 语句可以使用 set 标签动态更新列。set 标签可以为 SQL 语句动态的添加 set 关键字,剔除追加到条件末尾多余的逗号。
根据 id 修改对应student的值
接口文档:
public void updateStudent(Student student);
对应XML文件配置
update student
name=#{name},
age=#{age},
no=#{no}
对应test文件:
private SqlSessionFactory getFactory() throws IOException {
String resource = "mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(resource);
// 初始化mybatis,创建SqlSessionFactory类实例
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
return sqlSessionFactory;
}
@Test
public void updateStudent() throws IOException {
SqlSession session=getFactory().openSession();
StudentMapper mapper =session.getMapper(StudentMapper.class);
Student stu =new Student();
stu.setNo("3");
stu.setAge(3);
stu.setName("nini");
mapper.updateStudent(stu);
session.commit();
}
其中update中的no我们也需要在test中用set方法进行放入
其他的name\age设置也是通过该方法放入
在执行完对应test后,我们一定要记得commit,这样才能将其写入我们的数据库中,进行更新