ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 带有类Hiearchies的Spring JDBC RowMapper

2019-05-22 08:59:54  阅读:240  来源: 互联网

标签:java orm spring spring-jdbc class-hierarchy


我想知道社区认为使用Spring JDBC映射类层次结构的“最佳实践”.

我们没有能力使用完整的ORM工具,但我们使用Spring JDBC来缓解JDBC的一些乏味特性.我们非常经常使用的一个类是BeanPropertyRowMapper,因为它易于使用,并且能够从我们的结果集中访问类型不敏感的bean属性.

我有一个类层次结构,它都映射回一个表(对于这个小类层次结构采用table-per-hiearchy方法).因此,该表包含一个classId列,可用于确定实际应该实例化哪个类.防爆. 1 =经理,2 =员工,3 =承包商.所有这些都是“人”,但每个人的子类都有一些属性,这些属性对于他们的类是唯一的.

我最初的想法是创建一个BeanPropertyRowMapper的子类,并尝试注入这个逻辑,说“如果列A = 1然后实例化一个管理器,然后进行你的标题绑定”.

这看起来像是一种合理的方法吗?人们可能有任何其他建议吗?

提前感谢您的回复,

贾斯汀N.

解决方法:

看起来子类中没有一个位置可以添加一个钩子来切换类而不完全复制BeanPropertyRowMapper的mapRow()实现.您最好的方法可能是创建一个RowMapper类,该类委托给相应的BeanPropertyRowMapper.

例如:

    final RowMapper managerMapper = new BeanPropertyRowMapper(Manager.class);
    final RowMapper employeeMapper = new BeanPropertyRowMapper(Employee.class);
    final RowMapper contractorMapper = new BeanPropertyRowMapper(Contractor.class);

    RowMapper rm = new RowMapper()
    {
        @Override
        public Object mapRow(ResultSet rs, int rowNum)
            throws SQLException
        {
            int employeeType = rs.getInt("type");
            switch (employeeType)
            {
                case 1:
                    return managerMapper.mapRow(rs, rowNum); 

                case 2:
                    return employeeMapper.mapRow(rs, rowNum);

                case 3:
                    return contractorMapper.mapRow(rs, rowNum);

                default:
                    break;

            }
        }
    };

标签:java,orm,spring,spring-jdbc,class-hierarchy
来源: https://codeday.me/bug/20190522/1151425.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有