OSDN Git Service

cf0fb28239b2f16e94fbfcc5b03ad8b3f3e1a2c5
[luz/luz.git] / src / test / com / lavans / luz2 / dao / old / DaoUtils.java
1 package test.com.lavans.luz2.dao.old;\r
2 \r
3 import java.lang.reflect.Field;\r
4 import java.sql.SQLException;\r
5 import java.util.LinkedList;\r
6 import java.util.List;\r
7 \r
8 import org.apache.commons.logging.Log;\r
9 import org.apache.commons.logging.LogFactory;\r
10 \r
11 \r
12 import com.lavans.luz2.commons.StringUtils;\r
13 import com.lavans.luz2.util.Config;\r
14 \r
15 /**\r
16  * Meta data get utility\r
17  * @author dobashi\r
18  *\r
19  */\r
20 public class DaoUtils {\r
21         private static Log logger = LogFactory.getLog(GenericDao.class);\r
22 \r
23         private static String toSqlName(String str){\r
24                 return StringUtils.toUnderscore(str).toUpperCase();\r
25         }\r
26 \r
27 \r
28         // for dao\r
29         /**\r
30          * Make table name from entity name.\r
31          * Change camel case to bar\r
32          * @return\r
33          */\r
34         public static String getTableName(Class<?> entityClass){\r
35                 return toSqlName(entityClass.getSimpleName());\r
36         }\r
37         /**\r
38          * Make all column\r
39          * Change camel case to bar\r
40          * @return\r
41          */\r
42         public static String getSelectColumns(List<Field> fields){\r
43                 return toSqlName(StringUtils.join(getFieldNames(fields), ","));\r
44         }\r
45         public static String getInsertColumns(List<Field> fields){\r
46                 return ":"+StringUtils.join(getFieldNames(fields), ",:");\r
47         }\r
48         public static String getUpdateColumns(List<Field> fields){\r
49                 // null check\r
50                 if(fields==null || fields.size()==0) return "";\r
51 \r
52                 StringBuilder sb = new StringBuilder();\r
53                 for(Field field: fields){\r
54                         sb.append("AND ").append(toSqlName(field.getName())).append("=:").append(field.getName());\r
55                 }\r
56                 return sb.substring(4);\r
57         }\r
58 \r
59         /**\r
60          * Get sequence name for serial id.\r
61          * @return\r
62          */\r
63         public static String getSequenceName(Field field){\r
64                 // first field of pk should be serial.\r
65                 // *** this mthod is for postgresql only ***\r
66                 // @todo for other DB\r
67                 String tableName = getTableName(field.getDeclaringClass());\r
68                 String fieldname = toSqlName(field.getName());\r
69                 return tableName+"_"+fieldname+"_SEQ";\r
70         }\r
71 \r
72         private static List<String> getFieldNames(List<Field> src){\r
73                 List<String> list = new LinkedList<String>();\r
74                 for(Field field: src){\r
75                         list.add(field.getName());\r
76                 }\r
77 \r
78                 logger.debug(list);\r
79 \r
80                 return list;\r
81         }\r
82 \r
83         /**\r
84          * Make condition String for select from PK.\r
85          * @return\r
86          */\r
87         public static String getConditions(List<Field> fields){\r
88                 StringBuilder sb = new StringBuilder();\r
89                 for(Field field: fields){\r
90                         sb.append("AND "+toSqlName(field.getName()) +"=:"+ field.getName());\r
91                 }\r
92 \r
93                 logger.debug(sb.toString());\r
94 \r
95                 return "WHERE"+ sb.substring(3);\r
96         }\r
97 \r
98 \r
99         /**\r
100          * xmlからSQL取得。共通部。\r
101          * @return\r
102          * @throws SQLException\r
103          */\r
104          public static String getSql(Class<?> clazz, String key){\r
105                 Config config = Config.getInstance(clazz.getName().replace(".","/")+".xml");\r
106                 String sql="";\r
107                 try {\r
108                         sql = config.getNodeValue("/sql/"+key).trim();\r
109                 } catch (Exception e) {\r
110                 }\r
111                 if(StringUtils.isEmpty(sql)){\r
112                         logger.error("Can not find SQL["+ key +"]");\r
113                 }\r
114                 return sql;\r
115         }\r
116 }\r