如何在從java中的table/s中讀取列之後動態創建bean/s(在bean中保留列數據類型)?如何動態創建java bean?
回答
您可以使用一些框架(如http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/)動態創建類。或者,您可以將數據存儲在地圖中,其中鍵是列名,值是列值,多行可以存儲在地圖列表中
+1,我正要提出類似的方法:) – Sujay
有幾個可用於幫助您生成類的框架/庫。 Evgeniy建議javassist。還有類似的庫,比如cglib,asm以及你可以探索的。
但是我真的很想知道更多關於你的用例,因爲在我看來,動態生成的類在靜態類型語言(如Java)中有其缺點。另外,獲取字段數據類型需要使用Java反射機制進行反思。這本身就增加了複雜性。
我建議,以下任一操作:
如果你對數據庫的訪問模式,考慮事先生成bean類。有幾個工具/插件可用於您最喜愛的IDE來實現此目的。
考慮將數據存儲在Map接口的實現中。例如,您可以使用其中的一種將您的列標識映射到數據類型,使用另一種映射列標識與檢索到的數據。然後,您可以在代碼中使用這兩個映射,而無需在運行時創建任何Bean。
UPDATE 以前的答案是立即解決這個問題的一種嘗試。所以這不是FlexBean的最終代碼。 對於最終的代碼,請訪問:https://github.com/ramazanpolat/flexbean
OLD ANSWER
我有同樣的問題,所以我寫了FlexBean。
public class FlexBean {
private List<String> propertyNames = new ArrayList<>();
private Map<String, Object> propertyValueMap = new LinkedHashMap<>();
private List<Type> propertyTypes = new ArrayList<>();
public FlexBean() {
}
public void setProperties(Map<String, Object> props){
for (String propName:props.keySet()){
addProperty(propName, props.get(propName));
}
}
public void addPropertyNames(List<String> propertyNames){
for (String name: propertyNames) {
addProperty(name);
}
}
public Collection<Object> getPropertyValues(){
return propertyValueMap.values();
}
public List<String> getPropertyNames() {
return propertyNames;
}
public Map<String, Object> getPropertyValueMap() {
return propertyValueMap;
}
public List<Type> getPropertyTypes() {
return propertyTypes;
}
public void addProperty(String propName, Type propType){
propertyNames.add(propName);
propertyTypes.add(propType);
}
public void addProperty(String propName){
// default property type is String
addProperty(propName, String.class);
}
public void addProperty(String propName, Object value){
addProperty(propName);
setProperty(propName, value);
}
public void addProperty(String propName, Type propType, Object value){
addProperty(propName, propType);
setProperty(propName, value);
}
public int getPropertyIndex(String propName){
return propertyNames.indexOf(propName);
}
public Type getPropertyType(String propName){
int index = getPropertyIndex(propName);
return Iterables.get(propertyTypes,index);
}
public void setProperty(String propName, Object propValue){
propertyValueMap.put(propName, propValue);
}
public Object getPropertyValue(String propName){
return propertyValueMap.get(propName);
}
public <Any> Any getTypedPropertyValue(String propName){
return (Any)((Any) propertyValueMap.get(propName));
}
public Object getProperty(int propIndex){
return Iterables.get(propertyValueMap.entrySet(),propIndex).getValue();
}
}
用法:
FlexBean flexBean = new FlexBean();
flexBean.addProperty("prop1", 1); // int inferred
flexBean.addProperty("prop2", "value2"); // string inferred
flexBean.addProperty("prop3", 0.1f); // float inferred
for (Object o: flexBean.getPropertyValues()) {
System.out.println(o);
}
int prop1 = flexBean.getTypedPropertyValue("prop1");
String prop2 = flexBean.getTypedPropertyValue("prop2");
float prop3 = flexBean.getTypedPropertyValue("prop3");
- 1. 動態Spring bean創建
- 2. Spring - 從application.properties動態創建Bean
- 3. 使用bean創建動態selectOneRadion
- 4. grails插件動態bean創建
- 5. 如何動態創建XML(java)?
- 6. 如何動態創建Java POJO類?
- 7. 自動Bean創建
- 8. 如何將圖像從java bean添加到<p:動態創建的樹?
- 9. Bean驗證:如何手動創建ConstraintViolation?
- 10. 如何在Spring MVC的不同類中創建動態bean
- 11. 如何動態創建的Spring bean和註釋集新創建的豆
- 12. 創建JNDI Java Bean錯誤
- 13. 動態注入bean?或未由Spring創建的@Autowire bean
- 14. Java創建動態ObservableList
- 15. Java Swing - 動態創建JTextField
- 16. 動態創建對象java
- 17. 創建動態類型Java
- 18. 動態創建Java Pojo
- 19. Java - 動態創建頂點
- 20. Java - 動態創建子類
- 21. 春:如何主bean創建
- 22. 如何創建MongoOperations Bean?
- 23. 動態創建豆
- 24. 如何創建動態域?
- 25. 如何創建動態樹?
- 26. 如何動態創建TextView
- 27. 如何動態創建類
- 28. 如何動態創建RadioButtons
- 29. 如何創建動態gridview?
- 30. 如何動態創建xml?
您沒有訪問數據庫架構?我在想你爲什麼需要首先動態創建bean – Sujay
@Sujay假設你有一個SQL編輯器,它接受任何sql然後運行。你會如何表示數據?你需要一個動態bean綁定到網格。 –