[英]How insert values into a row using a hashmap in mybatis while using annotations?
[英]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.