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í)行測試代碼后,報以下錯誤:
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)致了這個異常嗎?
2.問題分析
觀察測試代碼發(fā)現(xiàn),實例化的 user
并未添加進(jìn)入 List
容器,導(dǎo)致 List
容器為空。
由于 List
為空, 最終生成的 SQL 語句變?yōu)?INSERT INTO user (name, age, email) values
,這就產(chǎn)生了 SQL 語法錯誤異常。
因此在使用批量插入語句之前,應(yīng)當(dāng)對集合進(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MybatisPlus出現(xiàn)Error attempting to get column ‘xxx字段‘ from result set異常解決
- Mybatis操作數(shù)據(jù)時出現(xiàn):java.sql.SQLSyntaxErrorException:?Unknown?column?'XXX'?in?'field?list'的問題解決
- MybatisPlusException:Failed?to?process,Error?SQL異常報錯的解決辦法
- Mybatis配置錯誤:java.lang.ExceptionInInitializerError
- MybatisPlus BaseMapper 中的方法全部 Invalid bound statement (not found Error處理)
- 解決Mybatis出現(xiàn)報錯Error querying database.Cause: java.lang.IndexOutOfBoundsException: Index 9 out of
相關(guān)文章
SpringBoot如何統(tǒng)一處理返回結(jié)果和異常情況
這篇文章主要介紹了SpringBoot如何統(tǒng)一處理返回結(jié)果和異常情況問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05利用Spring JPA中的@Version注解實現(xiàn)樂觀鎖
樂觀鎖是數(shù)據(jù)庫和應(yīng)用程序中使用的一種并發(fā)控制策略,用于在多個事務(wù)嘗試更新單個記錄時確保數(shù)據(jù)完整性,Java Persistence API (JPA) 提供了一種借助@Version注解在 Java 應(yīng)用程序中實現(xiàn)樂觀鎖的機(jī)制,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下2023-11-11Java中的break和continue關(guān)鍵字的使用方法總結(jié)
下面小編就為大家?guī)硪黄狫ava中的break和continue關(guān)鍵字的使用方法總結(jié)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-11-11java 使用ElasticSearch完成百萬級數(shù)據(jù)查詢附近的人功能
本篇文章主要介紹了java 使用ElasticSearch完成百萬級數(shù)據(jù)查詢附近的人功能,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01jeefast和Mybatis實現(xiàn)三級聯(lián)動的示例代碼
這篇文章主要介紹了jeefast和Mybatis實現(xiàn)三級聯(lián)動的示例代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10