簡體   English   中英

使用MyBatis將幾個簡單的對象插入表中

[英]Inserting several simple objects into a table using MyBatis

假設我在這樣的數據庫中有一個表:

CREATE TABLE entities( 
    id INT PRIMARY KEY AUTO_INCREMENT,
    friendly_name VARCHAR(100),
    data1 BLOB NOT NULL,
    data2 BLOB NOT NULL,
    loads of other fields
)
ENGINE INNODB;

我有一個MyBatis映射器,我想用它來創建一個僅插入friendly_namedata1data2 ,但不插入其他字段的插入。

我想沿着這些行在映射器中創建一個方法:

public void addNewUnverifiedEntity(String friendlyName, byte[] data1, byte[] data2);

我的映射器xml中包含以下內容:

<insert id="addNewUnverifiedEntity" useGeneratedKeys="true" keyProperty="id">
  insert into entities (friendly_name,data1,data2)
  values (#{friendlyName},#{data1},#{data2})
</insert>

但是,當我嘗試調用mapper方法時,出現以下異常:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'data1' cannot be null
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
...

在日志輸出中,我也看到了這個gem:

16:59:36.754 [main] DEBUG o.a.i.d.pooled.PooledDataSource - Created connection 1110623531.
16:59:36.764 [main] DEBUG java.sql.Connection - ooo Connection Opened
16:59:36.987 [main] DEBUG java.sql.PreparedStatement - ==>  Executing: insert into entities (friendly_name,verified_by,key_digest,key_data) values (?,?,?,?) 
16:59:36.987 [main] DEBUG java.sql.PreparedStatement - ==> Parameters: null, null, null, null

數據似乎實際上並沒有從映射器傳遞到語句,因此也沒有從表傳遞到表。 (我用兩個非空字節數組和一個定義的字符串調用了該方法)

我可以看到我可以創建一個POJO來僅包含這些字段,但是我寧願使用映射器中的方法。

我如何才能使類似addNewUnverifiedEntity的方法正常工作?

回答我自己的問題。 似乎在將多個參數發布到mybatis映射器時,這些參數是按其位置而不是其名稱來命名的,因此在本例中為#{1}#{2}#{3}。 為了使映射器xml在我的情況下(具有有意義的名稱)起作用,可以使用@Param標記對映射器方法參數進行注釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM