• R/O
  • SSH
  • HTTPS

amateras: Commit


Commit MetaInfo

Revisión703 (tree)
Tiempo2012-04-27 12:20:17
Autortakezoe

Log Message

Use EntityOperator to retrieve metadata about primary key and columns.

Cambiar Resumen

Diferencia incremental

--- mirage/trunk/mirage/src/main/java/jp/sf/amateras/mirage/test/MirageTestContext.java (revision 702)
+++ mirage/trunk/mirage/src/main/java/jp/sf/amateras/mirage/test/MirageTestContext.java (revision 703)
@@ -7,6 +7,8 @@
77 import java.util.List;
88 import java.util.Map;
99
10+import jp.sf.amateras.mirage.DefaultEntityOperator;
11+import jp.sf.amateras.mirage.EntityOperator;
1012 import jp.sf.amateras.mirage.SqlManager;
1113 import jp.sf.amateras.mirage.naming.DefaultNameConverter;
1214 import jp.sf.amateras.mirage.naming.NameConverter;
@@ -21,6 +23,7 @@
2123 public class MirageTestContext {
2224
2325 private static NameConverter nameConverter = new DefaultNameConverter();
26+ private static EntityOperator entityOperator = new DefaultEntityOperator();
2427 private static List<Object> resultList = new ArrayList<Object>();
2528 private static List<ExecutedSQLInfo> executedSqlList = new ArrayList<ExecutedSQLInfo>();
2629 private static Map<String, Long> sequenceMap = new HashMap<String, Long>();
@@ -143,7 +146,7 @@
143146 * @param id the values of primary key
144147 */
145148 public static void verifyFindSql(int indexOfSql, Class<?> entityClass, Object... id){
146- verifySql(indexOfSql, MirageUtil.buildSelectSQL(entityClass, nameConverter));
149+ verifySql(indexOfSql, MirageUtil.buildSelectSQL(entityOperator, entityClass, nameConverter));
147150 verifyParameters(indexOfSql, id);
148151 }
149152
@@ -155,7 +158,7 @@
155158 */
156159 public static void verifyInsertSql(int indexOfSql, Object entity){
157160 List<Object> values = new ArrayList<Object>();
158- verifySql(indexOfSql, MirageUtil.buildInsertSql(entity, nameConverter, values));
161+ verifySql(indexOfSql, MirageUtil.buildInsertSql(entityOperator, entity, nameConverter, values));
159162 verifyParameters(indexOfSql, values.toArray());
160163 }
161164
@@ -167,7 +170,7 @@
167170 */
168171 public static void verifyUpdatetSql(int indexOfSql, Object entity){
169172 List<Object> values = new ArrayList<Object>();
170- verifySql(indexOfSql, MirageUtil.buildUpdateSql(entity, nameConverter, values));
173+ verifySql(indexOfSql, MirageUtil.buildUpdateSql(entityOperator, entity, nameConverter, values));
171174 verifyParameters(indexOfSql, values.toArray());
172175 }
173176
@@ -179,7 +182,7 @@
179182 */
180183 public static void verifyDeleteSql(int indexOfSql, Object entity){
181184 List<Object> values = new ArrayList<Object>();
182- verifySql(indexOfSql, MirageUtil.buildDeleteSql(entity, nameConverter, values));
185+ verifySql(indexOfSql, MirageUtil.buildDeleteSql(entityOperator, entity, nameConverter, values));
183186 verifyParameters(indexOfSql, values.toArray());
184187 }
185188
--- mirage/trunk/mirage/src/main/java/jp/sf/amateras/mirage/SqlManagerImpl.java (revision 702)
+++ mirage/trunk/mirage/src/main/java/jp/sf/amateras/mirage/SqlManagerImpl.java (revision 703)
@@ -53,8 +53,10 @@
5353
5454 protected ConnectionProvider connectionProvider;
5555
56- protected NameConverter nameConverter = new DefaultNameConverter();
56+ protected NameConverter nameConverter;
5757
58+ protected EntityOperator entityOperator;
59+
5860 protected Dialect dialect = new StandardDialect();
5961
6062 protected SqlExecutor sqlExecutor = new SqlExecutor();
@@ -87,8 +89,8 @@
8789 addValueType(new ByteArrayValueType());
8890 // addValueType(new jp.sf.amateras.mirage.type.DefaultValueType());
8991
90- setNameConverter(nameConverter);
9192 setDialect(dialect);
93+ setNameConverter(new DefaultNameConverter());
9294 setEntityOperator(new DefaultEntityOperator());
9395 }
9496
@@ -113,6 +115,7 @@
113115 }
114116
115117 public void setEntityOperator(EntityOperator entityOperator){
118+ this.entityOperator = entityOperator;
116119 this.sqlExecutor.setEntityOperator(entityOperator);
117120 this.callExecutor.setEntityOperator(entityOperator);
118121 }
@@ -224,7 +227,7 @@
224227
225228 public int deleteEntity(Object entity) {
226229 List<Object> params = new ArrayList<Object>();
227- String executeSql = MirageUtil.buildDeleteSql(entity, nameConverter, params);
230+ String executeSql = MirageUtil.buildDeleteSql(entityOperator, entity, nameConverter, params);
228231
229232 return sqlExecutor.executeUpdateSql(executeSql, params.toArray(), null);
230233 }
@@ -239,7 +242,7 @@
239242
240243 for(Object entity: entities){
241244 List<Object> params = new ArrayList<Object>();
242- String sql = MirageUtil.buildDeleteSql(entity, nameConverter, params);
245+ String sql = MirageUtil.buildDeleteSql(entityOperator, entity, nameConverter, params);
243246
244247 if(executeSql == null){
245248 executeSql = sql;
@@ -285,7 +288,7 @@
285288 fillPrimaryKeysBySequence(entity);
286289
287290 List<Object> params = new ArrayList<Object>();
288- String sql = MirageUtil.buildInsertSql(entity, nameConverter, params);
291+ String sql = MirageUtil.buildInsertSql(entityOperator, entity, nameConverter, params);
289292
290293 return sqlExecutor.executeUpdateSql(sql, params.toArray(), entity);
291294 }
@@ -302,7 +305,7 @@
302305 fillPrimaryKeysBySequence(entity);
303306
304307 List<Object> params = new ArrayList<Object>();
305- String sql = MirageUtil.buildInsertSql(entity, nameConverter, params);
308+ String sql = MirageUtil.buildInsertSql(entityOperator, entity, nameConverter, params);
306309
307310 if(executeSql == null){
308311 executeSql = sql;
@@ -323,7 +326,7 @@
323326
324327 public int updateEntity(Object entity) {
325328 List<Object> params = new ArrayList<Object>();
326- String executeSql = MirageUtil.buildUpdateSql(entity, nameConverter, params);
329+ String executeSql = MirageUtil.buildUpdateSql(entityOperator, entity, nameConverter, params);
327330
328331 return sqlExecutor.executeUpdateSql(executeSql, params.toArray(), null);
329332 }
@@ -338,7 +341,7 @@
338341
339342 for(Object entity: entities){
340343 List<Object> params = new ArrayList<Object>();
341- String sql = MirageUtil.buildUpdateSql(entity, nameConverter, params);
344+ String sql = MirageUtil.buildUpdateSql(entityOperator, entity, nameConverter, params);
342345
343346 if(executeSql == null){
344347 executeSql = sql;
@@ -359,7 +362,7 @@
359362
360363 // @Override
361364 public <T> T findEntity(Class<T> clazz, Object... id) {
362- String executeSql = MirageUtil.buildSelectSQL(clazz, nameConverter);
365+ String executeSql = MirageUtil.buildSelectSQL(entityOperator, clazz, nameConverter);
363366 return sqlExecutor.getSingleResult(clazz, executeSql, id);
364367 }
365368
--- mirage/trunk/mirage/src/main/java/jp/sf/amateras/mirage/EntityOperator.java (revision 702)
+++ mirage/trunk/mirage/src/main/java/jp/sf/amateras/mirage/EntityOperator.java (revision 703)
@@ -4,7 +4,11 @@
44 import java.sql.ResultSetMetaData;
55 import java.util.List;
66
7+import jp.sf.amateras.mirage.annotation.Column;
8+import jp.sf.amateras.mirage.annotation.PrimaryKey;
9+import jp.sf.amateras.mirage.annotation.PrimaryKey.GenerationType;
710 import jp.sf.amateras.mirage.bean.BeanDesc;
11+import jp.sf.amateras.mirage.bean.PropertyDesc;
812 import jp.sf.amateras.mirage.dialect.Dialect;
913 import jp.sf.amateras.mirage.naming.NameConverter;
1014 import jp.sf.amateras.mirage.type.ValueType;
@@ -40,4 +44,58 @@
4044 ResultSetMetaData meta, int columnCount, BeanDesc beanDesc,
4145 Dialect dialect, List<ValueType<?>> valueTypes, NameConverter nameConverter);
4246
47+ /**
48+ * Retrieves the metadata of the primary key from the given PropertyDesc.
49+ *
50+ * @param clazz the entity class
51+ * @param propertyDesc the property description
52+ * @param nameConverter the NameConverter
53+ * @return the metadata of the primary key
54+ */
55+ public PrimaryKeyInfo getPrimaryKeyInfo(Class<?> clazz,
56+ PropertyDesc propertyDesc, NameConverter nameConverter);
57+
58+ /**
59+ * Retrieves the metadata of the column from the given PropertyDesc.
60+ *
61+ * @param clazz the entity class
62+ * @param propertyDesc the property description
63+ * @param nameConverter the NameConverter
64+ * @return the metadata of the column
65+ */
66+ public ColumnInfo getColumnInfo(Class<?> clazz,
67+ PropertyDesc propertyDesc, NameConverter nameConverter);
68+
69+ /**
70+ * DTO for metadata of the primary key which is specified by {@link PrimaryKey} annotation.
71+ *
72+ * @see PrimaryKey
73+ */
74+ public class PrimaryKeyInfo {
75+ public GenerationType generationType;
76+ public String generator;
77+
78+ public PrimaryKeyInfo(GenerationType generationType){
79+ this(generationType, null);
80+ }
81+
82+ public PrimaryKeyInfo(GenerationType generationType, String generator){
83+ this.generationType = generationType;
84+ this.generator = generator;
85+ }
86+ }
87+
88+ /**
89+ * DTO for metadata of the column which is specified by {@link Column} annotation.
90+ *
91+ * @see Column
92+ */
93+ public class ColumnInfo {
94+ public String name;
95+
96+ public ColumnInfo(String name){
97+ this.name = name;
98+ }
99+ }
100+
43101 }
--- mirage/trunk/mirage/src/main/java/jp/sf/amateras/mirage/DefaultEntityOperator.java (revision 702)
+++ mirage/trunk/mirage/src/main/java/jp/sf/amateras/mirage/DefaultEntityOperator.java (revision 703)
@@ -12,6 +12,7 @@
1212 import java.util.logging.Logger;
1313
1414 import jp.sf.amateras.mirage.annotation.Column;
15+import jp.sf.amateras.mirage.annotation.PrimaryKey;
1516 import jp.sf.amateras.mirage.bean.BeanDesc;
1617 import jp.sf.amateras.mirage.bean.PropertyDesc;
1718 import jp.sf.amateras.mirage.dialect.Dialect;
@@ -133,4 +134,22 @@
133134 }
134135 }
135136
137+ public PrimaryKeyInfo getPrimaryKeyInfo(Class<?> clazz,
138+ PropertyDesc propertyDesc, NameConverter nameConverter) {
139+ PrimaryKey primaryKey = propertyDesc.getAnnotation(PrimaryKey.class);
140+ if(primaryKey == null){
141+ return null;
142+ }
143+ return new PrimaryKeyInfo(primaryKey.generationType(), primaryKey.generator());
144+ }
145+
146+ public ColumnInfo getColumnInfo(Class<?> clazz,
147+ PropertyDesc propertyDesc, NameConverter nameConverter) {
148+ Column column = propertyDesc.getAnnotation(Column.class);
149+ if(column == null){
150+ return null;
151+ }
152+ return new ColumnInfo(column.name());
153+ }
154+
136155 }
--- mirage/trunk/mirage/src/main/java/jp/sf/amateras/mirage/util/MirageUtil.java (revision 702)
+++ mirage/trunk/mirage/src/main/java/jp/sf/amateras/mirage/util/MirageUtil.java (revision 703)
@@ -2,8 +2,10 @@
22
33 import java.util.List;
44
5+import jp.sf.amateras.mirage.EntityOperator;
6+import jp.sf.amateras.mirage.EntityOperator.ColumnInfo;
7+import jp.sf.amateras.mirage.EntityOperator.PrimaryKeyInfo;
58 import jp.sf.amateras.mirage.annotation.Column;
6-import jp.sf.amateras.mirage.annotation.PrimaryKey;
79 import jp.sf.amateras.mirage.annotation.PrimaryKey.GenerationType;
810 import jp.sf.amateras.mirage.annotation.Table;
911 import jp.sf.amateras.mirage.bean.BeanDesc;
@@ -183,10 +185,10 @@
183185 * @param nameConverter the name converter
184186 * @return the column name
185187 */
186- public static String getColumnName(PropertyDesc pd, NameConverter nameConverter){
187- Column column = pd.getAnnotation(Column.class);
188+ public static String getColumnName(EntityOperator entityOperator, Class<?> clazz, PropertyDesc pd, NameConverter nameConverter){
189+ ColumnInfo column = entityOperator.getColumnInfo(clazz, pd, nameConverter);
188190 if(column != null){
189- return column.name();
191+ return column.name;
190192 } else {
191193 return nameConverter.propertyToColumn(pd.getPropertyName());
192194 }
@@ -200,7 +202,7 @@
200202 * @return Select SQL
201203 * @throws RuntimeException the entity class has no primary keys
202204 */
203- public static String buildSelectSQL(Class<?> clazz, NameConverter nameConverter){
205+ public static String buildSelectSQL(EntityOperator entityOperator, Class<?> clazz, NameConverter nameConverter){
204206 StringBuilder sb = new StringBuilder();
205207 BeanDesc beanDesc = BeanDescFactory.getBeanDesc(clazz);
206208
@@ -212,11 +214,12 @@
212214
213215 for(int i=0; i<beanDesc.getPropertyDescSize(); i++){
214216 PropertyDesc pd = beanDesc.getPropertyDesc(i);
215- if(pd.getAnnotation(PrimaryKey.class) != null){
217+ PrimaryKeyInfo primaryKey = entityOperator.getPrimaryKeyInfo(clazz, pd, nameConverter);
218+ if(primaryKey != null){
216219 if(count != 0){
217220 sb.append(" AND ");
218221 }
219- sb.append(MirageUtil.getColumnName(pd, nameConverter));
222+ sb.append(MirageUtil.getColumnName(entityOperator, clazz, pd, nameConverter));
220223 sb.append(" = ?");
221224 count++;
222225 }
@@ -237,22 +240,23 @@
237240 * @param params the list of parameters
238241 * @return Insert SQL
239242 */
240- public static String buildInsertSql(Object entity, NameConverter nameConverter, List<Object> params){
243+ public static String buildInsertSql(EntityOperator entityOperator, Object entity, NameConverter nameConverter, List<Object> params){
241244 StringBuilder sb = new StringBuilder();
242- BeanDesc beanDesc = BeanDescFactory.getBeanDesc(entity.getClass());
245+ Class<?> clazz = entity.getClass();
246+ BeanDesc beanDesc = BeanDescFactory.getBeanDesc(clazz);
243247
244- sb.append("INSERT INTO ").append(getTableName(entity.getClass(), nameConverter)).append(" (");
248+ sb.append("INSERT INTO ").append(getTableName(clazz, nameConverter)).append(" (");
245249 {
246250 int count = 0;
247- for(int i=0;i<beanDesc.getPropertyDescSize();i++){
251+ for(int i = 0; i < beanDesc.getPropertyDescSize(); i++){
248252 PropertyDesc pd = beanDesc.getPropertyDesc(i);
249- PrimaryKey primaryKey = pd.getAnnotation(PrimaryKey.class);
250- if((primaryKey == null || primaryKey.generationType() != GenerationType.IDENTITY)
253+ PrimaryKeyInfo primaryKey = entityOperator.getPrimaryKeyInfo(clazz, pd, nameConverter);
254+ if((primaryKey == null || primaryKey.generationType != GenerationType.IDENTITY)
251255 && !pd.isTransient() && pd.isReadable() ){
252256 if(count != 0){
253257 sb.append(", ");
254258 }
255- sb.append(getColumnName(pd, nameConverter));
259+ sb.append(getColumnName(entityOperator, clazz, pd, nameConverter));
256260 count++;
257261 }
258262 }
@@ -260,10 +264,10 @@
260264 sb.append(") VALUES (");
261265 {
262266 int count = 0;
263- for(int i=0;i<beanDesc.getPropertyDescSize();i++){
267+ for(int i = 0; i < beanDesc.getPropertyDescSize(); i++){
264268 PropertyDesc pd = beanDesc.getPropertyDesc(i);
265- PrimaryKey primaryKey = pd.getAnnotation(PrimaryKey.class);
266- if((primaryKey == null || primaryKey.generationType() != GenerationType.IDENTITY)
269+ PrimaryKeyInfo primaryKey = entityOperator.getPrimaryKeyInfo(clazz, pd, nameConverter);
270+ if((primaryKey == null || primaryKey.generationType != GenerationType.IDENTITY)
267271 && !pd.isTransient() && pd.isReadable() ){
268272 if(count != 0){
269273 sb.append(", ");
@@ -289,21 +293,23 @@
289293 * @param params the list of parameters
290294 * @return Update SQL
291295 */
292- public static String buildUpdateSql(Object entity, NameConverter nameConverter, List<Object> params){
296+ public static String buildUpdateSql(EntityOperator entityOperator, Object entity, NameConverter nameConverter, List<Object> params){
293297 StringBuilder sb = new StringBuilder();
298+ Class<?> clazz = entity.getClass();
294299
295- sb.append("UPDATE ").append(getTableName(entity.getClass(), nameConverter)).append(" SET ");
300+ sb.append("UPDATE ").append(getTableName(clazz, nameConverter)).append(" SET ");
296301
297- BeanDesc beanDesc = BeanDescFactory.getBeanDesc(entity.getClass());
302+ BeanDesc beanDesc = BeanDescFactory.getBeanDesc(clazz);
298303 {
299304 int count = 0;
300305 for (int i = 0; i < beanDesc.getPropertyDescSize(); i++) {
301306 PropertyDesc pd = beanDesc.getPropertyDesc(i);
302- if(pd.getAnnotation(PrimaryKey.class) == null && !pd.isTransient() && pd.isReadable() ){
307+ PrimaryKeyInfo primaryKey = entityOperator.getPrimaryKeyInfo(clazz, pd, nameConverter);
308+ if(primaryKey == null && !pd.isTransient() && pd.isReadable() ){
303309 if (count != 0) {
304310 sb.append(", ");
305311 }
306- sb.append(getColumnName(pd, nameConverter)).append(" = ?");
312+ sb.append(getColumnName(entityOperator, clazz, pd, nameConverter)).append(" = ?");
307313 params.add(pd.getValue(entity));
308314 count++;
309315 }
@@ -314,11 +320,12 @@
314320 int count = 0;
315321 for (int i = 0; i < beanDesc.getPropertyDescSize(); i++) {
316322 PropertyDesc pd = beanDesc.getPropertyDesc(i);
317- if(pd.getAnnotation(PrimaryKey.class) != null && pd.isReadable() ){
323+ PrimaryKeyInfo primaryKey = entityOperator.getPrimaryKeyInfo(clazz, pd, nameConverter);
324+ if(primaryKey != null && pd.isReadable() ){
318325 if(count != 0){
319326 sb.append(" AND ");
320327 }
321- sb.append(getColumnName(pd, nameConverter)).append(" = ? ");
328+ sb.append(getColumnName(entityOperator, clazz, pd, nameConverter)).append(" = ? ");
322329 params.add(pd.getValue(entity));
323330 count++;
324331 }
@@ -340,7 +347,7 @@
340347 * @param params the list of parameters
341348 * @return Delete SQL
342349 */
343- public static String buildDeleteSql(Object entity, NameConverter nameConverter, List<Object> params){
350+ public static String buildDeleteSql(EntityOperator entityOperator, Object entity, NameConverter nameConverter, List<Object> params){
344351 StringBuilder sb = new StringBuilder();
345352 sb.append("DELETE FROM ").append(getTableName(entity.getClass(), nameConverter));
346353 sb.append(" WHERE ");
@@ -347,15 +354,17 @@
347354
348355 boolean hasPrimaryKey = false;
349356
350- BeanDesc beanDesc = BeanDescFactory.getBeanDesc(entity.getClass());
357+ Class<?> clazz = entity.getClass();
358+ BeanDesc beanDesc = BeanDescFactory.getBeanDesc(clazz);
351359
352360 for(int i=0;i<beanDesc.getPropertyDescSize();i++){
353361 PropertyDesc pd = beanDesc.getPropertyDesc(i);
354- if(pd.getAnnotation(PrimaryKey.class) != null && pd.isReadable()){
362+ PrimaryKeyInfo primaryKey = entityOperator.getPrimaryKeyInfo(clazz, pd, nameConverter);
363+ if(primaryKey != null && pd.isReadable()){
355364 if(!params.isEmpty()){
356365 sb.append(" AND ");
357366 }
358- sb.append(getColumnName(pd, nameConverter)).append("=?");
367+ sb.append(getColumnName(entityOperator, clazz, pd, nameConverter)).append("=?");
359368 params.add(pd.getValue(entity));
360369 hasPrimaryKey = true;
361370 }
Show on old repository browser