将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除dqlpublic 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开始,所以+1preparedStatement.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开始,所以+1preparedStatement.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;}}