栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

mybatis - 动态sql使用小结

mybatis - 动态sql使用小结

什么是动态sql?

动态sql: 简单来说就是sql的内容是变化的,可以根据条件获取到不同的sql语句。主要是sql语句中的where部分发生变化。动态sql的实现,使用的是mybatis提供的标签 ,,...等 < if >

    简介

    < if >是用于条件判断的
    if:当条件为true,就会吧if之间的sql加入到主sql之后

    语法

    	 
    			部分sql语句
    	 
    
< choose >
    简介

    < choose >也是用于条件判断的

    语法
    
    	
    		sql语句
    	
    	
    		sql语句
    	
    		
    		sql语句
    	
    
    
    举个栗子
    	
    			select * from t_customer
    			
    				
    					
    						usernamelikeconcat('%',#{username},'%')
    					
    					
    						and jobs=#{jobs}
    					
    					
    						and 1=1
    					
    				
    			
    	
    
< where >
    简介

    < where >用来包含 多个< if >的, 当多个if有一个成立时, < where >会自动增加一个where关键字,并去掉 if中多余的 and ,or等。

    举个栗子
    	
    		SELECT * FROM BLOG
    		
    			
    				state=#{state}
    			
    			
    				ANDtitlelike#{title}
    			
    			
    				ANDauthor_namelike#{author.name}
    			
    		
    	
    
< set >
    简介

    Mybatis在生成updata语句时若使用if标签,如果前面的if没有执行,则可能有多余逗号的错误。
    使用set标签可以将动态的配置set关键字,和剔除追加到条件末尾的任何不相关的逗号。

    举个栗子
    	
    		UPDATE conf_banner_t
    		 
    			
    				t.banner_name = #{bannerName},
    			
    			
    				t.banner_url = #{bannerUrl},
    			
    			
    				t.banner_logo = #{bannerLogo},
    			
    			
    				t.banner_description = #{bannerDescription},
    			
    			
    				t.sort = #{sort},
    			
    			
    				t.is_enabled = #{isEnabled},
    			
    		
    		where t.banner_id = #{bannerId}
    	
    
< foreach >
    简介

    < foreach > 循环java中的数组,list集合的。 主要用在sql的in语句中。

    语法说明

mapper:

	
		#{xxx}
	
属性描述
collection 1. 表示接口中的方法参数的类型, 如果是数组使用array , 如果是list集合使用list,Map对象没有默认的键。 2. 当然在作为入参时可以使用@Param("keyName")来设置键,设置keyName后,list,array将会失效。 3. 除了入参这种情况外,还有一种作为参数对象的某个字段的时候。举个例子:如果User有属性List ids。入参是User对象,那么这个collection = "ids";如果User有属性Ids ids;其中Ids是个对象,Ids有个属性List id;入参是User对象,那么collection = "ids.id"。
item值是自定义的,表示数组和集合中的成员的变量
open循环开始时的字符
close循环结束时的字符
separator集合成员之间的分隔符
    示例

要求:查询学生id是 1001,1002,1003的三个学生sql代码:

select * from student where id in (1001,1002,1003)
java接口代码:
public List selectStudentsForList(List ids);
java测试代码
		@Test
		public void testSelectStudentsForList(){
			SqlSession sqlSession = MybatisUtils.getSqlSession();
			StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
			List list = new ArrayList();
			list.add(1001);
			list.add(1002);
			list.add(1004);
			list.add(1009);
			//list=null;
			List students = studentDao.selectStudentsForList(list);
			students.forEach(student->System.out.println(student));
			sqlSession.close();
		}

mapper:
	
		
		select * from   product_  where name like #{likename}
	
sql代码片段
    简介

    简单来说,sql代码片段, 就是复用一些语法。

    步骤
      先定义 sql语句, 表名, 字段等 再使用, 复用sql代码
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/762276.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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