簡體   English   中英

如何使用mybatis在數據庫中插入java HashMap鍵和值作為列

[英]How to insert java HashMap keys and values as columns in database using mybatis

我正在關注 SpringBoot + MyBatis 教程。我能夠將簡單的對象插入到數據庫中。 例如,我嘗試插入一個員工對象:

Employee{
    private String id;
    private String name;
}


@Mapper
public interface EmployeeMapper {  

    @Insert("insert into employee(id,name) values(#{id},#{name})")
    void insert(Employee employee);
 }

現在我想插入另一個對象,如下所示:

Department{
    // deptId will be common for all employees in the map
    private int deptId;

    //employeeMap is a Map employees where employeeId is key and employeeName is value
    private Map<String, String> employeeMap;
  }

 //Eg. I have the following data in Department Object
 Department dept = new Department();
 dept.setId("d1");

 Map<String, String> employeeMap = new HashMap<String, String>();
 employeeMap.put("1","Jon");
 employeeMap.put("2","Doe");
 employeeMap.put("3","Sam");
 dept.setEmployeeMap(employeeMap);

 // I want to insert dept object as 3 columns in database
 //*deptId* will be common for all employees in Map
 //*employeeId* key of map 
 //*employeeName* valiue of map

我無法解決它,這不能像簡單的 Employee 示例中那樣使用 @Insert 來完成。 請幫忙,因為我被困在這個問題上。

如果您希望迭代低谷地圖並獲取該鍵的每個鍵和值,最簡單的方法是

Iterator hmIterator = employeeMap.entrySet().iterator();
while (hmIterator.hasNext()){
    Map.Entry mapElement = (Map.Entry)hmIterator.next();
    String name = (String)mapElement.GetValue();
    String number = (String)mapElement.getKey();
    insert(number,name);
}

或者沒有迭代器

for (Map.Entry<String,String> entry : map.entrySet()){
    String key = entry.getKey(); //this is your number
    String value = entry.getValue(); //this is your name
    insert(key,value);
}

或者另一種方法是

for (String key : employeeMap.keySet()){
    String name = employeeMap.get(key);
    insert(key, name);
}

注意:我只寫了函數insert因為我不知道你如何調用你的插入但替換你希望的方法

或者,您可以使用<foreach />來迭代映射條目。
'key' 分配給index指定的變量,'value' 分配給item指定的變量。

由於您沒有向我展示 SQL,我假設您的數據庫支持多行插入

@Insert({ "<script>",
  "insert into employee (deptId, employeeId, employeeName) values",
  "<foreach collection='employeeMap' index='key' item='value'",
      "separator=','>",
    "(#{deptId}, #{key}, #{value})",
  "</foreach>",
  "</script>"
})
void insert(Department dept);

然后 MyBatis 會准備一個如下的語句。

insert into employee (deptId, employeeId, employeeName) 
  values (?, ?, ?) , (?, ?, ?) , (?, ?, ?)

請注意,當employeeMap有很多條目時,建議使用批量插入

暫無
暫無

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

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