10 封装dml,dql

发布于:2024-03-22 ⋅ 阅读:(86) ⋅ 点赞:(0)

将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;
    }

}


网站公告

今日签到

点亮在社区的每一天
去签到