Springboot 통합 Dozer 깊이 있는 복제

14196 단어 javawebDozerSpringBoot

Dozer


Dozer는 자바빈에서 자바빈으로 데이터를 한 대상에서 다른 대상으로 반복적으로 복제하는 강력한, 유니버설, 유연한, 재사용 가능한, 설정 가능한 소스 맵 프레임워크이다.
일반적인 용도:
  • 코드 층과 층 사이javabean 변환, 예를 들어dao층 PO 회전 전단 VO
  • 분포식에서 DAO 층 PO 회전 DTO, DO 및 웹 층 DTO 회전 VO
  • 장면 참고:
  • bean 간의 깊이 있는 복제로 인해 유사한 업데이트를 진행할 때 삽입 작업을 할 때 특히 최종적으로 PO를 받는 관건적인 필드, 예를 들어 ID가 진정으로 필요한지 주의해야 한다.장면: 전송된 DTO A는 검색된 DTO B를 복제한 것이다. 이때 A에 B의 ID가 있고 A를 삽입할 때 메인 키 충돌이 발생할 수 있다.

  • 권장 사항:
  • Dozer를 사용하지 않는 것이 가장 좋고 Dozer가 가져오는 것은 성능 비용이다.(이건 불가능...)
  • 일부 특수 조작은 절단면 제어 특수 필드로 공백 조작을 할 수 있다
  • SpringBoot 통합 Dozer


    jar 의존 도입


    pom.xml 다음 의존 추가
    <dependency>
        <groupId>net.sf.dozergroupId>
        <artifactId>dozer-springartifactId>
        <version>5.5.1version>
    dependency>
    <dependency>
        <groupId>net.sf.dozergroupId>
        <artifactId>dozerartifactId>
        <version>5.5.1version>
    dependency>

    dozer 설정 xml 도입


    resource 폴더 아래에 Dozer 폴더를 새로 만들고 Bean-mappings를 새로 만듭니다.xml, global-configuration.xml
  • bean-mappings.xml
  • 
    <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
  • 
    <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:ssdate-format>      
            <wildcard>truewildcard>
            <trim-strings>falsetrim-strings>
            
            <custom-converters>
                <converter type="com.dongao.beacon.ds.web.admin.tookit.EnumIntegerBiDirectionalDozerConverter">
                    <class-a>java.lang.Enumclass-a>
                    <class-b>java.lang.Integerclass-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 [email protected]
         * @Time 2018 5 9    3:53:24
         */
         T convert(S s, Class clz);
    
        /**
         * @Description
         
          :        (
          
           ResultSet
                    )
         *
          @param s     
         * @param clz       
         * @return
         * @author [email protected]
         * @Time 2018 5 9    3:53:24
         */
        
         
          
         
          ResultSet
          convert(
         
          ResultSet
          s, Class clz);
    
        
        /** 
         * @Description: list    
         * @param s     
         * @param clz       
         * @return
         * @author [email protected]
         * @Time 2018 5 9    3:54:08
         */
         List convert(List s, Class clz);
    
        /** 
         * @Description: set    
         * @param s     
         * @param clz       
         * @return
         * @author [email protected]
         * @Time 2018 5 9    3:54:39
         */
         Set convert(Set s, Class clz);
    
        /** 
         * @Description:       
         * @param s     
         * @param clz       
         * @return
         * @author [email protected]
         * @Time 2018 5 9    3:54:57
         */
         T[] convert(S[] s, Class clz);
    
    }
  • IGenerator 구현
  • @Component
    @Lazy(true)
    public class EJBGenerator implements IGenerator {
    
        @Autowired
        protected Mapper dozerMapper;
    
        public  T convert(S s, Class clz) {
            if (s == null) {
                return null;
            }
            return this.dozerMapper.map(s, clz);
        }
    
         public
        
           
         
          ResultSet
          
        convert
        
         (
         
          ResultSet
          s, Class clz) {
         
        if (s == null) {
         return null
        
         ;
         }
         
         
          ResultSet
          
         
          resultSet
          = 
        new
         
         
          ResultSet
         ();
         
        for
        
          (S vs : s.getResult()) {
         
         
          resultSet
         .getResult().add(
        this
        
         .dozerMapper.map(vs, clz));
         }
         
         
          resultSet
         .setTotal(s.getTotal());
         
         
          resultSet
         .setExt(s.getExt());
         
         
          resultSet
         .setModifyTime(s.getModifyTime());
         
        return
         
         
          resultSet
         ;
         }
    
        
        public  List convert(List s, Class clz) {
            if (s == null) {
                return null;
            }
            List list = new ArrayList();
            for (S vs : s) {
                list.add(this.dozerMapper.map(vs, clz));
            }
            return list;
        }
    
        public  Set convert(Set s, Class clz) {
            if (s == null) {
                return null;
            }
            Set set = new HashSet();
            for (S vs : s) {
                set.add(this.dozerMapper.map(vs, clz));
            }
            return set;
        }
    
        public  T[] convert(S[] s, Class clz) {
            if (s == null) {
                return null;
            }
            @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;
        }
    }
    

    데모 사용


    일반적으로 공통 부모 클래스에 도입됩니다. 이 예는 프런트엔드 공통 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);

    좋은 웹페이지 즐겨찾기