91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Springboot如何整合Dozer實現深度復制

發布時間:2022-03-07 09:10:45 來源:億速云 閱讀:278 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關Springboot如何整合Dozer實現深度復制,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。


Dozer

Dozer是一種Java Bean到Java Bean的映射器,遞歸地將數據從一個對象復制到另一個對象,它是一個強大的,通用的,靈活的,可重用的和可配置的開源映射框架。

常用于:

  • 代碼層與層之間javabean轉換, 如dao層PO轉前端VO

  • 分布式中, DAO層PO轉DTO, DO 以及web層DTO轉VO

注意的場景:

  • 由于bean之間的深度復制, 在進行一些類似更新, 插入操作時尤其要注意最終接收到PO的一些關鍵字段如ID是否是真正需要的. 場景: 傳入的DTO A為查出的DTO B復制后的, 這時候A里會有B的ID, 在插入A的時候很有可能造成主鍵沖突.

建議:

  • 不用Dozer最好, Dozer帶來的是性能開銷.(這是不可能…)

  • 某些特殊操作可以用切面控制特殊字段進行置空操作

SpringBoot整合Dozer

jar依賴引入

pom.xml加入以下依賴

<dependency>
    <groupId>net.sf.dozer</groupId>
    <artifactId>dozer-spring</artifactId>
    <version>5.5.1</version>
</dependency>
<dependency>
    <groupId>net.sf.dozer</groupId>
    <artifactId>dozer</artifactId>
    <version>5.5.1</version>
</dependency>

dozer配置xml引入

resource文件夾下新建dozer文件夾, 并新建bean-mappings.xml, global-configuration.xml

bean-mappings.xml

<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://dozer.sourceforge.net
          http://dozer.sourceforge.net/schema/beanmapping.xsd">
</mappings>

global-configuration.xml

<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://dozer.sourceforge.net
          http://dozer.sourceforge.net/schema/beanmapping.xsd">
    <configuration>
        <date-format>yyyy-MM-dd HH:mm:ss</date-format>      
        <wildcard>true</wildcard>
        <trim-strings>false</trim-strings>
        <!-- 自定義的枚舉與Integer轉換器, 下節介紹 -->
        <custom-converters>
            <converter type="com.dongao.beacon.ds.web.admin.tookit.EnumIntegerBiDirectionalDozerConverter">
                <class-a>java.lang.Enum</class-a>
                <class-b>java.lang.Integer</class-b>
            </converter>
        </custom-converters>
    </configuration>
</mappings>

Dozer的JavaConfig

用于SpringBoot尋找DozerBeanMapperFactoryBean的配置
新建DozerMapperConfig.java

public class DozerMapperConfig {

    @Bean
    public DozerBeanMapperFactoryBean dozerBeanMapperFactoryBean(@Value("classpath*:dozer/*.xml") Resource[] resources) throws Exception {
        final DozerBeanMapperFactoryBean dozerBeanMapperFactoryBean = new DozerBeanMapperFactoryBean();
        dozerBeanMapperFactoryBean.setMappingFiles(resources);
        return dozerBeanMapperFactoryBean;
    }

}

格式化工廠

建議新建包專門放置Dozer工具

接口定義: 新建IGenerator.java接口

public interface IGenerator {
    /** 
     * @Description: 單個對象的深度復制及類型轉換,vo/domain , po
     * @param s 數據對象
     * @param clz 復制目標類型
     * @return
     * @author banjuer@outlook.com
     * @Time 2018年5月9日 下午3:53:24
     */
    <T, S> T convert(S s, Class<T> clz);
    /**
     * @Description
   
    : 深度復制結果集(
    
     ResultSet
    為自定義的分頁結果集)
     *
    @param s 數據對象
  
     <T, S> 
    ResultSet
   <T> convert(
   <S> s, Class<T> clz);
  /** 
     * @Description: list深度復制
     * @Time 2018年5月9日 下午3:54:08
    <T, S> List<T> convert(List<S> s, Class<T> clz);
     * @Description: set深度復制
     * @Time 2018年5月9日 下午3:54:39
    <T, S> Set<T> convert(Set<S> s, Class<T> clz);
     * @Description: 數組深度復制
     * @Time 2018年5月9日 下午3:54:57
    <T, S> T[] convert(S[] s, Class<T> clz);
}

IGenerator實現

@Component
@Lazy(true)
public class EJBGenerator implements IGenerator {
    @Autowired
    protected Mapper dozerMapper;
    public <T, S> T convert(S s, Class<T> clz) {
        if (s == null) {
            return null;
        }
        return this.dozerMapper.map(s, clz);
    }
     public
  
    <T, S> 
   
    ResultSet
   <T> 
  convert
   (
   <S> s, Class<T> clz) {
     
  if (s == null) {
     return null
   ;
     }
    resultSet
    = 
  new
   <T>();
  for
    (S vs : s.getResult()) {
   .getResult().add(
  this
   .dozerMapper.map(vs, clz));
   .setTotal(s.getTotal());
   .setExt(s.getExt());
   .setModifyTime(s.getModifyTime());
  return
    
  public <T, S> List<T> convert(List<S> s, Class<T> clz) {
        List<T> list = new ArrayList<T>();
        for (S vs : s) {
            list.add(this.dozerMapper.map(vs, clz));
        return list;
    public <T, S> Set<T> convert(Set<S> s, Class<T> clz) {
        Set<T> set = new HashSet<T>();
            set.add(this.dozerMapper.map(vs, clz));
        return set;
    public <T, S> T[] convert(S[] s, Class<T> clz) {
        @SuppressWarnings("unchecked")
        T[] arr = (T[]) Array.newInstance(clz, s.length);
        for (int i = 0; i < s.length; i++) {
            arr[i] = this.dozerMapper.map(s[i], clz);
        return arr;
}

使用Demo

一般在公共父類中引入, 此處例子為前端公共Controller引入

@Controller
public class BaseController  {
    @Autowired
    protected EJBGenerator ejbGenerator = new EJBGenerator();
    protected final Logger logger = LoggerFactory.getLogger(getClass());

}
// 個人信息變更記錄session
SessionUserDetails userDetails = ejbGenerator.convert(userVo, SessionUserDetails.class);

關于“Springboot如何整合Dozer實現深度復制”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

呼伦贝尔市| 陵川县| 玛沁县| 六枝特区| 日照市| 陆良县| 富顺县| 象山县| 乌拉特后旗| 玛曲县| 乐安县| 安塞县| 封丘县| 行唐县| 罗田县| 云林县| 瑞金市| 揭西县| 西乡县| 霍邱县| 广丰县| 宜春市| 喜德县| 古浪县| 原平市| 环江| 隆林| 华亭县| 隆安县| 苍山县| 厦门市| 怀安县| 日喀则市| 武胜县| 娄底市| 桃江县| 中牟县| 巴彦淖尔市| 沙洋县| 大宁县| 宜君县|