@Test public void testDirectMeta() throws Exception { PreparedStatementMapperBuilder<DMClass> mapperBuilder = JdbcMapperFactory.newInstance().buildFrom(DMClass.class); mapperBuilder.addColumn("time"); FieldMapper<DMClass, PreparedStatement> mapper = mapperBuilder.mapper(); DMClass dmClass = new DMClass(); dmClass.setTime(new Date()); PreparedStatement ps = mock(PreparedStatement.class); mapper.mapTo(dmClass, ps, null); verify(ps).setTimestamp(1, new Timestamp(dmClass.getTime().getTime())); } @Test
@Test public void testGetterOnlyMethod() throws Exception { PreparedStatementMapperBuilder<DMClass> mapperBuilder = JdbcMapperFactory.newInstance().buildFrom(DMClass.class); mapperBuilder.addColumn("value"); FieldMapper<DMClass, PreparedStatement> mapper = mapperBuilder.mapper(); DMClass dmClass = new DMClass(); PreparedStatement ps = mock(PreparedStatement.class); mapper.mapTo(dmClass, ps, null); verify(ps).setString(1, "value"); }
@Test public void testCustomGetterOnNonExistantProp() throws Exception { PreparedStatementMapperBuilder<Object> mapperBuilder = JdbcMapperFactory.newInstance() .addColumnProperty("text", new ConstantValueProperty<String>("value2", String.class)) .buildFrom(Object.class); mapperBuilder.addColumn("text"); FieldMapper<Object, PreparedStatement> mapper = mapperBuilder.mapper(); PreparedStatement ps = mock(PreparedStatement.class); mapper.mapTo(new Object(), ps, null); verify(ps).setString(1, "value2"); } }
@Test public void testRename() throws Exception { PreparedStatementMapperBuilder<DMClass> mapperBuilder = JdbcMapperFactory.newInstance() .addAlias("val", "value") .buildFrom(DMClass.class); mapperBuilder.addColumn("val"); FieldMapper<DMClass, PreparedStatement> mapper = mapperBuilder.mapper(); DMClass dmClass = new DMClass(); PreparedStatement ps = mock(PreparedStatement.class); mapper.mapTo(dmClass, ps, null); verify(ps).setString(1, "value"); }
@Test public void testMapDbObjectToStatement() throws Exception { FieldMapper<DbObject, PreparedStatement> mapper = JdbcMapperFactory.newInstance().buildFrom(DbObject.class) .addColumn("id") .addColumn("name") .addColumn("email") .addColumn("creation_time") .mapper(); PreparedStatement ps = mock(PreparedStatement.class); DbObject dbObject = new DbObject(); dbObject.setId(123); dbObject.setName("name"); dbObject.setEmail("email"); dbObject.setCreationTime(new Date()); mapper.mapTo(dbObject, ps, null); verify(ps).setLong(1, 123); verify(ps).setString(2, "name"); verify(ps).setString(3, "email"); verify(ps).setTimestamp(4, new Timestamp(dbObject.getCreationTime().getTime())); }
@Test public void testCustomGetter() throws Exception { PreparedStatementMapperBuilder<DMClass> mapperBuilder = JdbcMapperFactory.newInstance() .addColumnProperty("value", new GetterProperty(new Getter<Object, String>() { @Override public String get(Object target) throws Exception { return "value2"; } })) .buildFrom(DMClass.class); mapperBuilder.addColumn("value"); FieldMapper<DMClass, PreparedStatement> mapper = mapperBuilder.mapper(); DMClass dmClass = new DMClass(); PreparedStatement ps = mock(PreparedStatement.class); mapper.mapTo(dmClass, ps, null); verify(ps).setString(1, "value2"); }
@Test public void jdbcMapperExtrapolateFailToFindSetter() { try { JdbcMapperFactory.newInstance().buildFrom(Foo2.class).addColumn("bar").mapper(); fail(); } catch (MapperBuildingException e) { // expected } }
@Test public void jdbcMapperExtrapolateOverrideSetter() { JdbcMapperFactory .newInstance() .addColumnProperty("bar", new SetterProperty(new Setter<PreparedStatement, Bar2Prop>() { @Override public void set(PreparedStatement target, Bar2Prop value) throws Exception { target.setString(3, value.getVal()); target.setInt(4, value.getI()); } })) .buildFrom(Foo2.class) .addColumn("bar") .mapper(); } @Test
private QueryPreparer<T> preparedStatementMapper(NamedSqlQuery query, String[] generatedKeys) { for(int i = 0; i < query.getParametersSize(); i++) { addColumn(query.getParameter(i).getName()); } boolean hasMultiIndex = propertyMappingsBuilder.forEachProperties(new ForEachCallBack<PropertyMapping<T, ?, JdbcColumnKey>>() { boolean hasMultiIndex; @Override public void handle(PropertyMapping<T, ?, JdbcColumnKey> pm) { hasMultiIndex |= isMultiIndex(pm.getPropertyMeta()); } }).hasMultiIndex; if (hasMultiIndex) { MappingContextFactoryBuilder<T, JdbcColumnKey> mappingContextFactoryBuilder = new MappingContextFactoryBuilder<T, JdbcColumnKey>(keySourceGetter(), !mapperConfig.unorderedJoin()); return new MultiIndexQueryPreparer<T>(query, buildIndexFieldMappers(mappingContextFactoryBuilder), generatedKeys, mappingContextFactoryBuilder.build()); } else { return new MapperQueryPreparer<T>(query, mapper(), generatedKeys); } }
private QueryPreparer<T> preparedStatementMapper(NamedSqlQuery query, String[] generatedKeys) { for(int i = 0; i < query.getParametersSize(); i++) { addColumn(query.getParameter(i).getName()); } boolean hasMultiIndex = propertyMappingsBuilder.forEachProperties(new ForEachCallBack<PropertyMapping<T, ?, JdbcColumnKey>>() { boolean hasMultiIndex; @Override public void handle(PropertyMapping<T, ?, JdbcColumnKey> pm) { hasMultiIndex |= isMultiIndex(pm.getPropertyMeta()); } }).hasMultiIndex; if (hasMultiIndex) { MappingContextFactoryBuilder<T, JdbcColumnKey> mappingContextFactoryBuilder = new MappingContextFactoryBuilder<T, JdbcColumnKey>(keySourceGetter(), !mapperConfig.unorderedJoin()); return new MultiIndexQueryPreparer<T>(query, buildIndexFieldMappers(mappingContextFactoryBuilder), generatedKeys, mappingContextFactoryBuilder.build()); } else { return new MapperQueryPreparer<T>(query, mapper(), generatedKeys); } }
@Test public void jdbcMapperExtrapolateOverrideIndexedSetter() { JdbcMapperFactory .newInstance() .addColumnProperty("bar", new IndexedSetterProperty(new IndexedSetter<PreparedStatement, Bar2Prop>() { @Override public void set(PreparedStatement target, Bar2Prop value, int index) throws Exception { target.setString(index, value.getVal()); target.setInt(index + 1, value.getI()); } })) .buildFrom(Foo2.class) .addColumn("bar") .mapper(); } @Test
@Test public void jdbcMapperExtrapolateOverrideSetterFactory() { JdbcMapperFactory .newInstance() .addColumnProperty("bar", new SetterFactoryProperty( new SetterFactory<PreparedStatement, PropertyMapping<?, ?, JdbcColumnKey>>() { @SuppressWarnings("unchecked") @Override public <P> Setter<PreparedStatement, P> getSetter(final PropertyMapping<?, ?, JdbcColumnKey> arg) { return (Setter<PreparedStatement, P>) new Setter<PreparedStatement, Bar2Prop>() { @Override public void set(PreparedStatement target, Bar2Prop value) throws Exception { target.setString(arg.getColumnKey().getIndex(), value.getVal()); target.setInt(arg.getColumnKey().getIndex() + 1, value.getI()); } }; } } )) .buildFrom(Foo2.class) .addColumn("bar") .mapper(); }
@Test public void jdbcMapperExtrapolateOverrideIndexedSetterFactory() { JdbcMapperFactory .newInstance() .addColumnProperty("bar", new IndexedSetterFactoryProperty( new IndexedSetterFactory<PreparedStatement, PropertyMapping<?, ?, JdbcColumnKey>>() { @SuppressWarnings("unchecked") @Override public <P> IndexedSetter<PreparedStatement, P> getIndexedSetter(final PropertyMapping<?, ?, JdbcColumnKey> arg, Object... properties) { return (IndexedSetter<PreparedStatement, P>) new IndexedSetter<PreparedStatement, Bar2Prop>() { @Override public void set(PreparedStatement target, Bar2Prop value, int index) throws Exception { target.setString(index, value.getVal()); target.setInt(index + 1, value.getI()); } }; } } )) .buildFrom(Foo2.class) .addColumn("bar") .mapper(); }