MyBatis異常java.sql.SQLSyntaxErrorException的問題解決
1.問題描述
pojo類:
@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
@ToString
public class User {
private Integer id;
private String name;
private Integer age;
private String email;
public User(String name, Integer age, String email) {
this.name = name;
this.age = age;
this.email = email;
}
}Dao類:
@Mapper
public interface UserDao {
void insertBatch(@Param("users") List<User> users);
}Mapper文件:
<insert id="insertBatch" useGeneratedKeys="true"
keyProperty="id" parameterType="User">
INSERT INTO user (`name`, age, email) values
<foreach collection="users" item="item" separator="," >
(#{item.name,jdbcType=VARCHAR}, #{item.age,jdbcType=INTEGER}, #{item.email,jdbcType=VARCHAR})
</foreach>
</insert>測試代碼:
@Test
public void test_insertBatch(){
List<User> users = new ArrayList<User>(){{
User user = new User("sumAll",22,"sumAll@163.com");
User user2 = new User("sumAll2",20,"sumAll2@163.com");
}};
userDao.insertBatch(users);
logger.info(users.toString());
}執(zhí)行測試代碼后,報(bào)以下錯(cuò)誤:
org.springframework.jdbc.BadSqlGrammarException:
Error updating database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
The error may exist in file [xxx]
The error may involve com.sumAll.dao.UserDao.insertBatch-Inline
The error occurred while setting parameters
SQL: INSERT INTO user (name, age, email) values
大伙兒,發(fā)現(xiàn)哪里的問題導(dǎo)致了這個(gè)異常嗎?
2.問題分析
觀察測試代碼發(fā)現(xiàn),實(shí)例化的 user 并未添加進(jìn)入 List 容器,導(dǎo)致 List 容器為空。

由于 List 為空, 最終生成的 SQL 語句變?yōu)?INSERT INTO user (name, age, email) values ,這就產(chǎn)生了 SQL 語法錯(cuò)誤異常。

因此在使用批量插入語句之前,應(yīng)當(dāng)對(duì)集合進(jìn)行判空處理。修改后的測試代碼如下:
@Test
public void test_insertBatch(){
List<User> users = new ArrayList<User>(){{
User user = new User("sumAll",22,"sumAll@163.com");
User user2 = new User("sumAll2",20,"sumAll2@163.com");
add(user);
add(user2);
}};
if(!users.isEmpty()){
userDao.insertBatch(users);
logger.info(users.toString());
}
}執(zhí)行結(jié)果如下:

到此這篇關(guān)于MyBatis異常java.sql.SQLSyntaxErrorException的問題解決的文章就介紹到這了,更多相關(guān)MyBatis java.sql.SQLSyntaxErrorException內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MybatisPlus出現(xiàn)Error attempting to get column ‘xxx字段‘ from result set異常解決
- Mybatis操作數(shù)據(jù)時(shí)出現(xiàn):java.sql.SQLSyntaxErrorException:?Unknown?column?'XXX'?in?'field?list'的問題解決
- MybatisPlusException:Failed?to?process,Error?SQL異常報(bào)錯(cuò)的解決辦法
- Mybatis配置錯(cuò)誤:java.lang.ExceptionInInitializerError
- MybatisPlus BaseMapper 中的方法全部 Invalid bound statement (not found Error處理)
- 解決Mybatis出現(xiàn)報(bào)錯(cuò)Error querying database.Cause: java.lang.IndexOutOfBoundsException: Index 9 out of
相關(guān)文章
Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之二手書商城系統(tǒng)的實(shí)現(xiàn)
這是一個(gè)使用了java+JSP+Springboot+maven+mysql+ThymeLeaf+FTP開發(fā)的二手書商城系統(tǒng),是一個(gè)畢業(yè)設(shè)計(jì)的實(shí)戰(zhàn)練習(xí),具有在線書城該有的所有功能,感興趣的朋友快來看看吧2022-01-01
解決IDEA和CMD中java命令提示錯(cuò)誤: 找不到或無法加載主類的問題
這篇文章主要介紹了解決IDEA和CMD中java命令提示錯(cuò)誤: 找不到或無法加載主類的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
Java中常用的數(shù)據(jù)庫連接池_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
數(shù)據(jù)庫連接池負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫連接,它允許應(yīng)用程序重復(fù)使用一個(gè)現(xiàn)有的數(shù)據(jù)庫連接,而不是再重新建立一個(gè);釋放空閑時(shí)間超過最大空閑時(shí)間的數(shù)據(jù)庫連接來避免因?yàn)闆]有釋放數(shù)據(jù)庫連接而引起的數(shù)據(jù)庫連接遺漏2017-08-08
java并發(fā)編程工具類PriorityBlockingQueue優(yōu)先級(jí)隊(duì)列
這篇文章主要為大家介紹了java并發(fā)編程工具類PriorityBlockingQueue優(yōu)先級(jí)隊(duì)列的方法示例應(yīng)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03
SpringBoot整合H2數(shù)據(jù)庫的操作方法
H2是一個(gè)Java語言編寫的嵌入式數(shù)據(jù)庫,它不受平臺(tái)的限制,同時(shí)H2提供了一個(gè)十分方便的web控制臺(tái),用于操作和管理數(shù)據(jù)庫內(nèi)容,本文介紹SpringBoot整合H2數(shù)據(jù)庫的方法,感興趣的朋友一起看看吧2024-01-01
Java8 中使用Stream 讓List 轉(zhuǎn) Map使用問題小結(jié)
這篇文章主要介紹了Java8 中使用Stream 讓List 轉(zhuǎn) Map使用總結(jié),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-06-06
Spring Boot詳細(xì)打印啟動(dòng)時(shí)異常堆棧信息詳析
這篇文章主要給大家介紹了關(guān)于Spring Boot詳細(xì)打印啟動(dòng)時(shí)異常堆棧信息的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10

