转自: 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