使用BeanUtils工具类操作JavaBean

xiaoxiao2021-02-28  113

一、字段与属性     1、Java类的属性         Java类的属性,它和之前的类中的成员变量不一样,在之前的文章中,有时我也将属性称之为别名,Java类的属性是通过类中的getter()与setter()方法来确定的,例如  getXxx() ,在这个getter方法中,去除方法名前面的"get"后,剩下的字母的第一个字母小写即为Java类的属性     2、字段         字段就是之前我们常说的类的属性,也就是类中的成员变量, 一般情况下,字段名和属性名是一样的。 二、BeanUtils工具包     该工具包是apache的一个用来操作Java类属性的工具包,意味着我们能够直接使用该工具包中的方法,来完成对Java类属性的操作,如之前查询数据库中的数据时,我们将查到的ResultSet结果集利用getMetaData()方法得到ResultSetMetaData对象,并利用该对象和Map集合,运用反射,将查取到的数据赋值给了Java类属性,而有了BeanUtils工具包后,我们可以调用该工具包中的setProperty()方法与getProperty()来完成对Java类属性的赋值与获取对应值,下面来说说BeanUtils的导入步骤      ①去apache官网下载commons-beanutils-1.9.3.jar与commons-logging-1.2.jar包 下载地址为: http://commons.apache.org/proper/commons-beanutils/download_beanutils.cgi与                              http://commons.apache.org/proper/commons-logging/download_logging.cgi      ②将其放在本地项目的一个文件夹中,然后右键单击jar文件,选择bulid  path,然后add to bulidpath 完成以上步骤,就可以使用BeanUtils工具类了,下面是使用其中的的setProperty()方法一个具体实例 import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; import java.util.HashMap; import java.util.Map; import java.util.Properties; import org.apache.commons.beanutils.BeanUtils; public class DAO { public void updata(String sql,Object ... args){//数据库的更新操作,可实现增、删、改的操作 Connection con = null; PreparedStatement ps = null; try { con = getConnection();//获取数据库连接 ps = con.prepareStatement(sql); for(int i = 0;i<args.length;i++){//填充占位符 ps.setObject(i + 1, args[i]); } ps.executeUpdate(); } catch (Exception e) { e.printStackTrace(); }finally{ JDBCTools.release(con, ps);//释放数据库连接 } } public <T> T get(Class<T> clazz,String sql,Object ... args){//数据库的查询操作 T entity = null; Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try { con = getConnection(); ps = con.prepareStatement(sql); for(int i = 0;i < args.length;i++){//填充占位符 ps.setObject(i + 1,args[i]); } rs = ps.executeQuery();//得到结果集,利用它可以知道某一行中某一列的具体值 if(rs.next()){ ResultSetMetaData rsmd = rs.getMetaData();//该对象可以知道结果集有几列,以及每一列所对应的别名等信息 Map<String,Object> valueMap = new HashMap<>();//建立Map集合用来存结果集中的列名以及对应的属性值 for(int i = 0;i < rsmd.getColumnCount();i++){ String ColumnLabel = rsmd.getColumnLabel(i + 1);//得到查询出的每一列的列名 Object ColumnValue = rs.getObject(i + 1);//得到每一列所对应的值 valueMap.put(ColumnLabel, ColumnValue); } if(valueMap.size() > 0){ entity = clazz.newInstance(); for(Map.Entry<String, Object> entry : valueMap.entrySet()){//利用反射为对应的属性赋值 String fieldName = entry.getKey(); Object fieldvalue = entry.getValue(); // Field f1 = clazz.getDeclaredField(fieldName);//利用反射赋值,不推荐使用 // f1.setAccessible(true); // f1.set(entity, fieldvalue); BeanUtils.setProperty(entity, fieldName, fieldvalue);//对Java类属性赋值 } } } } catch (Exception e) { e.printStackTrace(); } return entity; } public Connection getConnection() throws Exception{//连接数据库 String driverClass = null; String url = null; String user = null; String password = null; Properties properties = new Properties(); InputStream in = getClass().getClassLoader().getResourceAsStream("jdbc.properties"); properties.load(in); driverClass = properties.getProperty("driver"); url = properties.getProperty("jdbcurl"); user = properties.getProperty("user"); password = properties.getProperty("password"); Class.forName(driverClass); return DriverManager.getConnection(url, user, password); } public void release(Connection con , Statement state){//关闭数据库连接 if(state != null){ try { state.close(); } catch (Exception e) { e.printStackTrace(); } } if(con != null){ try { con.close(); } catch (Exception e) { e.printStackTrace(); } } } public void release(ResultSet rs , Connection con , Statement state){//关闭数据库连接 if(rs != null) { try { rs.close(); } catch (Exception e) { e.printStackTrace(); } } if(state != null){ try { state.close(); } catch (Exception e) { e.printStackTrace(); } } if(con != null){ try { con.close(); } catch (Exception e) { e.printStackTrace(); } } } }现在本地数据库中有一个表,如下: 现在要对该表进行查询操作,并且针对该表定义了一个Student类( 可以看到Student类中的成员变量名与sql语句中的Java类属性名是一样的),用于以测试上面的实例,具体代码如下: import org.junit.Test; public class TestDAO { DAO dao = new DAO(); @Test public void testGet() { String sql = "SELECT Flow_ID flowID,type,ID_Card iDcard FROM examstudent WHERE Flow_ID=?"; System.out.println(dao.get(Student.class, sql, 10002)); } class Student { public int flowID;//流水号 public String type;//考试类型 public String iDcard;//身份证号 public String examcard;//准考证号码 public String studentName;//学生姓名 public String location;//区域 public int grade;//成绩 public int getFlowID() { return flowID; } public void setFlowID(int flowID) { this.flowID = flowID; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getiDcard() { return iDcard; } public void setiDcard(String iDcard) { this.iDcard = iDcard; } public String getExamcard() { return examcard; } public void setExamcard(String examcard) { this.examcard = examcard; } public String getStudentName() { return studentName; } public void setStudentName(String studentName) { this.studentName = studentName; } public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } public int getGrade() { return grade; } public void setGrade(int grade) { this.grade = grade; } public Student() { super(); } public Student(int flowID, String type, String iDcard, String examcard, String studentName, String location, int grade) { super(); this.flowID = flowID; this.type = type; this.iDcard = iDcard; this.examcard = examcard; this.studentName = studentName; this.location = location; this.grade = grade; } @Override public String toString() { return "Student [flowID=" + flowID + ", type=" + type + ", iDcard=" + iDcard + ", examcard=" + examcard + ", studentName=" + studentName + ", location=" + location + ", Grade=" + grade + "]"; } } } 最后的运行结果为:
转载请注明原文地址: https://www.6miu.com/read-27888.html

最新回复(0)