2016-08-23 43 views
0

我使用的是Spring-boot和Oracle,我想用NamedParameterJdbcTemplateinsertbatch方法插入我的數據庫表中新記錄。使用spring NamedParameterJdbcTemplate insertbatch方法,插入對象有內部對象

但我object(ProductMarket)有內object(Market)與我所需要的值(getMarket()的getId())

我怎麼能告訴SqlParameterSource從內Object走市場ID?

package x.dao.productMarket; 

import java.util.List; 

import x.model.base.ProductMarket; 

public interface IProductMarketDao { 

    public static final String INSERT_PRODUCT_MARKETS = 
     " INSERT " + 
     " INTO PRODUCT_MARKETS" + 
     " (" + 
     " product_id ," + 
     " market_id" + 
     ")" + 
     " VALUES" + 
     " (" + 
     " :productId ," + 
     " :marketId " + 
     ") "; 


    void insert(List <ProductMarket> productMarkets); 

} 



package x.dao.productMarket; 

import java.util.List; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; 
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; 
import org.springframework.jdbc.core.namedparam.SqlParameterSource; 
import org.springframework.jdbc.core.namedparam.SqlParameterSourceUtils; 
import org.springframework.stereotype.Repository; 

import x.model.base.ProductMarket; 

@ 
Repository 
public class ProductMarketDao implements IProductMarketDao { 

    @ 
    Autowired 
    private NamedParameterJdbcTemplate namedParameterJdbcTemplate; 


    @ 
    Override 
    public void insert(List <ProductMarket> productMarkets) { 
     SqlParameterSource[] batch = 
      SqlParameterSourceUtils.createBatch(productMarkets.toArray()); 
     namedParameterJdbcTemplate.batchUpdate(INSERT_PRODUCT_MARKETS, 
      batch); 
    } 
} 

package x.model.base; 

public class ProductMarket implements Serializable { 

    private static final long serialVersionUID = 421870753189756693 L; 

    private long productId; 
    private Market market; 

    /** 
    * @return the productId 
    */ 
    public long getProductId() { 
      return productId; 
     } 
     /** 
     * @param productId the productId to set 
     */ 
    public void setProductId(long productId) { 
     this.productId = productId; 
    } 


    public Market getMarket() { 
     return market; 
    } 
    public void setMarket(Market market) { 
     this.market = market; 
    } 

} 
+0

你使用彈簧靴嗎? – lolo

+0

@lolo是的,我正在使用彈簧引導 –

回答

0

假設市場的定義如下:

class Market { 
    private final int id; 
    private final String name; 

    public Market(int id, String name) { 
     this.id = id; 
     this.name = name; 
    } 

    public int getId() { 
     return id; 
    } 

    public String getName() { 
     return name; 
    } 
} 

然後你就可以改變你的SQL模板如下:

static final String INSERT_PRODUCT_MARKETS = 
     " INSERT " + 
       " INTO product_markets" + 
       " (" + 
       " product_id ," + 
       " market_id" + 
       ")" + 
       " VALUES" + 
       " (" + 
       " :productId ," + 
       " :market.id " + 
       ") "; 

注意我是如何使用路徑來代表命名參數的格式爲:market.id,其中marketProductMarket中字段的名稱,id是中字段的名稱。

一旦以這種方式定義,NamedParameterJdbcTemplate將能夠取消引用相應的值並將其用作查詢的參數。