mysql的otherwise_(18)MyBatis的动态SQL:choose(when、otherwise)语句

有些时候,我们不想用所有的条件语句,而只想从中择其一二。针对这种情况,MyBatis提供了choose元素,它有点像Java中的switch语句。还是上面的例子,但是这次变为提供了id就按id查找,提供了loginname 和password就按loginnam 和password查找,若两者都没有提供,就返回所有sex等于男的Employee。

SELECT * FROM tb employee WHERE state = 'ACTIVE'

and id= #{id}

loginname = #{loginname} and password = #{password}

and

and sex = '男'

List selectEnployeeChoose(HashMap params);

public vuid testSelectEployeeChoose(SqlSession session) {

Employeemapper em = session.getMapper(Employeemapper.class);

HashMap params = new HashMap();

// 设置id属性

parans.put("id",1);

parama.put("loginnamc","jack");

params.put("password","123456") ;

List list = em.selectEmployeechoose(params);

list.forEach.employee->Systen.out.printIn(employee));

}

运行main 方法,尝试selectEmployeeChoose()方法,控制台显示如下:

DEBUG [main]==> Preparing: STTR.CT FROM tb_employee WHERE state = 'ACTIVE' and loginname = ? and password = ?

DEBUG [main]==> Parameters: jack(String),123456(String)

DEBUG [main]==> Total :1

[Employee [id=1,loginname=jack,passwiord=123456,name=马云,sex=男,age=26,phone=13902019999,sal=9800.0,state=ACTIVE] ]

可以看到,HashMap里面传递的参数包括了id、loginname和password,执行的sql语句中因为使用了choose标签,所以sql语句执行的是按照id查询,查询返回的Emplyee对象就是id为1的对象。

接下来注释以下代码:

// params.put("id",1) ;

再次执行main方法,控制台显示如下:

DEBUG [main]==> Prcparing: SEIECT * FROM tb_employee WHERE state = 'ACTIVE' and login name= ? and password = ?

DEBUG [main]==> Parameters: jack(String) ,123456(String)

DEBUG [main]<== Total :1

Employee [id=1,loginname=jack,passwiord=123456,name=马云,sex=男,age=26,phone=13902019999,sal=9800.0,state=ACTIVE]

所以sql语句是按照可以看到,HashMap里面传递的参数只包括loginname和password,所以sql语句是按照loginname和password查找,查询返回的Emplyee对象就是loginname,即jack,并且password是123456的对象。

接下来注释以下代码:

// params.put("id",1);

// params.put("loginname","jack");

// params.put("password","123456");

再次执行main 方法,控制台显示如下:

DEBUG [main]==> Preparing: SELECT * FROM tb_employee WHERE state = 'ACTIVE' and sex = '男'

DEBUG [main]==> Parameters:

DEBUG [main]==> Total :2

Employee [id=l,name= 杰克,sex=男,age=26,password=123456,loginname=jack,phone=13902019999,sal=9800.0,state=ACTIVE]

Employee [id=3,name=汤姆,sex=男,age=25,loginname=tom,password=123456,phone=13902017777,sal=8800.0,state=ACTIVE]

可以看到,由于没有传递任何参数,故sql语句执行的是< otherwise >元素里面的查询条"sex='男'"的对象。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值