直接上例子
首先我们先创建一个实体类:
package MVC_Test.com.mvc.model; /** * @Author: LanAn * @Date: 2021/7/11 0011 10:20 * @Description: */ public class Emp { private Integer empno; private String ename; private String job; private Integer mgr; private String hiredate; private Double sal; private Double comm; private Integer deptno; public Integer getEmpno() { return empno; } public void setEmpno(Integer empno) { this.empno = empno; } public String getEname() { return ename; } public void setEname(String ename) { this.ename = ename; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } public Integer getMgr() { return mgr; } public void setMgr(Integer mgr) { this.mgr = mgr; } public String getHiredate() { return hiredate; } public void setHiredate(String hiredate) { this.hiredate = hiredate; } public Double getSal() { return sal; } public void setSal(Double sal) { this.sal = sal; } public Double getComm() { return comm; } public void setComm(Double comm) { this.comm = comm; } public Integer getDeptno() { return deptno; } public void setDeptno(Integer deptno) { this.deptno = deptno; } }
在创建相对应得dao层
package MVC_Test.com.mvc.util; import com.sun.istack.internal.NotNull; import java.lang.reflect.Field; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; /** * @Author: LanAn * @Date: 2021/7/11 0011 11:38 * @Description: */ public class SqlSession { private static PreparedStatement ps =null; private static ResultSet rs =null; /* @author lanan * @Description 输入sql语句,创建实体类对象,加入List中 * @Date 16:13 2021/7/11 0011 * @Param [sql, classFile] * @Return java.util.List<java.lang.Object> **/ public static List<Object> selectList(String sql,@NotNull Class<?> classFile) throws Exception{ //JDBCUtil是自己写的JDBC连接工具包 ps =JDBCUtil.createPreparedStatement(sql); //用于装实体类中的属性 Field[] fieldArray =null; //这里无需排序,用ArrayList创建 List<Object> list =new ArrayList<Object>(); try{ //获取查询的结果集 rs = ps.executeQuery(); fieldArray =classFile.getDeclaredFields();//获取.class文件中所有属性,包括私有属性 //遍历结果集 while(rs.next()){ Object obj =classFile.newInstance();//创建实体类对象 //为创建的实体类各个属性赋值 for (Field fieldObj : fieldArray) { String fieldName = fieldObj.getName();//获取属性名 String value = rs.getString(fieldName);//获取rs该列下的数据 //各个属性赋值 init(obj, value, fieldObj); } //实体类添加到list list.add(obj); } } finally { JDBCUtil.close(rs); } return list; } /* @author lanan * @Description 为新创建的实体类对象不同属性列下赋值 * @Date 16:18 2021/7/11 0011 * @Param [obj, value, fieldObj] * @Return void **/ private static void init(Object obj,String value,Field fieldObj) throws Exception{ //开启对私有元素访问权限 fieldObj.setAccessible(true); //赋值 if (value==null){ fieldObj.set(obj,null); }else { String typeName = fieldObj.getType().getName();//获取属性类型 //Emp表中只有这三个属性 switch (typeName) { case "java.lang.Integer": fieldObj.set(obj, Integer.valueOf(value)); break; case "java.lang.Double": fieldObj.set(obj, Double.valueOf(value)); break; case "java.lang.String": fieldObj.set(obj, value); break; } } } }
最后从list中获取实体类
@Test public void t1() throws Exception { String sql ="SELECT * FROM EMP"; List<Object> list =SqlSession.selectList(sql,Emp.class); //这里的emp是list中的实体类对象 for (Object emp:list) { //这里调用Emp中的getEmpno方法 System.out.println(((Emp)emp).getEmpno()); } }
如果取值可以用实体类中的getXXX方法;如果只是为了输出到控制台,可以重写toString方法