直接上例子
首先我们先创建一个实体类:
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方法