亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2018年10月15日 08:39:54   作者:上帝愛(ài)吃蘋果-Soochow  
這篇文章主要給大家介紹了關(guān)于基于Java反射的map自動(dòng)裝配JavaBean工具類設(shè)計(jì)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧

前言

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)用寫好的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ì)腳本之家的支持。

相關(guān)文章

  • java GUI實(shí)現(xiàn)加法計(jì)算器

    java GUI實(shí)現(xiàn)加法計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了java GUI實(shí)現(xiàn)加法計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Maven本地jar引用的實(shí)現(xiàn)方法

    Maven本地jar引用的實(shí)現(xiàn)方法

    這篇文章主要介紹了Maven本地jar引用的實(shí)現(xiàn)方法的相關(guān)資料,希望通過(guò)本文能幫助到大家,實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-10-10
  • java實(shí)現(xiàn)客戶管理系統(tǒng)

    java實(shí)現(xiàn)客戶管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)客戶管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java過(guò)濾器@WebFilter用法詳解

    Java過(guò)濾器@WebFilter用法詳解

    @WebFilter用于將一個(gè)類聲明為過(guò)濾器,該注解將會(huì)在部署時(shí)被容器處理,容器將根據(jù)具體的屬性配置將相應(yīng)的類部署為過(guò)濾器,這篇文章主要給大家介紹了關(guān)于Java過(guò)濾器@WebFilter用法的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • Windows系統(tǒng)下JDK1.8與JDK11版本切換超詳細(xì)教程

    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)增刪改查操作

    這篇文章主要介紹了mybatis3使用@Select等注解實(shí)現(xiàn)增刪改查操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • Spring源碼如何修改Bean的屬性用到的相關(guān)類

    Spring源碼如何修改Bean的屬性用到的相關(guān)類

    這篇文章主要介紹了Spring源碼如何修改Bean的屬性用到的相關(guān)類,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java中字符串和byte數(shù)組之間的簡(jiǎn)單轉(zhuǎn)換方法

    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é)

    jdk7 中HashMap的知識(shí)點(diǎn)總結(jié)

    HashMap的原理是老生常談了,不作仔細(xì)解說(shuō)。一句話概括為HashMap是一個(gè)散列表,它存儲(chǔ)的內(nèi)容是鍵值對(duì)(key-value)映射。這篇文章主要總結(jié)了關(guān)于jdk7 中HashMap的知識(shí)點(diǎn),需要的朋友可以參考借鑒,一起來(lái)看看吧。
    2017-01-01
  • 關(guān)于log4j漏洞修復(fù)解決方案及源碼編譯

    關(guān)于log4j漏洞修復(fù)解決方案及源碼編譯

    Log4j?是Apache為Java提供的日志管理工具。他與System.out.println()的作用相似,用來(lái)跟蹤、調(diào)試、維護(hù)程序。這篇文章主要介紹了關(guān)于log4j漏洞修復(fù)解決方案及源碼編譯,需要的朋友可以參考下
    2021-12-12

最新評(píng)論