--- /dev/null
+package test.com.lavans.luz2.dao.old;\r
+\r
+import java.lang.reflect.Field;\r
+import java.sql.SQLException;\r
+import java.util.LinkedList;\r
+import java.util.List;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+\r
+\r
+import com.lavans.luz2.commons.StringUtils;\r
+import com.lavans.luz2.util.Config;\r
+\r
+/**\r
+ * Meta data get utility\r
+ * @author dobashi\r
+ *\r
+ */\r
+public class DaoUtils {\r
+ private static Log logger = LogFactory.getLog(GenericDao.class);\r
+\r
+ private static String toSqlName(String str){\r
+ return StringUtils.toUnderscore(str).toUpperCase();\r
+ }\r
+\r
+\r
+ // for dao\r
+ /**\r
+ * Make table name from entity name.\r
+ * Change camel case to bar\r
+ * @return\r
+ */\r
+ public static String getTableName(Class<?> entityClass){\r
+ return toSqlName(entityClass.getSimpleName());\r
+ }\r
+ /**\r
+ * Make all column\r
+ * Change camel case to bar\r
+ * @return\r
+ */\r
+ public static String getSelectColumns(List<Field> fields){\r
+ return toSqlName(StringUtils.join(getFieldNames(fields), ","));\r
+ }\r
+ public static String getInsertColumns(List<Field> fields){\r
+ return ":"+StringUtils.join(getFieldNames(fields), ",:");\r
+ }\r
+ public static String getUpdateColumns(List<Field> fields){\r
+ // null check\r
+ if(fields==null || fields.size()==0) return "";\r
+\r
+ StringBuilder sb = new StringBuilder();\r
+ for(Field field: fields){\r
+ sb.append("AND ").append(toSqlName(field.getName())).append("=:").append(field.getName());\r
+ }\r
+ return sb.substring(4);\r
+ }\r
+\r
+ /**\r
+ * Get sequence name for serial id.\r
+ * @return\r
+ */\r
+ public static String getSequenceName(Field field){\r
+ // first field of pk should be serial.\r
+ // *** this mthod is for postgresql only ***\r
+ // @todo for other DB\r
+ String tableName = getTableName(field.getDeclaringClass());\r
+ String fieldname = toSqlName(field.getName());\r
+ return tableName+"_"+fieldname+"_SEQ";\r
+ }\r
+\r
+ private static List<String> getFieldNames(List<Field> src){\r
+ List<String> list = new LinkedList<String>();\r
+ for(Field field: src){\r
+ list.add(field.getName());\r
+ }\r
+\r
+ logger.debug(list);\r
+\r
+ return list;\r
+ }\r
+\r
+ /**\r
+ * Make condition String for select from PK.\r
+ * @return\r
+ */\r
+ public static String getConditions(List<Field> fields){\r
+ StringBuilder sb = new StringBuilder();\r
+ for(Field field: fields){\r
+ sb.append("AND "+toSqlName(field.getName()) +"=:"+ field.getName());\r
+ }\r
+\r
+ logger.debug(sb.toString());\r
+\r
+ return "WHERE"+ sb.substring(3);\r
+ }\r
+\r
+\r
+ /**\r
+ * xmlからSQL取得。共通部。\r
+ * @return\r
+ * @throws SQLException\r
+ */\r
+ public static String getSql(Class<?> clazz, String key){\r
+ Config config = Config.getInstance(clazz.getName().replace(".","/")+".xml");\r
+ String sql="";\r
+ try {\r
+ sql = config.getNodeValue("/sql/"+key).trim();\r
+ } catch (Exception e) {\r
+ }\r
+ if(StringUtils.isEmpty(sql)){\r
+ logger.error("Can not find SQL["+ key +"]");\r
+ }\r
+ return sql;\r
+ }\r
+}\r