栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MyBatis中的动态SQL

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MyBatis中的动态SQL

动态 SQL 是 MyBatis 的强大特性之一。避免了开发人员在后续根据不同的条件进行拼接SQL语句;

动态 SQL 只有几个基本元素,与 JSTL 或 XML 文本处理器相似,十分简单明了,大量的判断都可以在 MyBatis 的映射 XML 文件里配置,以达到许多需要大量代码才能实现的功能。
动态 SQL 大大减少了编写代码的工作量,更体现了 MyBatis 的灵活性、高度可配置性和可维护性。

动态 SQL 只有几个基本元素,与 JSTL 或 XML 文本处理器相似,十分简单明了,大量的判断都可以在 MyBatis 的映射 XML 文件里配置,以达到许多需要大量代码才能实现的功能。

动态 SQL 大大减少了编写代码的工作量,更体现了 MyBatis 的灵活性、高度可配置性和可维护性。

  1. MyBatis中的if标签

MyBatis if 类似于 Java 中的 if 语句,是 MyBatis 中最常用的判断语句。使用 if 标签可以节省许多拼接 SQL 的工作,把精力集中在 XML 的维护上。

if 语句使用方法简单,常常与 test 属性联合使用。语法如下。


•	    SQL语句
•	

当判断条件为 true 时,才会执行所包含的 SQL 语句。

当where后面的条件较为多的时候,我们一般都会把对应条件都放在对应的if标签中

对应接口文档内容:

public Student selectByCon (Student student);

对应的映射内容XML文件:有两种写法:

1


		select * from `student`
		
		
			and no = #{no}
		
		
			and name = #{name}
		
		
	

通过标签去进行修饰,当判断如果对应的标签中的内容不为空的时候,会自动将前面的and给省略掉

If标签中,他只能判断是否有没有,没有就不会接到对应SQL中,不会有其他的一个操作

MyBatis choose、when和otherwise标签

 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 Set标签

 在 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方法进行放入

其他的nameage设置也是通过该方法放入

在执行完对应test后,我们一定要记得commit,这样才能将其写入我们的数据库中,进行更新

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/462606.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号