[ 
https://issues.apache.org/jira/browse/EMPIREDB-227?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14910123#comment-14910123
 ] 

Ivan Nemeth edited comment on EMPIREDB-227 at 9/28/15 7:42 AM:
---------------------------------------------------------------

Hi Rainer,

thanks a lot.

You're right, copying each property can be error-prone, but it's the developers 
decision how to extend the EmpireDataReader interface. Personally I don't like 
automatic mapping of bean properties for some reasons*, that's why I've used 
this kind of mapping. For bean-property mapping a single class can be written.

public class BeanPropertyDataReader<K> implements EmpireDataReader<K> {
        private Class<K> clazz;

        public BeanPropertyDataReader(Class<K> clazz) {
                super();
                this.clazz = clazz;
        }
        public K read(DBRecordData record) {
                K result = null;
                try {
                result = clazz.newInstance();
                } catch (Exception e){
                        //error handling
                }
                record.getBeanProperties(result);
                return result;
        }

}

Maybe your enum handling solution can be part of the core DBReader and DBRecord 
classes, because it is useful in other scenarios also, not only in this 
example. 

(*) I think with bean property mapping your domain model is strictly tied to 
the database structure and you lose a lot of freedom. For example you can't use 
embedded objects (like Department in the example) and the domain property names 
must match the table columns. Moreover on large resultset with numerous columns 
some performance issues may arise. On the other hand you have to write the bean 
mapper only once (like DepartmentMapper in the example), and use it everywhere. 

Regards,
Ivan


was (Author: [email protected]):
Hi Rainer,

thanks a lot.

You're right, copying each property can be error-prone, but it's the developers 
decision how to extend the EmpireDataReader interface. Personally I don't like 
automatic mapping of bean properties for some reasons*, that's why I've used 
this kind of mapping. For bean-property mapping a single class can be written.

public class BeanPropertyDataReader<K> implements EmpireDataReader<K> {
        private Class<K> clazz;

        public BeanPropertyDataReader(Class<K> clazz) {
                super();
                this.clazz = clazz;
        }
        public K read(DBRecordData record) {
                K result = null;
                try {
                result = clazz.newInstance();
                } catch (Exception e){
                        //error handling
                }
                record.getBeanProperties(result);
                return result;
        }

}

Maybe your enum handling solution can be part of the core DBReader and DBRecord 
classes, because it is useful in other scenarios also, not only in this 
example. 

* I think with bean property mapping your domain model is strictly tied to the 
database structure and you lose a lot of freedom. For example you can't use 
embedded objects (like Department in the example) and the domain property names 
must match the table columns. Moreover on large resultset with numerous columns 
some performance issues may arise. On the other hand you have to write the bean 
mapper only once (like DepartmentMapper in the example), and use it everywhere. 

Regards,
Ivan

> Spring Integration
> ------------------
>
>                 Key: EMPIREDB-227
>                 URL: https://issues.apache.org/jira/browse/EMPIREDB-227
>             Project: Empire-DB
>          Issue Type: Improvement
>            Reporter: Ivan Nemeth
>         Attachments: empire-db-spring.zip
>
>
> Starting point for a Spring-Empire integration. Code is based on Spring's 
> JdbcTemplate model. 
> There are corresponding classes for Spring's RowMapper, RowCallbackHandler 
> and ResultSetExtractor (EmpireDataReader, EmpireRowCallbackHandler, 
> EmpireReaderExtractor).
> Two examples is inculeded:
> SampleSpringApp does the same as the spring example I've found on Git.
> EmployeeApp: on the same db but with a different apporach (dummy ORM style)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to