Mybatis最入门---动态查询(where,trim,set)

[一步是咫尺,一步即天涯]

首先,请大家先回顾一下,我们前文在讲述时说至少有一个where 固定条件,并且在缺失固定条件是SQL的执行结果是0个符合条件的数据。可现实情况是,我们真的有时候无法确定输入条件中是不是至少有一个有效。本文,我们就来解决这个问题。

准备工作:

a.操作系统 :win7 x64

b.基本软件:MySQL,Mybatis,Spring,SQLyog

-------------------------------------------------------------------------------------------------------------------------------------

一。标签

1.复制上文工程,重命名为Mybatis08工程,工程结构图如下:

2.修改UserInfoMapper.xml,具体内容如下:

【解释】
a.select之后没有直接写Sql语句的where,而是使用标签

b.按照标准写法,第一个标签内的AND应该不写,但是,就算开发中书写也不会报错。这就是where标签帮助我们自动的移除了第一个AND链接。但是,第二个之后的标签内,必须有AND链接。

c.如果没有一个条件符合,则返回所有条目。

d.标签的其他用法请参考前文,这里不再赘述

3.修改单元测试方法,如下:

@Test
	public void testSeletOne() {
		try {

			Map map = new HashMap();
			map.put("department", "1");
			map.put("gender", "1");
			map.put("position", "工程师");
			Departments d = new Departments("2", "%售%");
			map.put("d", d);
			UserInfoDao userInfo = sqlSession.getMapper(UserInfoDao.class);
			List UIList = userInfo.findUserInfoByUnoQuantity(map);
			for (UserInfo ui : UIList) {
				System.out.println(ui.toString());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
4.运行单元测试方法,观察输出即可。

5.结论:where 元素知道只有在一个以上的条件有值的情况下才去插入“WHERE”子句。而且,若内容是“AND”或“OR”开头的,where 元素也知道如何将他们去除。

--------------------------------------------------------------------------------------------------------------------------------------------------------

二.标签

1.该标签的功能与类似,并且额外的提供了前缀后缀功能。具体用法如下:

2.修改Mapper文件,具体内容如下:

【解释】

a.我们使用替代标签。

b.属性“prefix”表示:加入前缀where

c.属性“prefixOverrides”表示:自动覆盖第一个“and”或者“or”

d.后缀的用法类似;

3.增加对应接口,修改单元测试方法调用接口,如下:

@Test
	public void testSeletOne() {
		try {

			Map map = new HashMap();
			map.put("department", "1");
			map.put("gender", "1");
			map.put("position", "工程师");
			Departments d = new Departments("2", "%售%");
			map.put("d", d);
			UserInfoDao userInfo = sqlSession.getMapper(UserInfoDao.class);
			List UIList = userInfo.findUserInfoByTrim(map);
			for (UserInfo ui : UIList) {
				System.out.println(ui.toString());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
4.运行单元测试方法,观察控制台输出即可。
-------------------------------------------------------------------------------------------------------------------------------------

三。标签

1.注意:此标签用于update语句。请各位看官注意观察书写方法。

2.修改Mapper文件,具体内容如下:


		update userInfo
		
			
				mobile=#{mobile},
			
			
				gender=#{gender},
			
			
				position = #{position},
			
		
		where userid=#{userid}
	
【解释】

a.SQL语句的set被标签替代。

b.每个中语句最后都带有逗号,如果有写过SQL语句的同学就一定知道,最后的逗号是不能有的,因此,这里的标签能够帮助我们自动的移除最后一个中的逗号。

c.是一个非常强大的标签,因此,我们也可以通过来实现的功能,如下:【这种写法的运行效果与等价】


		update userInfo
		
			
				mobile=#{mobile},
			
			
				gender=#{gender},
			
			
				position = #{position},
			
		
		where userid=#{userid}
	

3.增加对应接口,修改单元测试方法调用接口,如下:

@Test
	public void testUpdate() {
		try {

			UserInfo ui = new UserInfo("admin", "3", "经理", "77778888","0", "[email protected]", null);
			UserInfoDao userInfo = sqlSession.getMapper(UserInfoDao.class);
			int re = userInfo.updateUserInfoBySet(ui);
			if(re==1){
				System.out.println("更新成功");
			}
			sqlSession.commit();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
4.运行单元测试方法,观察控制台输出即可

--------------------------------------------------------------------------------------------------------------------------------------------------------

至此,Mybatis最入门---动态查询(choose,when,otherwise)结束


特别备注:

经过上面的叙述与使用,发现这几个标签能够帮助我们解决绝大多数的增改删查问题。所以,请各位看官之后多多练习吧


你可能感兴趣的:(Mybatis)