第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

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

標(biāo)簽:
Java 設(shè)計(jì)

我们平时在用Myabtis时不是常常需要用map来传递参数,大体是如下的步骤:

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的字段很多,而且每个属性名都很长的时候,那就很难受了,这里可以采用Java反射的方法去自动装配map,以下是博主的实现:

public class Test {    //实现效果
    public static void main(String[] args) {
        HashMap<String, Object> map = new HashMap<>();
        Person person1 = new Person();
        person1.setAge(2);
        person1.setName("foonsu");        //调用写好的mapBuild自动装配
        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()));
        }
    }    /**
     * 根据属性,获取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:在这是直接采遍历的方法,时间复杂度是O(N^2)的,因为在实际生产中一个JavaBean属性的设计也不会非常多,其实也可以采用空间换时间的思想将方法优化到O(n)的时间复杂度。

原文出处:https://www.cnblogs.com/keeya/p/9432314.html

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫(xiě)下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專(zhuān)欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消