MyBatis異常java.sql.SQLSyntaxErrorException的問(wèn)題解決
1.問(wèn)題描述
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>
測(cè)試代碼:
@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í)行測(cè)試代碼后,報(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)哪里的問(wèn)題導(dǎo)致了這個(gè)異常嗎?
2.問(wèn)題分析
觀察測(cè)試代碼發(fā)現(xiàn),實(shí)例化的 user
并未添加進(jìn)入 List
容器,導(dǎo)致 List
容器為空。
由于 List
為空, 最終生成的 SQL 語(yǔ)句變?yōu)?INSERT INTO user (name, age, email) values
,這就產(chǎn)生了 SQL 語(yǔ)法錯(cuò)誤異常。
因此在使用批量插入語(yǔ)句之前,應(yīng)當(dāng)對(duì)集合進(jìn)行判空處理。修改后的測(cè)試代碼如下:
@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的問(wèn)題解決的文章就介紹到這了,更多相關(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'的問(wèn)題解決
- 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)文章
SpringBoot如何統(tǒng)一處理返回結(jié)果和異常情況
這篇文章主要介紹了SpringBoot如何統(tǒng)一處理返回結(jié)果和異常情況問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05利用Spring JPA中的@Version注解實(shí)現(xiàn)樂(lè)觀鎖
樂(lè)觀鎖是數(shù)據(jù)庫(kù)和應(yīng)用程序中使用的一種并發(fā)控制策略,用于在多個(gè)事務(wù)嘗試更新單個(gè)記錄時(shí)確保數(shù)據(jù)完整性,Java Persistence API (JPA) 提供了一種借助@Version注解在 Java 應(yīng)用程序中實(shí)現(xiàn)樂(lè)觀鎖的機(jī)制,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下2023-11-11Java中的break和continue關(guān)鍵字的使用方法總結(jié)
下面小編就為大家?guī)?lái)一篇Java中的break和continue關(guān)鍵字的使用方法總結(jié)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11java 使用ElasticSearch完成百萬(wàn)級(jí)數(shù)據(jù)查詢附近的人功能
本篇文章主要介紹了java 使用ElasticSearch完成百萬(wàn)級(jí)數(shù)據(jù)查詢附近的人功能,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01jeefast和Mybatis實(shí)現(xiàn)三級(jí)聯(lián)動(dòng)的示例代碼
這篇文章主要介紹了jeefast和Mybatis實(shí)現(xiàn)三級(jí)聯(lián)動(dòng)的示例代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10