想利用SpringBoot集成Mybatis做一个从MySQL中查找账号数据的小工具,映射器和dao层还有实体类就不放了,因为正常跑是没问题了,就是业务层里面写的判断逻辑不知道什么原因String的contains方法判断一个中文字符串是否包含另外一个中文字符串的时候不知道出了什么问题,输入的字符串长了倒是没问题,输入的字符串短了,却取不出数据库中包含此短字符串的长字符串对应的那些数据。
相关代码:
@Autowired
private AccountDao accountDao;
public List<Account> findAccounts(String inputStr, String byWhat) {
List<Account> rst = new ArrayList<>();
try {
List<Account> AllAccounts = accountDao.getAll();
Method getByWhat = Account.class.getMethod("get" + byWhat);
for (Account acc : AllAccounts) {
String rstData = String.valueOf(getByWhat.invoke(acc)).trim();
System.out.print( "\t" + rstData + "\n\n");
if (rstData.contains(inputStr) || inputStr.contains(rstData)
|| rstData.startsWith(inputStr) || inputStr.startsWith(rstData)) {
System.out.println(rstData);
rst.add(acc);
}
}
return rst;
} catch (Exception e) {
e.printStackTrace();
System.err.println("Reflect throws exception!!!!!");
rst.clear();
return rst;
}
}
这是业务层的主要方法,因为想整合一下查找方法,既可能用备注信息note查找又可能用username查找,所以利用反射把getter方法整合了一下, 到底使用哪个查找根据控制台传参控制。
为了确定反射取出的数据没有问题还特意遍历输出了取出的查找依据的数据,结果输出并没有问题,只是不知道为什么如果输入的字符串比数据库中取出的字符串长,则四条判断都没有问题,但如果输入的字符串短,而取出的字符串长,那么这个长字符串始终不能加到返回出来的rst里。
也就是说inputStr.contains(rstData)和inputStr.startWith(rstData)结果完全没问题,而rstData.startWith(inputStr)和rstData.contains(inputStr)好像完全没起作用。
想来想去还是放一下一部分控制台输出吧
输入的Remark参数值为:腾讯
2019-06-04 23:09:51.881 INFO 1288 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2019-06-04 23:09:52.209 INFO 1288 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
奇虎360
百度
B站
博客园
CSDN
当当
印象笔记
码云
GitHub
Git远程
Google
微软
微软
爱奇艺
京东
JetBrains
LeetCode
网易
腾讯
腾讯
腾讯
腾讯
思否
淘宝
淘宝
Tomcat
VPS
微信小程序
新浪微博
小米
优酷
知乎
Postman
MongoDB
腾讯云开发平台
网易
码云
ID: 19
label: QQ_01
note: 腾讯
ID: 20
label: QQ_02
note: 腾讯
两个一模一样的字符串倒是找出来了,像“腾讯云开发平台”这个长字符串则查找不出来,但是我单独用JavaApplication测过contains()了,是可以找出这个长字符串的,怎么到springboot里面就找不出来了