连接库操作:
1 package com.qa.xxx;
2
3
4 import org.springframework.stereotype.Component;
5 import java.lang.reflect.Method;
6 import java.sql.*;
7 import java.util.ArrayList;
8 import java.util.List;
9
10 @Component
11 public class MySQLUtil {
12
13 private static final String MYSQL_DRIVER = "com.mysql.cj.jdbc.Driver";
14
15 private static ThreadLocal<Connection> threadLocal = new ThreadLocal<>();
16
17
18 public static Connection getMysqlConnection(String url, String userName, String userPassword){
19 Connection connection = threadLocal.get();
20 if(null == connection){
21 try {
22 Class.forName(MYSQL_DRIVER);
23 connection = DriverManager.getConnection(url, userName, userPassword);
24 return connection;
25 } catch (ClassNotFoundException e) {
26 e.printStackTrace();
27 } catch (SQLException e) {
28 e.printStackTrace();
29 }
30 }
31 return connection;
32 }
33
34 /**
35 * 查询定义的相应的数据库对象bean值
36 * @param url
37 * @param userName
38 * @param userPassword
39 * @param sql
40 * @param t
41 * @param objs
42 * @param <T>
43 * @return
44 */
45 public static <T> List<T> excuteQuery(String url, String userName, String userPassword, String sql, T t, Object...objs){
46 List<T> list = new ArrayList<>();
47 Connection connection = null;
48 PreparedStatement ps = null;
49 ResultSet rs = null;
50 try{
51 connection = MySQLUtil.getMysqlConnection(url,userName,userPassword);
52 ps = connection.prepareStatement(sql);
53 //占位符赋值
54 if(null != objs){
55 for(int i=0; i<objs.length; i++){
56 ps.setObject((i+1), objs[i]);
57 }
58 }
59 rs = ps.executeQuery();
60 ResultSetMetaData rm = rs.getMetaData();
61 int columnCount = rm.getColumnCount();
62 while (rs.next()){
63 Class<? extends Object> clzss = t.getClass();
64 T newInstance = (T)clzss.newInstance();
65 for(int i=1; i<=columnCount; i++){
66 String columnName = rm.getColumnName(i);
67 String methodName = "set" + columnName.substring(0,1).toUpperCase() + columnName.substring(1);
68 String columnClassName = rm.getColumnClassName(i);
69 Method method = clzss.getDeclaredMethod(methodName, Class.forName(columnClassName));
70 method.invoke(newInstance, rs.getObject(columnName));
71 }
72 list.add(newInstance);
73 }
74
75 }catch (Exception e){
76 e.printStackTrace();
77 }finally {
78 MySQLUtil.close(ps);
79 }
80 return list;
81 }
82
83 /**
84 * 查询单个字段值
85 * @param url
86 * @param userName
87 * @param userPassword
88 * @param sql
89 * @param objs
90 * @return
91 */
92 public static List<String> excuteOneFieldQuery(String url, String userName, String userPassword, String sql, Object...objs){
93 List<String> list = new ArrayList<>();
94 Connection connection = null;
95 PreparedStatement ps = null;
96 ResultSet rs = null;
97 try{
98 connection = MySQLUtil.getMysqlConnection(url,userName,userPassword);
99 ps = connection.prepareStatement(sql);
100 //占位符赋值
101 if(null != objs){
102 for(int i=0; i<objs.length; i++){
103 ps.setObject((i+1), objs[i]);
104 }
105 }
106 rs = ps.executeQuery();
107 ResultSetMetaData rm = rs.getMetaData();
108 int columnCount = rm.getColumnCount();
109 while (rs.next()){
110 list.add(rs.getString(1));
111 }
112 }catch (Exception e){
113 e.printStackTrace();
114 }finally {
115 MySQLUtil.close(ps);
116 }
117 return list;
118 }
119
120 /**
121 * 增删改
122 * @param url
123 * @param userName
124 * @param userPassword
125 * @param sql
126 * @param objs
127 * @return
128 */
129 public static Integer executeDML(String url, String userName, String userPassword, String sql, Object...objs){
130 Connection connection = null;
131 PreparedStatement ps = null;
132 Integer integer = 0;
133 try{
134 connection = MySQLUtil.getMysqlConnection(url,userName,userPassword);
135 ps = connection.prepareStatement(sql);
136 if(null != objs){
137 for(int i=0; i<objs.length; i++){
138 ps.setObject((i+1), objs[i]);
139 }
140 }
141 integer = ps.executeUpdate();
142 }catch (SQLException e){
143 e.printStackTrace();
144 }finally {
145 MySQLUtil.close(ps);
146 }
147 return integer;
148 }
149
150 /**
151 * 关闭操作
152 * @param t
153 * @param <T>
154 */
155 private static <T>void close(T...t){
156 //循环关流
157 for(T tmp:t) {
158 //关闭流对象
159 if(tmp instanceof AutoCloseable) {
160 try {
161 ((AutoCloseable)tmp).close();
162 } catch (Exception e) {
163 e.printStackTrace();
164 }
165 }
166 }
167 }
168
169 }
数据库字段比对:
1 package com.qa.xxx;
2
3
4 import org.slf4j.Logger;
5 import org.slf4j.LoggerFactory;
6 import org.springframework.stereotype.Component;
7 import java.lang.reflect.Field;
8 import java.lang.reflect.Method;
9 import java.util.HashMap;
10 import java.util.List;
11 import java.util.Map;
12
13 @Component
14 public class DataCompareUtil {
15
16 private final static Logger logger = LoggerFactory.getLogger(DataCompareUtil.class);
17
18 /**
19 * 数据库表查询字段比对
20 * @param obj1 老查询获取的数据
21 * @param obj2 新查询获取的数据
22 * @param list 要对比的字段
23 * @return 返回<字段名称,原值x 新值x>
24 */
25 public static Map<String, String> compareObject(Object obj1, Object obj2, List<String> list){
26 Map<String, String> map = new HashMap<>();
27 if(null != list && !list.isEmpty()){
28 for(String field : list){
29 String firstLetter = field.substring(0,1).toUpperCase();
30 String getter = "get" + firstLetter + field.substring(1);
31 try {
32 Method method1 = obj1.getClass().getMethod(getter, new Class[]{});
33 Method method2 = obj2.getClass().getMethod(getter, new Class[]{});
34 Object oldValue = method1.invoke(obj1, new Object[] {});
35 Object newValue = method2.invoke(obj2, new Object[] {});
36 map.put(field, "原值:" + oldValue.toString() + " 新值:" + newValue.toString());
37 } catch (Exception e) {
38 e.printStackTrace();
39 }
40 }
41 return map;
42 }else {
43 Class clazz = obj2.getClass();
44 Field[] fields = clazz.getDeclaredFields();
45 for(Field field : fields){
46 String fieldName = field.getName();
47 String firstLetter = fieldName.substring(0,1).toUpperCase();
48 String getter = "get" + firstLetter + fieldName.substring(1);
49 try {
50 Method method1 = obj1.getClass().getMethod(getter, new Class[]{});
51 Method method2 = obj2.getClass().getMethod(getter, new Class[]{});
52 Object oldValue = method1.invoke(obj1, new Object[] {});
53 Object newValue = method2.invoke(obj2, new Object[] {});
54 map.put(fieldName, "原值:" + oldValue.toString() + " 新值:" + newValue.toString());
55 } catch (Exception e) {
56 e.printStackTrace();
57 }
58 }
59 return map;
60 }
61 }
62
63 }