1、要把以下的一段sql轉換成為java語句
SELECT DISTINCT
????c.company_code AS companyCode,
????c.user_name AS userName
FROM user AS c
WHERE CHAR_LENGTH(c.user_name) = 11 AND c.user_name LIKE '1%'
????AND NOT EXISTS (SELECT 1 FROM temp_phone AS p WHERE p.phone = c.user_name)
2、起初我用的查詢如下,發(fā)現(xiàn)結果與SQL執(zhí)行結果數據量出現(xiàn)了很大的差異,結果發(fā)現(xiàn)likeLeft("user_name", "1")并不能替換c.user_name LIKE '1%'
public List<User> getUserList(List<String> phoneList) {
???? return? this.list(new QueryWrapper<User>()
????.likeLeft("user_name", "1")? ? ? ? ? ? ? ?
????.eq("CHAR_LENGTH(user_name)", 11)? ? ? ? ? ? ? ?
????.notIn("user_name", phoneList));
}
3、于是最后修改為
public List<User> getUserList(List<String> phoneList) {
????List<User> userList = this.list(new QueryWrapper<User>()? ? ? ? ? ? ? ? ????????.eq("CHAR_LENGTH(user_name)", 11)? ? ? ? ? ? ? ?
????????.notIn("user_name", phoneList));
????return userList.stream().distinct().filter(user -> user.getUserName().startsWith("1")).collect(Collectors.toList());
}
4、至于為什么likeLeft("user_name", "1")不能替換c.user_name LIKE '1%',likeLeft到底是個什么情況還在研究中,記錄一下,研究好了再來補上