JdbcController:
package com.sdkj.demo.controller;
import com.sdkj.demo.entity.ConnectInfo;
import com.sdkj.demo.entity.Student;
import com.sdkj.demo.utils.JDBCQueryUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
import java.util.Map;
@Controller
public class JdbcController {
@PostMapping("/test")
@ResponseBody
public String startCron(@RequestBody(required = false) Map<String,String> map){
ConnectInfo connectInfo = new ConnectInfo();
connectInfo.setDriverClassName("com.mysql.cj.jdbc.Driver");
connectInfo.setUrl("jdbc:mysql://xxxx:3306/platform_admin_server");
connectInfo.setUser("root");
connectInfo.setPassword("xxxx");
String sql = "select user_id userId,user_name userName,nick_name nickName from sys_user";
JDBCQueryUtils jDBCQueryUtils =new JDBCQueryUtils();
List<Student> studentList = jDBCQueryUtils.queryList(connectInfo,sql, Student.class);
for (Student student : studentList) {
System.out.println(student);
}
return "";
}
}
ConnectInfo:
package com.sdkj.demo.entity;
public class ConnectInfo {
private String driverClassName;
private String url;
private String user;
private String password;
public String getDriverClassName() {
return driverClassName;
}
public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
JDBCQueryUtils:
package com.sdkj.demo.utils;
import com.sdkj.demo.entity.ConnectInfo;
import org.apache.commons.beanutils.PropertyUtils;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/**
* 通用的增删改查
*/
public class JDBCQueryUtils {
//3. 适用于任何表的通用增删改
public int update(ConnectInfo connectInfo, String sql, Object ... args){
Connection conn = null;
PreparedStatement ps = null;
int row = 0;
try {
//1. 获取连接
conn = JDBCUtils.getConnection(connectInfo);
//2. 获取 PreparedStatement,用于发送 SQL
ps = conn.prepareStatement(sql);
//3. 填充占位符(根据可变参数确定占位符的个数)
for (int i = 0; i < args.length; i++) {
ps.setObject(i+1, args[i]);//注意:SQL中的索引从1开始
}
//4. 执行 SQL
row = ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
//5. 关闭连接
JDBCUtils.close(conn, ps);
}
return row;
}
public <T> List<T> queryList(ConnectInfo connectInfo, String sql, Class<T> clazz, Object ... args){
List<T> list = new ArrayList<>();
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
//1. 获取连接
conn = JDBCUtils.getConnection(connectInfo);
//2. 获取 PreparedStatement,用于发送 SQL
ps = conn.prepareStatement(sql);
//3. 填充占位符
for (int i = 0; i < args.length; i++) {
ps.setObject(i+1, args[i]);
}
//4. 执行 SQL, 获取 ResultSet 结果集
rs = ps.executeQuery();
//5. 获取当前结果集的元数据 ResultSetMetaData
ResultSetMetaData rsmd = rs.getMetaData();
//6. 获取结果集的列数
int columnCount = rsmd.getColumnCount();
//7. 获取结果集中的数据并封装进对象
while(rs.next()){
T t = clazz.newInstance();
for (int i = 0; i < columnCount; i++) {
//7.1获取结果集的列名(别名)
String columnName = rsmd.getColumnLabel(i + 1);
//7.2根据列名(别名)获取结果集列值
Object columnValue = rs.getObject(columnName);
//7.3利用反射为对象属性设置值,开源组织提供的工具类完成
PropertyUtils.setProperty(t, columnName, columnValue);
}
list.add(t);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//8. 关闭连接
JDBCUtils.close(conn, ps, rs);
}
return list;
}
public <T> T query(ConnectInfo connectInfo,String sql, Class<T> clazz, Object ... args){
T t = null;
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
//1. 获取连接
conn = JDBCUtils.getConnection(connectInfo);
//2. 获取 PreparedStatement,用于发送 SQL
ps = conn.prepareStatement(sql);
//3. 填充占位符
for (int i = 0; i < args.length; i++) {
ps.setObject(i+1, args[i]);
}
//4. 执行 SQL,获取 ResultSet
rs = ps.executeQuery();
//5. 获取结果集的元数据
ResultSetMetaData rsmd = rs.getMetaData();
//6. 获取结果集的列数
int columnCount = rsmd.getColumnCount();
//7. 获取结果集中的数据
if(rs.next()){
t = clazz.newInstance();
for (int i = 0; i < columnCount; i++) {
//8. 获取结果集列别名(列名)
String columnName = rsmd.getColumnLabel(i + 1);
//9. 获取结果集中对应列值
Object columnValue = rs.getObject(columnName);
//10. 利用反射为属性设置值
Field field = clazz.getDeclaredField(columnName); //注意:结果集的列名(别名)必须与属性名保持一致!!!!
field.setAccessible(true);//忽略访问权限
field.set(t, columnValue);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//7. 关闭连接
JDBCUtils.close(conn, ps, rs);
}
return t;
}
}
JDBCUtils:
package com.sdkj.demo.utils;
import com.sdkj.demo.entity.ConnectInfo;
import java.sql.*;
public class JDBCUtils {
/**
* 获取连接
* @return
* @throws Exception
*/
public static Connection getConnection(ConnectInfo connectInfo) throws Exception {
//1. 加载驱动
Class.forName(connectInfo.getDriverClassName());
//2. 获取连接
return DriverManager.getConnection(connectInfo.getUrl(), connectInfo.getUser(), connectInfo.getPassword());
}
/**
* 关闭连接
* @param conn
* @param ps
*/
public static void close(Connection conn, PreparedStatement ps, ResultSet rs){
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(ps != null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 关闭连接
* @param conn
* @param ps
*/
public static void close(Connection conn, PreparedStatement ps){
if(ps != null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
pom:
<!-- Apache工具组件 -->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.4</version>
</dependency>
<!-- Mysql Connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>