日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BeanUtils

發布時間:2023/12/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BeanUtils 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

    • 前言
    • 推薦文章
    • Maven依賴
    • 常用API
    • 常見使用場景
    • 日期類型的拷貝
    • 封裝工具類


前言

Apache BeanUtils是一種方便我們對JavaBean進行操作的工具類。

阿里巴巴java開發手冊(泰山版):

從上圖中可以看出實際開發中我們應選擇 Spring BeanUtils,一方面不需要額外引入依賴包,另一方面性能會比Apache BeanUtils 性能好(同理的還有 Spring StringUtils),所以【本文內容僅做了解】!!!


推薦文章

不考慮性能,從拓展性角度看看!BeanUtils還是有很多問題的!

  • 復制對象時字段類型不一致,導致賦值不上,你怎么解決?自己拓展?
  • 復制對象時字段名稱不一致,例如CarPo里叫carName,CarVo里叫name,導致賦值不上,你怎么解決?自己拓展?
  • 如果是集合類的復制,例如List<CarPo>轉換為List<CarVo>,你怎么處理?
    (省略一萬字…)

【如何優雅的轉換Bean對象】

【Java 實體映射工具 MapStruct】


Maven依賴

<dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>1.9.4</version> </dependency>

常用API

// 把orig對象copy到dest對象中. public void copyProperties (Object dest, Object orig)// 把Bean的屬性值放入到一個Map里面 public Map describe(Object bean)// 把map里面的值放入bean中 public void populate (Object bean, Map map)// 設置Bean對象中名稱為name的屬性值賦值為value. public void setProperty(Object bean,String name, Object value)// 取得bean對象中名為name的屬性的值 public String getProperty(Object bean, String name)

常見使用場景

  • 同類之間不同對象要求進行數據復制
User user1 = new User(); user1.setName("張三"); User user2 = new User(); // 把user1復制給user2 BeanUtils. copyProperties(user2,user1);
  • 不同類不同對象之間的數據復制
UserForm userForm = new UserForm (); User user = new User(); // 把userForm 復制給user BeanUtils. copyProperties(user, userForm);
  • 對象數據和Map之間互相轉化
User user = new User(); // 將對象轉換為Map Map userMap = BeanUtils.describe(user);Map userMap = new HashMap(); User user = new User(); // 將Map轉換為對象 BeanUtils.populate(user,userMap);

日期類型的拷貝

BeanUtils.copyProperties支持Date類型:
【轉】BeanUtils.copyProperties支持Date類型

import java.lang.reflect.InvocationTargetException; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.ConvertUtils; import org.apache.log4j.Logger;/*** 擴展BeanUtils.copyProperties支持data類型*/ public class BeanUtilsEx extends BeanUtils {private static Logger logger = Logger.getLogger(BeanUtilsEx.class);static {ConvertUtils.register(new DateConvert(), java.util.Date.class);ConvertUtils.register(new DateConvert(), String.class);}public static void copyProperties(Object target, Object source) {// 支持對日期copytry {org.apache.commons.beanutils.BeanUtils.copyProperties(target, source);} catch (IllegalAccessException | InvocationTargetException e) {logger.error("擴展BeanUtils.copyProperties支持data類型:" + e.getMessage());e.printStackTrace();}} } import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.beanutils.Converter;/*** 擴展BeanUtils.copyProperties支持data類型*/ public class DateConvert implements Converter {@Overridepublic Object convert(Class class1, Object value) {if (value == null) {return null;}if (value instanceof Date) {return value;}if (value instanceof Long) {Long longValue = (Long) value;return new Date(longValue.longValue());}if (value instanceof String) {String dateStr = (String) value;Date endTime = null;try {String regexp1 = "([0-9]{4})-([0-1][0-9])-([0-3][0-9])T([0-2][0-9]):([0-6][0-9]):([0-6][0-9])";String regexp2 = "([0-9]{4})-([0-1][0-9])-([0-3][0-9])(/t)([0-2][0-9]):([0-6][0-9]):([0-6][0-9])";String regexp3 = "([0-9]{4})-([0-1][0-9])-([0-3][0-9])";if (dateStr.matches(regexp1)) {dateStr = dateStr.split("T")[0] + " " + dateStr.split("T")[1];DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");endTime = sdf.parse(dateStr);return endTime;} else if (dateStr.matches(regexp2)) {DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");endTime = sdf.parse(dateStr);return endTime;} else if (dateStr.matches(regexp3)) {DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");endTime = sdf.parse(dateStr);return endTime;} else {return dateStr;}} catch (ParseException e) {e.printStackTrace();}}return value;} }

封裝工具類

把請求中的參數拷貝到javaBean對象中

// 約定前提: 請求中的參數名稱需要和javabean的屬性名稱保持一致!!!! public static <T>T requestToBean(HttpServletRequest request , Class<T> clazz) {//創建javaBean對象 Object obj=null;try {obj=clazz.newInstance();} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e);}//得到請求中的每個參數Enumeration<String> enu = request.getParameterNames();while(enu.hasMoreElements()) {//獲得參數名String name = enu.nextElement();//獲得參數值String value = request.getParameter(name);//然后把參數拷貝到javaBean對象中try {BeanUtils.setProperty(obj, name, value);} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e);}}return (T)obj; }

總結

以上是生活随笔為你收集整理的BeanUtils的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。