国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > Java > 正文

基于Java反射的map自動(dòng)裝配JavaBean工具類設(shè)計(jì)示例代碼

2024-07-14 08:42:34
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

JavaBean是一個(gè)特殊的java類,本文將給大家詳細(xì)介紹關(guān)于基于Java反射的map自動(dòng)裝配JavaBean工具類設(shè)計(jì)的相關(guān)內(nèi)容,下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧

方法如下

我們平時(shí)在用Myabtis時(shí)不是常常需要用map來(lái)傳遞參數(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)用寫(xiě)好的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à)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JAVA教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 苗栗县| 寿光市| 宜兰县| 咸宁市| 阳新县| 璧山县| 若尔盖县| 凌云县| 黔东| 余姚市| 石狮市| 繁昌县| 郧西县| 东宁县| 定远县| 田阳县| 合肥市| 北辰区| 鄂伦春自治旗| 赞皇县| 英德市| 赣榆县| 丰台区| 万源市| 长乐市| 蒙山县| 马公市| 东乌珠穆沁旗| 景洪市| 石首市| 宜州市| 宜宾市| 青龙| 鄯善县| 武山县| 庆安县| 商都县| 嵊泗县| 方正县| 佛教| 兴安县|