模拟DBUtils中的queryRunner.query()的反射机制的模拟

Posted zwgitOne123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模拟DBUtils中的queryRunner.query()的反射机制的模拟相关的知识,希望对你有一定的参考价值。

本文主要是讲述对于DBUtils中的queryRunner.query(connection,sql, new BeanListHandler<>(Admin.class))的模拟

代码结构:

 DBUtilsReflection类:

/**
 * 将查询到的结果集,运用反射机制,创建对象,并存放如集合中
 * resultSet->admin对象->list集合
 */
public class DBUtilsReflection 
    // 存储admin对象的集合
    private ArrayList<Admin> adminList = new ArrayList<>();
    private ResultSet resultSet = null;
    private PreparedStatement preStatement = null;

    // 利用反射机制,创建对象
    public ArrayList<Admin> getAdminList(Connection connection,String sql,Class<?> aClass)
        try 
            Constructor<?> constructor = aClass.getConstructor(Integer.class, String.class, String.class);
            ResultSet resultSet = getResultSet(connection, sql);
            while(resultSet.next())
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                String pwd = resultSet.getString("pwd");
                Admin admin = (Admin) constructor.newInstance(id, name, pwd);
                adminList.add(admin);
            
         catch (Exception e) 
            e.printStackTrace();
         finally 
            JDBCUtilsByDruid.Close(resultSet,preStatement,connection);
        
        return adminList;
    

    // 得到它的结果集
    public ResultSet getResultSet(Connection connection,String sql) 

        try 
            preStatement = connection.prepareStatement(sql);
            resultSet = preStatement.executeQuery(sql);
         catch (SQLException e) 
            e.printStackTrace();
        
        return resultSet;
    

DBUtilsReflectionTest类:

public class DBUtilsReflectionTest 
    public static void main(String[] args) 
        Connection connection = JDBCUtilsByDruid.getConnection();
        String sql = "select * from admin";
        DBUtilsReflection queryRunner = new DBUtilsReflection();
        ArrayList<Admin> adminList = queryRunner.getAdminList(connection, sql, Admin.class);
        for (Admin admin : adminList) 
            System.out.println(admin);
        

    

运行结果如下:

Adminid=3, name=\'Tom3\', pwd=\'123\'
Adminid=5, name=\'Tom2\', pwd=\'123\'
Adminid=6, name=\'Tom3\', pwd=\'123\'
Adminid=8, name=\'Tom2\', pwd=\'123\'
Adminid=9, name=\'Tom3\', pwd=\'123\'
Adminid=11, name=\'zw\', pwd=\'123\'
Adminid=12, name=\'郑为\', pwd=\'1234\'
Adminid=13, name=\'郑威\', pwd=\'1234\'
Adminid=14, name=\'郑为\', pwd=\'1234\'
Adminid=15, name=\'郑威\', pwd=\'1234\'

Process finished with exit code 0

 

以上是关于模拟DBUtils中的queryRunner.query()的反射机制的模拟的主要内容,如果未能解决你的问题,请参考以下文章

Java学习笔记49(DBUtils工具类二)

java mysql多次事务 模拟依据汇率转账,并存储转账信息 分层完成 dao层 service 层 client层 连接池使用C3p0 写入库使用DBUtils

DBUtils和连接池

Pyspark 与 DBUtils

DBUtils

数据库——DBUtils和连接池