请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

使用 tk.mybatis 发现的问题

如果一个查询条件比如username=null, 那么查询就是真,是有结果的,真是匪夷所思。

但是在mysql客户端中,select * from user where user_name=null 是没有结果的,是假。

比如下面的两种情况都有,其他情况没有测试:

@Override
//Propagation.SUPPORTS 有事务就用,没有不用
@Transactional(propagation= Propagation.SUPPORTS)
public boolean queryUsernameIsExist(String username) {

UserInfo userInfo = new UserInfo();

userInfo.setUserName(username);

UserInfo result=userInfoMapper.selectOne(userInfo);

//查询到为空返回false,不为空返回true
return result == null ? false:true;

}

//根据用户名,查询用户
@Transactional(propagation = Propagation.SUPPORTS)
@Override
public UserInfo queryUserForLogin(String username) {

Example userExample = new Example(UserInfo.class);
Criteria criteria = userExample.createCriteria();
criteria.andEqualTo("userName", username);

//criteria.andEqualTo("password", password);
UserInfo result = userInfoMapper.selectOneByExample(userExample);

return result;

}

当user_name=null时,下面的情况测试结果都为真,怎么解决?

String user_name=null;

UserInfo userInfo = userInfoService.queryUserForLogin(user_name);
Boolean userInfo = userInfoService.queryUsernameIsExist(user_name);
System.out.println(userInfo);

正在回答 回答被采纳积分+3

2回答

风间影月 2019-05-06 19:17:08

1. 正常业务来讲,遇到null是肯定不能执行下去的,一定要处理掉,不能操作数据库,这是基本业务
2. tk是开源框架,以目前情况来说做好判断即可,其他的是他自身框架的设计问题,也许后续新版本会迭代掉的,这个完全不影响学习以及开发
3. 写sql语句的时候判断为空用 username is null
4. 建议进去官方群和大家一起交流

0 回复 有任何疑惑可以回复我~
风间影月 2019-05-06 18:41:44

是null,直接return,提示用户输入错误

0 回复 有任何疑惑可以回复我~
  • 提问者 蓝色西西 #1
    老师,我的意思是, tk.mybatis的框架问题,怎么解决的和mysql客户端查询逻辑一致。
    回复 有任何疑惑可以回复我~ 2019-05-06 19:09:01
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信