• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

future-architect / uroborosql / #715

pending completion
#715

push

web-flow
merge v0.x changes to master (#310)

* v0.x to master merge

* fix nanoseconds diff (java8 to java11)

* eclipse cleanup and  optimize import

* eclipse format

* optimize Imports

* remove unused annotation

* library version up

* migrate v0.x to master
- update java version 8 to 11
- update junit4 to junit5
- library version update

* fix test failed

* remove unused annotation

* fixed bug

* use var

* fix java8 coding style

1154 of 1154 new or added lines in 77 files covered. (100.0%)

7721 of 8533 relevant lines covered (90.48%)

0.9 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

79.31
/src/main/java/jp/co/future/uroborosql/converter/EntityResultSetConverter.java
1
/**
2
 * Copyright (c) 2017-present, Future Corporation
3
 *
4
 * This source code is licensed under the MIT license found in the
5
 * LICENSE file in the root directory of this source tree.
6
 */
7
package jp.co.future.uroborosql.converter;
8

9
import java.lang.reflect.Constructor;
10
import java.lang.reflect.InvocationTargetException;
11
import java.sql.ResultSet;
12
import java.sql.SQLException;
13
import java.util.Arrays;
14
import java.util.HashMap;
15
import java.util.Map;
16
import java.util.function.Function;
17
import java.util.stream.Collectors;
18

19
import jp.co.future.uroborosql.exception.UroborosqlRuntimeException;
20
import jp.co.future.uroborosql.mapping.MappingColumn;
21
import jp.co.future.uroborosql.mapping.MappingUtils;
22
import jp.co.future.uroborosql.mapping.mapper.PropertyMapperManager;
23
import jp.co.future.uroborosql.utils.CaseFormat;
24

25
/**
26
 * 検索結果の1行を任意型に変換する変換器
27
 *
28
 * @param <E> エンティティ型
29
 * @author ota
30
 *
31
 */
32
public class EntityResultSetConverter<E> implements ResultSetConverter<E> {
33
        private final PropertyMapperManager mapperManager;
34
        private final Constructor<E> constructor;
35
        private final Map<String, MappingColumn> mappingColumnMap;
36
        private Map<MappingColumn, Integer> columnPositionMap;
37

38
        /**
39
         * コンストラクタ
40
         *
41
         * @param schema スキーマ
42
         * @param entityType エンティティタイプ
43
         * @param mapperManager PropertyMapperManager
44
         */
45
        @SuppressWarnings({ "unchecked" })
46
        public EntityResultSetConverter(final String schema, final Class<? extends E> entityType,
47
                        final PropertyMapperManager mapperManager) {
1✔
48
                this.mapperManager = mapperManager;
1✔
49
                try {
50
                        this.constructor = (Constructor<E>) entityType.getConstructor();
1✔
51
                } catch (NoSuchMethodException e) {
×
52
                        throw new UroborosqlRuntimeException("EntityType should have a default constructor.", e);
×
53
                }
1✔
54

55
                this.mappingColumnMap = Arrays.stream(MappingUtils.getMappingColumns(schema, entityType))
1✔
56
                                .collect(Collectors.toMap(c -> CaseFormat.UPPER_SNAKE_CASE.convert(c.getName()), Function.identity()));
1✔
57
        }
1✔
58

59
        /**
60
         * {@inheritDoc}
61
         *
62
         * @see jp.co.future.uroborosql.converter.ResultSetConverter#createRecord(java.sql.ResultSet)
63
         */
64
        @Override
65
        public E createRecord(final ResultSet rs) throws SQLException {
66
                try {
67
                        if (columnPositionMap == null) {
1✔
68
                                var rsmd = rs.getMetaData();
1✔
69
                                var columnCount = rsmd.getColumnCount();
1✔
70

71
                                columnPositionMap = new HashMap<>(columnCount);
1✔
72
                                // columnLabelsは1始まりの配列で値を格納
73
                                for (var i = 1; i <= columnCount; i++) {
1✔
74
                                        var columnLabel = CaseFormat.UPPER_SNAKE_CASE.convert(rsmd.getColumnLabel(i));
1✔
75
                                        var col = mappingColumnMap.get(columnLabel);
1✔
76
                                        if (col != null) {
1✔
77
                                                columnPositionMap.put(col, i);
1✔
78
                                        }
79
                                }
80
                        }
81

82
                        var rec = constructor.newInstance();
1✔
83
                        for (var entry : columnPositionMap.entrySet()) {
1✔
84
                                var column = entry.getKey();
1✔
85
                                var position = entry.getValue();
1✔
86
                                column.setValue(rec, mapperManager.getValue(column.getJavaType(), rs, position));
1✔
87
                        }
1✔
88
                        return rec;
1✔
89
                } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) {
×
90
                        throw new UroborosqlRuntimeException(e);
×
91
                } catch (SQLException | RuntimeException | Error e) {
×
92
                        throw e;
×
93
                }
94
        }
95
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc