利用注解将JDBC结果集转成Java对象详解编程语言

SamplePojo.java

import javax.persistence.Column; 
import javax.persistence.Entity; 
 
@Entity 
public class SamplePojo { 
    @Column(name="User_Id") 
    private int id; 
    @Column(name="User_Name") 
    private String name; 
    @Column(name="Address") 
    private String address; 
    @Column(name="Gender") 
    private boolean gender; 
    public int getId() { 
        return id; 
    } 
    public void setId(int id) { 
        this.id = id; 
    } 
    public String getName() { 
        return name; 
    } 
    public void setName(String name) { 
        this.name = name; 
    } 
    public String getAddress() { 
        return address; 
    } 
    public void setAddress(String address) { 
        this.address = address; 
    } 
    public boolean isGender() { 
        return gender; 
    } 
    public void setGender(boolean gender) { 
        this.gender = gender; 
    } 
 
    @Override 
    public String toString() { 
        return  "id: " + id + "/n" +  
                "name: " + name + "/n"+ 
                "address: " + address + "/n" + 
                "gender: " + (gender ? "Male" : "Female") + "/n/n"; 
    } 
}

ResultSetMapper.java

import java.lang.reflect.Field; 
import java.lang.reflect.InvocationTargetException; 
import java.sql.ResultSet; 
import java.sql.ResultSetMetaData; 
import java.sql.SQLException; 
import java.util.ArrayList; 
import java.util.List; 
 
import javax.persistence.Column; 
import javax.persistence.Entity; 
 
import org.apache.commons.beanutils.BeanUtils; 
 
public class ResultSetMapper<T> { 
    @SuppressWarnings("unchecked") 
    public List<T> mapRersultSetToObject(ResultSet rs, Class outputClass) { 
        List<T> outputList = null; 
        try { 
            // make sure resultset is not null 
            if (rs != null) { 
                // check if outputClass has 'Entity' annotation 
                if (outputClass.isAnnotationPresent(Entity.class)) { 
                    // get the resultset metadata 
                    ResultSetMetaData rsmd = rs.getMetaData(); 
                    // get all the attributes of outputClass 
                    Field[] fields = outputClass.getDeclaredFields(); 
                    while (rs.next()) { 
                        T bean = (T) outputClass.newInstance(); 
                        for (int _iterator = 0; _iterator < rsmd 
                                .getColumnCount(); _iterator++) { 
                            // getting the SQL column name 
                            String columnName = rsmd 
                                    .getColumnName(_iterator + 1); 
                            // reading the value of the SQL column 
                            Object columnValue = rs.getObject(_iterator + 1); 
                            // iterating over outputClass attributes to check if any attribute has 'Column' annotation with matching 'name' value 
                            for (Field field : fields) { 
                                if (field.isAnnotationPresent(Column.class)) { 
                                    Column column = field 
                                            .getAnnotation(Column.class); 
                                    if (column.name().equalsIgnoreCase( 
                                            columnName) 
                                            && columnValue != null) { 
                                        BeanUtils.setProperty(bean, field 
                                                .getName(), columnValue); 
                                        break; 
                                    } 
                                } 
                            } 
                        } 
                        if (outputList == null) { 
                            outputList = new ArrayList<T>(); 
                        } 
                        outputList.add(bean); 
                    } 
 
                } else { 
                    // throw some error 
                } 
            } else { 
                return null; 
            } 
        } catch (IllegalAccessException e) { 
            e.printStackTrace(); 
        } catch (SQLException e) { 
            e.printStackTrace(); 
        } catch (InstantiationException e) { 
            e.printStackTrace(); 
        } catch (InvocationTargetException e) { 
            e.printStackTrace(); 
        } 
        return outputList; 
    } 
}

使用方法

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.util.List; 
 
public class SampleMain { 
    public static void main(String ...args){ 
 
    try { 
        ResultSetMapper<SamplePojo> resultSetMapper = new ResultSetMapper<SamplePojo>(); 
        ResultSet resultSet = null; 
        // simple JDBC code to run SQL query and populate resultSet - START 
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
        String database = "jdbc:odbc:AkDb";  
        Connection connection = DriverManager.getConnection( database ,"",""); 
        PreparedStatement statement = connection.prepareStatement("SELECT * FROM UsersSample"); 
        resultSet = statement.executeQuery(); 
        // simple JDBC code to run SQL query and populate resultSet - END 
        List<SamplePojo> pojoList = resultSetMapper.mapRersultSetToObject(resultSet, SamplePojo.class); 
        // print out the list retrieved from database 
        if(pojoList != null){ 
            for(SamplePojo pojo : pojoList){ 
                System.out.println(pojo); 
            } 
        }else{ 
            System.out.println("ResultSet is empty. Please check if database table is empty"); 
        } 
        connection.close(); 
    } catch (ClassNotFoundException e) { 
        e.printStackTrace(); 
    } catch (SQLException e) { 
        e.printStackTrace(); 
    } 
 
    } 
}

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/10967.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论