Java成神之路(不定时更新)!

Java成神之路

第一次手动封装JDBC

第一次尝试封装,只封装了select方法和insert方法!

package com.java.lixd.reflect;

import com.java.lixd.reflect.DBUtil;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class DataBaseUtil {
    /**
     *
     * @param sql 传入的sql语句
     * @param params 查询参数
     * @param clazz entity Class
     * @return
     */
    public static List selectDatas(String sql, Object[] params, Class clazz) {

        ResultSet rs = null;
        List list = new ArrayList();
        try (Connection connection = DBUtil.getConnection();
             PreparedStatement preparedStatement = connection.prepareStatement(sql);
        ) {
            if (params != null) {
                rs = preparedStatement.executeQuery();
            }
            ResultSetMetaData metaData = rs.getMetaData();
            int columnCount = metaData.getColumnCount();
            while (rs.next()) {
                final Object obj = clazz.newInstance();
                for (int i = 0; i < columnCount; i++) {
                    Object objectVale = rs.getObject(i + 1);
                    final String columnName = metaData.getColumnName(i + 1).toLowerCase();
                    final Field field = clazz.getDeclaredField(columnName);
                    final Method method = clazz.getMethod(getSetName(columnName), field.getType());
                    if (objectVale instanceof Number) {
                        Number number = (Number) objectVale;
                        final String fname = field.getType().getName();
                        if ("int".equals(fname) || "java.lang.Integer".equals(fname)) {
                            method.invoke(obj, number.intValue());
                        } else if ("shor".equals(fname) || "java.lang.Short".equals(fname)) {
                            method.invoke(obj, number.shortValue());
                        } else if ("long".equals(fname) || "java.lang.Long".equals(fname)) {
                            method.invoke(obj, number.longValue());
                        } else if ("byte".equals(fname) || "java.lang.Byte".equals(fname)) {
                            method.invoke(obj, number.byteValue());
                        } else if ("float".equals(fname) || "java.lang.Float".equals(fname)) {
                            method.invoke(obj, number.floatValue());
                        } else if ("double".equals(fname) || "java.lang.Double".equals(fname)) {
                            method.invoke(obj, number.doubleValue());
                        }
                    } else {
                        method.invoke(obj, objectVale);
                    }
                }
                list.add(obj);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                rs.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        return list;
    }

    /**
     * 获取成员变量的set方法
     * @param name 需要获取set方法的成员变量名
     * @return 对应的set方法
     */
    public static String getSetName(String name) {
        return "set" + name.substring(0, 1).toUpperCase() + name.substring(1);
    }

    /**
     * 获取成员变量的get方法
     * @param name 需要获取get方法的成员变量名
     * @return 对应的get方法
     */
    public static String getGetName(String name) {
        return "get" + name.substring(0, 1).toUpperCase() + name.substring(1);
    }

    /**
     * insert into Object
     * @param objs 需要插入的数据值
     * @param clazz entity Class
     * @return 受影响行数
     * @throws Exception
     */
    public static int[] insertDatas(Object[] objs, Class clazz) {
        Connection connection = null;
        connection = DBUtil.getConnection();
        String sql = "";
        PreparedStatement preparedStatement = null;
        Field[] declaredFields = clazz.getDeclaredFields();
        StringBuilder sb = new StringBuilder("values(");
        StringBuilder inserStr = new StringBuilder("insert into " + clazz.getSimpleName().toLowerCase() + " (");
        for (int i = 0; i < declaredFields.length; i++) {
            if (i == declaredFields.length - 1) {
                sb.append("?)");
                inserStr.append(declaredFields[i].getName() + ")");

            } else {
                sb.append("? ,");
                inserStr.append(declaredFields[i].getName() + ",");
            }

        }
        sql = inserStr + " " + sb.toString();
        try {
            preparedStatement=connection.prepareStatement(sql);
            for (int i = 0; i < objs.length; i++) {
                for (int j = 0; j < declaredFields.length; j++) {
                    Method method = clazz.getDeclaredMethod(getGetName(declaredFields[j].getName()));
                    Class type = declaredFields[j].getType();
                    Object fieldValue =method.invoke(objs[i]);
                    System.out.println("fieldValue:"+fieldValue);
                    preparedStatement.setObject(j+1,fieldValue);
                }
                preparedStatement.addBatch();
            }
            System.out.println(sql);
            int[] ints = preparedStatement.executeBatch();
            return ints;
        } catch (Exception e) {
           e.printStackTrace();
        }finally {
            DBUtil.closeConnection(connection,preparedStatement);
        }
        return  null;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值