对于jdbc的连接 使用泛型

通用的查找方法设置

public List findAll(String sql, Class cls, Object... obj){
// 1. 获取连接
Connection conn = DBUtil.getConn();
// 2. 预处理对象
PreparedStatement ps = null;
// 3. 查询的结果对象
ResultSet rs = null;
// 4. 返回值对象
List infos = new ArrayList<>();
try{
// 5. 实例化预处理对象,并处理sql语句
ps = conn.prepareStatement(sql);
// 6. 如果存在参数则处理参数,没有则直接执行
for (int i = 0; i < obj.length; i++) {
ps.setObject(i + 1, obj[i]);
}
rs = ps.executeQuery();
while(rs.next()){
// 循环获取每一行值
T t = rsToBean(rs, cls);
infos.add(t);
}
} catch (Exception e){
e.printStackTrace();
} finally {
DBUtil.close(conn, ps, rs);
}
return infos;
}

public <T>T findOne(String sql, Class<T> cls, Object... obj){
    List<T> all = findAll(sql, cls, obj);
    if (all.size() > 0){
        return all.get(0);
    }
    return null;
}

private T rsToBean(ResultSet rs, Class cls) {
T t = null;
try{
// 实例化对象
t = cls.newInstance();
// 获取查询的源数据
ResultSetMetaData metaData = rs.getMetaData();
// 获取查询的字段总数
int columnCount = metaData.getColumnCount();
for (int i = 0; i < columnCount; i++) {
// 拿到每个字段的名称
String columnLabel = metaData.getColumnLabel(i + 1);
// 根据字段的名称获取对应的值
Object object = rs.getObject(columnLabel);

            // 通过数据的属性名称获取到对应的对象的属性
            Field declaredField = cls.getDeclaredField(columnLabel);
            // 操作对应的属性,并且给指定的属性设置值
            declaredField.setAccessible(true); // 设置权限
            declaredField.set(t, object);
        }
    } catch (Exception e){
        e.printStackTrace();
    }
    return t;
}

通用的增删改方法设置
public int editBase(String sql, Object... obj){
// 1. 获取连接
Connection conn = DBUtil.getConn();
// 2. 预处理对象
PreparedStatement ps = null;
try{
// 3. 实例化预处理对象
ps = conn.prepareStatement(sql);
// 4. 如果有参数则设置参数
for (int i = 0; i < obj.length; i++) {
ps.setObject(i + 1, obj[i]);
}
// 5. 执行sql语句
return ps.executeUpdate();
} catch (Exception e){
e.printStackTrace();
} finally{
DBUtil.close(conn, ps);
}
return -1;
}

原文地址:https://www.cnblogs.com/1121cyy/p/14203058.html