Java_反射_SQL增删改查

Java_反射_SQL增删改查

#Java Bean

package com.hp.beans;
/**
 * Java类 User
 */
public class user {
private Integer uid;
private String uname;
private String upass;
private String isadmin;
    public Integer getUid() {
        return uid;
    }
    public void setUid(Integer uid) {
        this.uid = uid;
    }
    public String getUname() {
        return uname;
    }
    public void setUname(String uname) {
        this.uname = uname;
    }
    public String getUpass() {
        return upass;
    }
    public void setUpass(String upass) {
        this.upass = upass;
    }
    public String getIsadmin() {
        return isadmin;
    }
    public void setIsadmin(String isadmin) {
        this.isadmin = isadmin;
    }
    @Override
    public String toString() {
        return "user{" +
                "uid=" + uid +
                ", uname='" + uname + '\'' +
                ", upass='" + upass + '\'' +
                ", isadmin='" + isadmin + '\'' +
                '}';
    }
    public user(Integer uid, String uname, String upass, String isadmin) {
        this.uid = uid;
        this.uname = uname;
        this.upass = upass;
        this.isadmin = isadmin;
    }
    public user() {
    }
}

#获得链接

package com.hp.reflect;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * 获取Sql连接的类
 */
public class GetConnection{
    /**
     * 获取sql的连接对象
     * @return
     */
    public Connection getCon(){
        //定义连接对象
        Connection conn=null;
        try {
            //加载MySql数据库驱动
            Class.forName("com.mysql.jdbc.Driver");
            //通过DriverManager.getConnection(url,username,password)获取数据库的连接
            conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
        //将获取的数据库连接返回
        return conn;
    }
}

#增删改查

package com.hp.reflect;
import com.hp.beans.user;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/**
 * 反射_sql查询
 */
public class DaoImpl {
    //定义接收的类型为泛型集合
    public <T> List<T> select(T t) throws SQLException, IllegalAccessException, InstantiationException {
        //Class.getSimpleName()通过泛型获取对象名
        String sql="select * from "+t.getClass().getSimpleName();
        //实例化List泛型
        List<T> li=new ArrayList<T>();
        //实例化GetConnection类,通过getCon方法获取Sql的连接
        Connection con = new GetConnection().getCon();
        //通过连接的prepareStatement()的方法执行sql语句
        //调用executeQuery()执行查询获取查询的结果集合
        ResultSet res = con.prepareStatement(sql).executeQuery();
        //通过resultSet.getMetadata()将结果集合转换为ResultMetaData对象
        ResultSetMetaData md = res.getMetaData();
        //获取结果的列数
        int count = md.getColumnCount();
        //获取java对象的属性数组
        Field[] filds = t.getClass().getDeclaredFields();
        //调用next方法遍历结果集合
        while(res.next()) {
            //将泛型类实例化为对象
            T t2 = (T) t.getClass().newInstance();
            //循环泛型对象的属性值
            for (int i = 0; i < filds.length; i++) {
                //输出当前的属性
                System.out.println(filds[i]);
                //循环遍历当前结果集中的对象的属性
                for (int k = 0; k < count; k++) {
                    //获取此条信息的列的名字
                    String columnName = md.getColumnName(k + 1);
                    //判断结果集中的列名与Java类中的属性名是否对应
                    if (filds[i].getName().toUpperCase().equals(columnName.toUpperCase())) {
                        //修改类的Accessible为true,使当前属性可以修改
                        filds[i].setAccessible(true);
                        //res.getObject(列名) 获取当前这条信息的列名的数据
                        //调用Filed类的set方法,给当前对象赋值
                        filds[i].set(t2, res.getObject(columnName));
                    }
                }
            }
            //将循环赋值完成的类添加到集合中
            li.add(t2);
        }
        //返回结果
        return li;
    }
    /**
     * 更新
     * @param t
     * @param <T>
     * @return
     */
    public <T> T update(T t){
        try {
            Field[] filds = t.getClass().getDeclaredFields();
            filds[0].setAccessible(true);
            String tiao="";
            for(int i=1;i<filds.length;i++){
                Field fild=filds[i];
                fild.setAccessible(true);
                if(fild.getType().equals(String.class)) {
                    tiao += fild.getName() + "='" + fild.get(t) + "',";
                }
                else{
                    tiao += fild.getName() + "='" + fild.get(t) + "',";
                }
            }
            tiao=tiao.split(",$")[0];
            String sql="update "+t.getClass().getSimpleName()+" set "+tiao+" where "+filds[0].getName()+" ="+filds[0].get(t);
            System.out.println(sql);
            int i=new GetConnection().getCon().prepareStatement(sql).executeUpdate();
            System.out.println(i);
            if (i>0){
            System.out.println("Successful!");
            }
            else{
                System.out.println("Error!");
            }

        } catch (IllegalAccessException | SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 添加
     * @param t
     * @param <T>
     * @return
     * @throws IllegalAccessException
     */
    public <T> T insert(T t) throws IllegalAccessException {
        Field[] filds = t.getClass().getDeclaredFields();
        String columnName="";
        String columnValue="";
        for (int i=0;i<filds.length;i++){
            filds[i].setAccessible(true);
            if(filds[i].get(t)==null){
                continue;
            }
            columnName+=filds[i].getName()+",";
            if(filds[i].getType().equals(String.class)){
                columnValue+="'"+filds[i].get(t)+"'"+",";
            }
            else{
                columnValue+=filds[i].get(t)+",";
            }
        }
        columnName=columnName.split(",$")[0];
        columnValue=columnValue.split(",$")[0];
        String sql="insert into "+t.getClass().getSimpleName()+"("+columnName+") values("+columnValue+")";
        System.out.println(sql);
        try {
            int i=new GetConnection().getCon().prepareStatement(sql).executeUpdate();
            if(i>0){
                System.out.println("Successful!");
            }
            else{
                System.out.println("Error!");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 反射删除
     * @param t
     * @param <T>
     * @return
     */
    public <T> T delete(T t) throws SQLException {
        Field fild = t.getClass().getDeclaredFields()[0];
        fild.setAccessible(true);
        try {
            String sql="delete from "+t.getClass().getSimpleName()+" where "+fild.getName()+" = "+fild.get(t);
            System.out.println(sql);
            int i=new GetConnection().getCon().prepareStatement(sql).executeUpdate();
            if(i>0){
                System.out.println("Successful!");
            }
            else{
                System.out.println("Error!");
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return null;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_39663113/article/details/85611839