转自: http://blog.csdn.net/hanghangde/article/details/53946722
主要就是ResultSetToData和TranesformToSql文件的代码:
ResultSetToData.java
package com.lirui.order.dao.tool;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;public class ResultSetToData { /** * 根据clazz和ResultSet返回对象(这个对象里的全部属性)集合 * * @param rs * @param clazz * @return */ public static <T> ArrayList<T> getDataByClassFiled(ResultSet rs, Class<T> clazz) { ArrayList<T> domains = new ArrayList<>(); try { Field[] fields = clazz.getDeclaredFields(); Field[] superFields = clazz.getSuperclass().getDeclaredFields(); Field[] allFields = addFields(fields, superFields); while (rs.next()) { T vo = clazz.newInstance(); for (Field field : allFields) { String methodName = getSetterMethodName(field.getName()); Method method = clazz .getMethod(methodName, field.getType()); invokeMothod(rs, field, method, vo); } domains.add(vo); } } catch (InstantiationException | IllegalAccessException | SecurityException | SQLException | NoSuchMethodException e) { e.printStackTrace(); } return domains; } /** * 根据返回的resultSet来决定生成对象有那些属性 * * @param rs * @param clazz * @return */ public static <T> ArrayList<T> getDataByResultSet(ResultSet rs, Class<T> clazz) { ArrayList<T> domains = new ArrayList<>(); List<Field> allFields = new ArrayList<>(); try { if (null==rs) { return null; } java.sql.ResultSetMetaData metaData = rs.getMetaData(); for (int i = 0; i < metaData.getColumnCount(); i++) { allFields .add(clazz.getDeclaredField(metaData.getColumnName(i+1))); } while (rs.next()) { T vo = clazz.newInstance(); for (Field field : allFields) { String methodName = getSetterMethodName(field.getName()); Method method = clazz .getMethod(methodName, field.getType()); invokeMothod(rs, field, method, vo); } domains.add(vo); } } catch (InstantiationException | IllegalAccessException | SecurityException | SQLException | NoSuchMethodException | NoSuchFieldException e) { e.printStackTrace(); } return domains; } /** * 相加f1和f2的Field * * @param f1 * @param f2 * @return */ private static Field[] addFields(Field[] f1, Field[] f2) { List<Field> fields = new ArrayList<>(); for (Field field : f1) { fields.add(field); } for (Field field : f2) { fields.add(field); } return fields.toArray(new Field[f1.length + f2.length]); } /** * 根据属性名得到set的方法名 * * @param name * @return */ private static String getSetterMethodName(String name) { String begin = name.substring(0, 1).toUpperCase(); String mothodName = "set" + begin + name.substring(1, name.length()); return mothodName; } /** * 根据ResultSet和Field的getName从结果集取出 * * @param rs * @param field * @param method * @param object */ private static void invokeMothod(ResultSet rs, Field field, Method method, Object object) { try { Object o=rs.getObject(field.getName()); method.invoke(object, o); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
TansformToSql.java
package com.lirui.order.dao.tool;import java.lang.reflect.Field;public class TransformToSql { /** * 通过反射机制生成插入sql语句 * * @param clazz * @return */ public static String transformToInsertSql(Class<?> clazz) { StringBuffer bufferFront = new StringBuffer(); StringBuffer bufferLast = new StringBuffer(); String tableName = clazz.getSimpleName(); bufferFront.append("insert into " + tableName.substring(0, 1).toLowerCase() + tableName.substring(1, tableName.length()) + "("); bufferLast.append(" values("); Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { bufferFront.append(field.getName() + ","); bufferLast.append("?,"); } bufferFront.delete(bufferFront.length() - 1, bufferFront.length()); bufferLast.delete(bufferLast.length() - 1, bufferLast.length()); bufferFront.append(")"); bufferLast.append(")"); bufferFront.append(bufferLast); return bufferFront.toString(); } /** * 通过反射机制生成通用的更新语句 * * @param clazz * @return */ public static String transformToUpdateSql(Class<?> clazz) { StringBuffer bufferFront = new StringBuffer(); StringBuffer bufferLast = new StringBuffer(); String tableName = clazz.getSimpleName(); bufferFront.append("update " + tableName.substring(0, 1).toLowerCase() + tableName.substring(1, tableName.length()) + " set "); bufferLast.append(" where id=?"); Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { if (field.getName().equals("id")) continue; bufferFront.append(field.getName() + "=?,"); } bufferFront.delete(bufferFront.length() - 1, bufferFront.length()); bufferFront.append(bufferLast); return bufferFront.toString(); }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62