基于Java反射的map自動(dòng)裝配JavaBean工具類設(shè)計(jì)示例代碼
前言
JavaBean是一個(gè)特殊的java類,本文將給大家詳細(xì)介紹關(guān)于基于Java反射的map自動(dòng)裝配JavaBean工具類設(shè)計(jì)的相關(guān)內(nèi)容,下面話不多說了,來一起看看詳細(xì)的介紹吧
方法如下
我們平時(shí)在用Myabtis時(shí)不是常常需要用map來傳遞參數(shù),大體是如下的步驟:
public List<Role> findRoles(Map<String,Object> param);
<select id="dindRoles" parameterType="map" resultType="role">
select id,role_name as roleName,note form t_role
where role_name = #{roleName}
and note = #{note}
</select>
//我們常常需要手打這些字段名
Map<String,Object> map = new HashMap<>();
map.put("roleName","xiaoming");
map.put("note","10");
List<Role> roles = roleMapper.findRoles(map);
但如果需要put的字段很多,而且每個(gè)屬性名都很長(zhǎng)的時(shí)候,那就很難受了,這里可以采用Java反射的方法去自動(dòng)裝配map,以下是博主的實(shí)現(xiàn):
public class Test {
//實(shí)現(xiàn)效果
public static void main(String[] args) {
HashMap<String, Object> map = new HashMap<>();
Person person1 = new Person();
person1.setAge(2);
person1.setName("foonsu");
//調(diào)用寫好的mapBuild自動(dòng)裝配
mapBuild(person1, map);
//輸出效果
for (Map.Entry entry : map.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
public static void mapBuild(Object javaBean, Map map) {
Class clazz = javaBean.getClass();
//反射獲取
Field[] name = clazz.getDeclaredFields();
for (Field field : name) {
//將非null的javaBean屬性值裝配到map中
if (getGetMethod(javaBean,field.getName())!=null)
map.put(field.getName(), getGetMethod(javaBean,field.getName()));
}
}
/**
* 根據(jù)屬性,獲取get方法
*/
public static Object getGetMethod(Object ob, String name) {
Method[] m = ob.getClass().getMethods();
try {
for (int i = 0; i < m.length; i++) {
if (("get" + name).toLowerCase().equals(m[i].getName().toLowerCase())) {
return m[i].invoke(ob);
}
}
} catch (Exception e) {
}
return null;
}
}
class Person{
int age;
String name;
String personId;
public String getPersonId() {
return personId;
}
public void setPersonId(String personId) {
this.personId = personId;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Ps:在這是直接采遍歷的方法,時(shí)間復(fù)雜度是O(N^2)的,因?yàn)樵趯?shí)際生產(chǎn)中一個(gè)JavaBean屬性的設(shè)計(jì)也不會(huì)非常多,其實(shí)也可以采用空間換時(shí)間的思想將方法優(yōu)化到O(n)的時(shí)間復(fù)雜度。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- Java如何將任意類型的Object對(duì)象轉(zhuǎn)換為相應(yīng)的實(shí)體對(duì)象
- java中給實(shí)體對(duì)象屬性的空值賦默認(rèn)值
- java開發(fā)BeanUtils類解決實(shí)體對(duì)象間賦值
- Java 判斷實(shí)體對(duì)象及所有屬性是否為空的操作
- java實(shí)體對(duì)象與Map之間的轉(zhuǎn)換工具類代碼實(shí)例
- 淺談Java實(shí)體對(duì)象的三種狀態(tài)以及轉(zhuǎn)換關(guān)系
- Java利用反射自動(dòng)封裝成實(shí)體對(duì)象的方法
- Java如何通過反射將map轉(zhuǎn)換為實(shí)體對(duì)象
相關(guān)文章
java GUI實(shí)現(xiàn)加法計(jì)算器
這篇文章主要為大家詳細(xì)介紹了java GUI實(shí)現(xiàn)加法計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04
Windows系統(tǒng)下JDK1.8與JDK11版本切換超詳細(xì)教程
這篇文章主要給大家介紹了關(guān)于Windows系統(tǒng)下JDK1.8與JDK11版本切換的超詳細(xì)教程,我們可以有多個(gè)工程項(xiàng)目,用的JDK版本不一樣,這個(gè)時(shí)候就需要進(jìn)行自由切換JDK版本了,需要的朋友可以參考下2023-07-07
mybatis3使用@Select等注解實(shí)現(xiàn)增刪改查操作
這篇文章主要介紹了mybatis3使用@Select等注解實(shí)現(xiàn)增刪改查操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-11-11
Spring源碼如何修改Bean的屬性用到的相關(guān)類
這篇文章主要介紹了Spring源碼如何修改Bean的屬性用到的相關(guān)類,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
Java中字符串和byte數(shù)組之間的簡(jiǎn)單轉(zhuǎn)換方法
這篇文章主要給大家介紹了關(guān)于Java中字符串和byte數(shù)組之間的簡(jiǎn)單轉(zhuǎn)換方法,Java中將String類型轉(zhuǎn)換為byte[]類型,可以使用String的getBytes()方法,還有很多其他的辦法,需要的朋友可以參考下2023-08-08
jdk7 中HashMap的知識(shí)點(diǎn)總結(jié)
HashMap的原理是老生常談了,不作仔細(xì)解說。一句話概括為HashMap是一個(gè)散列表,它存儲(chǔ)的內(nèi)容是鍵值對(duì)(key-value)映射。這篇文章主要總結(jié)了關(guān)于jdk7 中HashMap的知識(shí)點(diǎn),需要的朋友可以參考借鑒,一起來看看吧。2017-01-01
關(guān)于log4j漏洞修復(fù)解決方案及源碼編譯
Log4j?是Apache為Java提供的日志管理工具。他與System.out.println()的作用相似,用來跟蹤、調(diào)試、維護(hù)程序。這篇文章主要介紹了關(guān)于log4j漏洞修復(fù)解決方案及源碼編譯,需要的朋友可以參考下2021-12-12

