基于Java反射的map自動(dòng)裝配JavaBean工具類(lèi)設(shè)計(jì)示例代碼
前言
JavaBean是一個(gè)特殊的java類(lèi),本文將給大家詳細(xì)介紹關(guān)于基于Java反射的map自動(dòng)裝配JavaBean工具類(lèi)設(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ì)腳本之家的支持。
- Java如何將任意類(lèi)型的Object對(duì)象轉(zhuǎn)換為相應(yīng)的實(shí)體對(duì)象
- java中給實(shí)體對(duì)象屬性的空值賦默認(rèn)值
- java開(kāi)發(fā)BeanUtils類(lèi)解決實(shí)體對(duì)象間賦值
- Java 判斷實(shí)體對(duì)象及所有屬性是否為空的操作
- java實(shí)體對(duì)象與Map之間的轉(zhuǎn)換工具類(lèi)代碼實(shí)例
- 淺談Java實(shí)體對(duì)象的三種狀態(tài)以及轉(zhuǎn)換關(guān)系
- Java利用反射自動(dòng)封裝成實(shí)體對(duì)象的方法
- Java如何通過(guò)反射將map轉(zhuǎn)換為實(shí)體對(duì)象
相關(guān)文章
Java多線程 ReentrantReadWriteLock原理及實(shí)例詳解
這篇文章主要介紹了Java多線程 ReentrantReadWriteLock原理及實(shí)例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
Java 爬蟲(chóng)如何爬取需要登錄的網(wǎng)站
這篇文章主要介紹了Java 爬蟲(chóng)如何爬取需要登錄的網(wǎng)站,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10
在 Spring Boot 中使用 @Autowired和 @Bean
本文通過(guò)一個(gè)示例演示了如何在SpringBoot中使用@Autowired和@Bean注解進(jìn)行依賴(lài)注入和Bean管理,示例中定義了一個(gè)Student類(lèi),并通過(guò)配置類(lèi)TestConfig初始化Student對(duì)象,在測(cè)試類(lèi)中,通過(guò)@Autowired注解自動(dòng)注入Student對(duì)象并輸出其屬性值,感興趣的朋友跟隨小編一起看看吧2025-02-02
restTemplate發(fā)送get與post請(qǐng)求并且?guī)?shù)問(wèn)題
這篇文章主要介紹了restTemplate發(fā)送get與post請(qǐng)求并且?guī)?shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
從零到掌握Spring Boot Validation 接口校驗(yàn)的詳細(xì)過(guò)程
本文詳細(xì)介紹了SpringBoot的Validation接口校驗(yàn)機(jī)制,包括其核心功能、常用注解、自定義校驗(yàn)、以及實(shí)際應(yīng)用場(chǎng)景,通過(guò)注解定義數(shù)據(jù)校驗(yàn)規(guī)則,感興趣的朋友跟隨小編一起看看吧2025-02-02
Mybatis-plus?代碼生成器?AutoGenerator?的簡(jiǎn)介和使用詳解
AutoGenerator是MyBatis-Plus的代碼生成器,通過(guò)AutoGenerator可以快速生成?Entity、Mapper、Mapper XML、Service、Controller等各個(gè)模塊的代碼,極大的提升了開(kāi)發(fā)效率,這篇文章主要介紹了Mybatis-plus代碼生成器AutoGenerator的簡(jiǎn)介和使用,需要的朋友可以參考下2023-05-05
SpringBoot+actuator和admin-UI實(shí)現(xiàn)監(jiān)控中心方式
這篇文章主要介紹了SpringBoot+actuator和admin-UI實(shí)現(xiàn)監(jiān)控中心方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05

