将xxx_xxx的形式转换为小驼峰
@param column 获得的sql中的列名
@return 小驼峰的形式的属性名
处理dml
处理dml
package com.aistart.tech.utils;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class BaseDao {
/**
* 将xxx_xxx的形式转换为小驼峰
* @param column 获得的sql中的列名
* @return 小驼峰的形式的属性名
*/
public static String columnToFiled(String column){
String[] s = column.split("_");
StringBuilder filed = new StringBuilder(s[0]);
for (int i = 1; i < s.length; i++) {
filed.append(Character.toUpperCase(s[i].charAt(0))).append(s[i].substring(1));
}
return filed.toString();
}
public static void main(String[] args) {
System.out.println(columnToFiled("user_id"));
}
//专门处理dml除dql
public static int executeDml(String sql,Object... args){
int rows = 0;
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = JdbcPoolUtil.getConnection();
preparedStatement = connection.prepareStatement(sql);
// if (args==null||args.length==0) return 0;
for (int i = 0; i < args.length; i++) {
//注意
//setObject(的索引是从1开始,args是从0开始,所以+1
preparedStatement.setObject(i+1,args[i]);
}
rows = preparedStatement.executeUpdate();
} catch (SQLException e) {
throw new RuntimeException(e);
}finally {
if (preparedStatement != null) {
try {
preparedStatement.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
try {
//考虑下事务,如果被人修改了autocommit,就是正在事务中,不回收
//如果没人动,说明不在事务中,直接释放
if (connection.getAutoCommit()){
JdbcPoolUtil.freeConnection();
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
return rows;
}
//专门处理dql
/**
* todo:几个关键参数!!!
* @param clazz 关于dql返回结果的封装类型
* @param sql 基本的sql预置
* @param args 几个传入的关键条件
* @return
* @param <T>
*/
public static <T> List<T> executeDql(Class<T> clazz,String sql,Object... args){
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
//创建一个List容器,用来容载对象并返回
List<T> list = new ArrayList<>();
try {
connection = JdbcPoolUtil.getConnection();
preparedStatement = connection.prepareStatement(sql);
// if (args==null||args.length==0) return 0;
for (int i = 0; i < args.length; i++) {
//注意
//setObject(的索引是从1开始,args是从0开始,所以+1
preparedStatement.setObject(i+1,args[i]);
}
resultSet = preparedStatement.executeQuery();
//获取元数据,列信息
ResultSetMetaData metaData = resultSet.getMetaData();
//多少列(几个属性)
int columnCount = metaData.getColumnCount();
//一行一行来
while (resultSet.next()){
//创建一个对象
T t = clazz.newInstance();
//一列一列来
for (int i = 1; i <= columnCount; i++) {
//获取字段名
String columnLabel = metaData.getColumnLabel(i);//user_id user_pwd
//当前字段下的值
Object value = resultSet.getObject(i);
//在Java中对应的对象的属性值
Field declaredField = clazz.getDeclaredField(columnToFiled(columnLabel));
//解除私密
declaredField.setAccessible(true);
//将对应对象的对应属性赋值
declaredField.set(t,value);
// t.setUserId = resultSet.getObject()
}
list.add(t);
}
} catch (SQLException e) {
throw new RuntimeException(e);
} catch (InstantiationException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
} finally {
if (preparedStatement != null) {
try {
preparedStatement.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
try {
//考虑下事务,如果被人修改了autocommit,就是正在事务中,不回收
//如果没人动,说明不在事务中,直接释放
if (connection.getAutoCommit()){
JdbcPoolUtil.freeConnection();
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
return list;
}
}