java 实现mysql通用的不同表查询

package com.atguigu.statement;

import com.atguigu.bean.Customer;
import com.atguigu2.util.JDBCUtils;
import org.junit.jupiter.api.Test;

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

public class PreparedStatementQueryTest {
    @Test
    public void test(){

        String sql ="select name from customers where id = ?";

        ArrayList<Customer> arrayList =null;

        try {
            arrayList = research(Customer.class, sql, 1);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            System.out.println(arrayList);
        }
    }

    //泛型方法
    public <T> ArrayList<T> research(Class<T> clazz, String sql, Object...args){

        ArrayList<T> a = new ArrayList<>();

        Connection con = JDBCUtils.getConnection();
        PreparedStatement pr=null;
        try {
            pr = con.prepareStatement(sql);

            for(int i=0;i<args.length;++i){

                pr.setObject(i+1,args[i]);

            }

            ResultSet resultSet = pr.executeQuery();

            ResultSetMetaData metaData = resultSet.getMetaData();

            int count= metaData.getColumnCount();

            while(resultSet.next()){

                Constructor<T> dc= clazz.getDeclaredConstructor();
                dc.setAccessible(true);
                T t = dc.newInstance();

                for(int i=0;i<count;++i){

                    String column = metaData.getColumnLabel(i+1);

                    Object columnValue =  resultSet.getObject(i+1);

                    Field field = t.getClass().getDeclaredField(column);
                    field.setAccessible(true);
                    field.set(t,columnValue);

                }
                a.add(t);
            }
        } catch (SQLException e) {
            e.printStackTrace();

        } finally {

            try {
                pr.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

            JDBCUtils.CloseConnect_Statement(con,pr);

            return a;
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
由于通用管理信息系统框架的实现需要的代码量较大,此处无法提供完整代码。但是,我可以提供一个通用管理信息系统框架的基本结构,供你参考: 1. 数据库连接类 ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DatabaseConnection { private static String url = "jdbc:mysql://localhost:3306/test"; private static String user = "root"; private static String password = "123456"; private static Connection connection = null; public static Connection getConnection() { try { Class.forName("com.mysql.jdbc.Driver"); connection = DriverManager.getConnection(url, user, password); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } return connection; } } ``` 2. 数据库操作类 ```java import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class DatabaseUtil { private static Connection connection = null; private static PreparedStatement preparedStatement = null; private static ResultSet resultSet = null; public static ResultSet query(String sql) { try { connection = DatabaseConnection.getConnection(); preparedStatement = connection.prepareStatement(sql); resultSet = preparedStatement.executeQuery(); } catch (SQLException e) { e.printStackTrace(); } return resultSet; } public static boolean update(String sql) { boolean flag = false; try { connection = DatabaseConnection.getConnection(); preparedStatement = connection.prepareStatement(sql); int i = preparedStatement.executeUpdate(); if (i > 0) { flag = true; } } catch (SQLException e) { e.printStackTrace(); } return flag; } } ``` 3. 实体类 ```java public class User { private int id; private String name; private String password; private int age; public User() { } public User(int id, String name, String password, int age) { this.id = id; this.name = name; this.password = password; this.age = age; } // getter/setter方法省略 } ``` 4. DAO层 ```java public class UserDao { public List<User> queryAll() { List<User> userList = new ArrayList<>(); String sql = "SELECT * FROM user"; ResultSet resultSet = DatabaseUtil.query(sql); try { while (resultSet.next()) { int id = resultSet.getInt("id"); String name = resultSet.getString("name"); String password = resultSet.getString("password"); int age = resultSet.getInt("age"); User user = new User(id, name, password, age); userList.add(user); } } catch (SQLException e) { e.printStackTrace(); } return userList; } public boolean addUser(User user) { boolean flag = false; String sql = "INSERT INTO user(name, password, age) VALUES (?, ?, ?)"; try { connection = DatabaseConnection.getConnection(); preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, user.getName()); preparedStatement.setString(2, user.getPassword()); preparedStatement.setInt(3, user.getAge()); int i = preparedStatement.executeUpdate(); if (i > 0) { flag = true; } } catch (SQLException e) { e.printStackTrace(); } return flag; } } ``` 5. Service层 ```java public class UserService { private UserDao userDao = new UserDao(); public List<User> queryAll() { return userDao.queryAll(); } public boolean addUser(User user) { return userDao.addUser(user); } } ``` 6. 控制器 ```java public class UserController { private UserService userService = new UserService(); public void addUser(User user) { boolean flag = userService.addUser(user); if (flag) { System.out.println("添加用户成功"); } else { System.out.println("添加用户失败"); } } public void queryAll() { List<User> userList = userService.queryAll(); for (User user : userList) { System.out.println(user.getId() + "\t" + user.getName() + "\t" + user.getPassword() + "\t" + user.getAge()); } } } ``` 这是一个简单的通用管理信息系统框架结构,你可以根据实际需求进行扩展和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值