From 6ba284e8c2d89de3f332c7b660d6ba29a5248048 Mon Sep 17 00:00:00 2001 From: moparisthebest Date: Mon, 15 Jan 2018 12:54:59 -0500 Subject: [PATCH] Setter methods now just have to start with 'set' not 'set[A-Z_]' --- .../codegen/CompileTimeRowToObjectMapper.java | 11 ++------ .../jdbc/codegen/JdbcMapperTest.java | 12 +++++--- .../jdbc/codegen/PersonDAO.java | 8 +++--- .../jdbc/RowToObjectMapper.java | 7 +---- .../moparisthebest/jdbc/QueryMapperTest.java | 7 +++++ .../jdbc/dto/CaseSensitivePerson.java | 28 +++++++++++++++++++ 6 files changed, 50 insertions(+), 23 deletions(-) create mode 100644 querymapper/src/test/java/com/moparisthebest/jdbc/dto/CaseSensitivePerson.java diff --git a/jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/CompileTimeRowToObjectMapper.java b/jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/CompileTimeRowToObjectMapper.java index c785175..31a8add 100644 --- a/jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/CompileTimeRowToObjectMapper.java +++ b/jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/CompileTimeRowToObjectMapper.java @@ -12,10 +12,8 @@ import javax.lang.model.type.TypeMirror; import java.io.IOException; import java.sql.SQLException; import java.util.*; -import java.util.regex.Matcher; import static com.moparisthebest.jdbc.CompilingRowToObjectMapper.escapeMapKeyString; -import static com.moparisthebest.jdbc.RowToObjectMapper._setterRegex; import static com.moparisthebest.jdbc.codegen.CompileTimeResultSetMapper.getConcreteClassCanonicalName; import static com.moparisthebest.jdbc.codegen.JdbcMapperProcessor.typeMirrorToClass; @@ -292,8 +290,7 @@ public class CompileTimeRowToObjectMapper { * @return True if the method is a setter method. */ protected boolean isSetterMethod(final ExecutableElement method) { - Matcher matcher = _setterRegex.matcher(method.getSimpleName()); - if (matcher.matches()) { + if (method.getSimpleName().toString().startsWith("set")) { final Set modifiers = method.getModifiers(); if (modifiers.contains(Modifier.STATIC)) return false; @@ -393,11 +390,7 @@ public class CompileTimeRowToObjectMapper { return _returnTypeClass.cast(val); } */ - // we could actually pull from first row like above and test it first and fail now, but maybe just failing during compilation is enough? - java.append("final ").append(tType).append(" ret = (").append(tType).append(") "); - extractColumnValueString(java, 1, typeId, _returnTypeClass.toString()); - java.append(";\n"); - return; + // todo: we could actually pull from first row like above and test it first, but for now we will fall-through to field mappings... } } catch (Exception e) { throw new MapperException(e.getMessage(), e); diff --git a/jdbcmapper/src/test/java/com/moparisthebest/jdbc/codegen/JdbcMapperTest.java b/jdbcmapper/src/test/java/com/moparisthebest/jdbc/codegen/JdbcMapperTest.java index 322a61b..6da4449 100644 --- a/jdbcmapper/src/test/java/com/moparisthebest/jdbc/codegen/JdbcMapperTest.java +++ b/jdbcmapper/src/test/java/com/moparisthebest/jdbc/codegen/JdbcMapperTest.java @@ -1,9 +1,6 @@ package com.moparisthebest.jdbc.codegen; -import com.moparisthebest.jdbc.dto.EnumPerson; -import com.moparisthebest.jdbc.dto.FieldPerson; -import com.moparisthebest.jdbc.dto.FirstName; -import com.moparisthebest.jdbc.dto.Val; +import com.moparisthebest.jdbc.dto.*; import com.moparisthebest.jdbc.util.ResultSetIterable; import org.junit.AfterClass; import org.junit.BeforeClass; @@ -121,6 +118,13 @@ public class JdbcMapperTest { assertEquals(null, dao.getEnumNull()); } + @Test + public void testCaseInsensitiveMethods() throws SQLException { + final CaseSensitivePerson expected = new CaseSensitivePerson(); + expected.setmPersonFirstName(fieldPerson1.getFirstName()); + assertEquals(expected, dao.getCaseSensitivePerson(fieldPerson1.getPersonNo())); + } + //IFJAVA8_START @Test diff --git a/jdbcmapper/src/test/java/com/moparisthebest/jdbc/codegen/PersonDAO.java b/jdbcmapper/src/test/java/com/moparisthebest/jdbc/codegen/PersonDAO.java index 939b174..91d4833 100644 --- a/jdbcmapper/src/test/java/com/moparisthebest/jdbc/codegen/PersonDAO.java +++ b/jdbcmapper/src/test/java/com/moparisthebest/jdbc/codegen/PersonDAO.java @@ -1,10 +1,7 @@ package com.moparisthebest.jdbc.codegen; import com.moparisthebest.jdbc.Cleaner; -import com.moparisthebest.jdbc.dto.EnumPerson; -import com.moparisthebest.jdbc.dto.FieldPerson; -import com.moparisthebest.jdbc.dto.FirstName; -import com.moparisthebest.jdbc.dto.Person; +import com.moparisthebest.jdbc.dto.*; import com.moparisthebest.jdbc.util.ResultSetIterable; import java.io.Closeable; @@ -208,6 +205,9 @@ public interface PersonDAO extends JdbcMapper { @JdbcMapper.SQL("SELECT str_val FROM val WHERE val_no = 4") FirstName getEnumNull() throws SQLException; + @JdbcMapper.SQL("SELECT first_name AS M_PERSON_FIRST_NAME FROM person WHERE person_no = {personNo}") + CaseSensitivePerson getCaseSensitivePerson(long personNo); + //IFJAVA8_START @JdbcMapper.SQL("SELECT birth_date FROM person WHERE person_no = {personNo}") diff --git a/querymapper/src/main/java/com/moparisthebest/jdbc/RowToObjectMapper.java b/querymapper/src/main/java/com/moparisthebest/jdbc/RowToObjectMapper.java index 02c8df5..fdd0b89 100644 --- a/querymapper/src/main/java/com/moparisthebest/jdbc/RowToObjectMapper.java +++ b/querymapper/src/main/java/com/moparisthebest/jdbc/RowToObjectMapper.java @@ -30,8 +30,6 @@ import java.util.Arrays; import java.util.Calendar; import java.util.HashMap; import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; //IFJAVA8_START import java.time.*; //IFJAVA8_END @@ -58,9 +56,7 @@ import static com.moparisthebest.jdbc.UpdateableDTO.NO; */ public class RowToObjectMapper extends AbstractRowMapper { - private static final String SETTER_NAME_REGEX = "^(set)([A-Z_]\\w*+)"; protected static final TypeMappingsFactory _tmf = TypeMappingsFactory.getInstance(); - public static final Pattern _setterRegex = Pattern.compile(SETTER_NAME_REGEX); public static final int TYPE_BOOLEAN = _tmf.getTypeId(Boolean.TYPE);//TypeMappingsFactory.TYPE_BOOLEAN; // not public? public static final int TYPE_BOOLEAN_OBJ = _tmf.getTypeId(Boolean.class);//TypeMappingsFactory.TYPE_BOOLEAN_OBJ; // not public? @@ -556,8 +552,7 @@ public class RowToObjectMapper extends AbstractRowMapper { * @return True if the method is a setter method. */ protected boolean isSetterMethod(Method method) { - Matcher matcher = _setterRegex.matcher(method.getName()); - if (matcher.matches()) { + if (method.getName().startsWith("set")) { if (Modifier.isStatic(method.getModifiers())) return false; if (!Modifier.isPublic(method.getModifiers())) return false; diff --git a/querymapper/src/test/java/com/moparisthebest/jdbc/QueryMapperTest.java b/querymapper/src/test/java/com/moparisthebest/jdbc/QueryMapperTest.java index 9c2489c..697eddd 100644 --- a/querymapper/src/test/java/com/moparisthebest/jdbc/QueryMapperTest.java +++ b/querymapper/src/test/java/com/moparisthebest/jdbc/QueryMapperTest.java @@ -477,6 +477,13 @@ public class QueryMapperTest { assertEquals(null, qm.toObject("SELECT str_val FROM val WHERE val_no = 4", FirstName.class)); } + @Test + public void testCaseInsensitiveMethods() throws SQLException { + final CaseSensitivePerson expected = new CaseSensitivePerson(); + expected.setmPersonFirstName(fieldPerson1.getFirstName()); + assertEquals(expected, qm.toObject("SELECT first_name AS M_PERSON_FIRST_NAME FROM person WHERE person_no = ?", CaseSensitivePerson.class, fieldPerson1.getPersonNo())); + } + //IFJAVA8_START @Test diff --git a/querymapper/src/test/java/com/moparisthebest/jdbc/dto/CaseSensitivePerson.java b/querymapper/src/test/java/com/moparisthebest/jdbc/dto/CaseSensitivePerson.java new file mode 100644 index 0000000..ba3cbc7 --- /dev/null +++ b/querymapper/src/test/java/com/moparisthebest/jdbc/dto/CaseSensitivePerson.java @@ -0,0 +1,28 @@ +package com.moparisthebest.jdbc.dto; + +public class CaseSensitivePerson { + private String mPersonFirstName; + + public String getmPersonFirstName() { + return mPersonFirstName; + } + + public void setmPersonFirstName(final String mPersonFirstName) { + this.mPersonFirstName = mPersonFirstName; + } + + @Override + public boolean equals(final Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + final CaseSensitivePerson that = (CaseSensitivePerson) o; + + return mPersonFirstName != null ? mPersonFirstName.equals(that.mPersonFirstName) : that.mPersonFirstName == null; + } + + @Override + public int hashCode() { + return mPersonFirstName != null ? mPersonFirstName.hashCode() : 0; + } +}