利用反射技术将查询结果封装为对象
2017-03-23 14:15
609 查看
public class ORMTest extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //创建sql语句 String sql = "select username as Username,password as Password from user where id<?"; //创建个数组,用于给sql语句中的sql赋值 Object obj[] = new Object[]{1020}; try { //调用getObject方法得到一个Object对象的集合 List<Object> list = getObject(sql, obj, User.class); //将list存在request域中 request.setAttribute("list", list); //转发到index.jsp页面 request.getRequestDispatcher("/index.jsp").forward(request, response); } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { e.printStackTrace(); } } static List<Object> getObject(String sql,Object obj[],Class clazz) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{ Connection conn=null; PreparedStatement ps = null; ResultSet rs = null; JDBCUtils utils = JDBCUtils.getInstance(); List<Object> list = new ArrayList<>(); try { conn = utils.getConnection(); ps = conn.prepareStatement(sql); //获取参数的元数据 ParameterMetaData pmd = ps.getParameterMetaData(); //获取?个数 int count = pmd.getParameterCount(); //将数组中的元素对应的赋值给sql中的? for(int i=1;i<=count;i++){ ps.setObject(i, obj[i-1]); } //执行sql rs=ps.executeQuery(); //得到传进来的Bean的所有方法 Method ms[] = clazz.getMethods(); //遍历结果集 while(rs.next()){ //得到结果集元数据 ResultSetMetaData rsmd = rs.getMetaData(); //得到一个结果集的列数 int columnCount = rsmd.getColumnCount(); //得到bean的实例对象 Object object = clazz.newInstance(); //遍历结果集的列 for(int i=1;i<=columnCount;i++){ String columnLabel =rsmd.getColumnLabel(i);//得到列的别名 //得到别名后 可以得到这个列的bean的set方法 String methodName = "set"+columnLabel; //遍历bean的所有方法 for (Method method : ms) { //如果有和这个列的set方法相同的方法 if(method.getName().equals(methodName)){ //就将数据库查出来的这个列的值付给这个bean method.invoke(object, rs.getObject(columnLabel)); } } } //将这个bean添加到集合中 list.add(object); } } catch (SQLException e) { e.printStackTrace(); }finally{ utils.free(conn, ps, rs); } return list; } } //bean public class User { public User() { } public int id; public String username; public String password; public String sex; public String age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } @Override public String toString() { return "id="+this.id+"username="+this.username+"password="+this.password +"age="+this.age+"sex:"+this.sex; } }
相关文章推荐
- JDBC 利用反射技术将查询结果封装为对象(简单ORM实现)
- JDBC_利用Java反射技术将查询结果封装为对象
- 利用反射技术将查询结果封装为对象
- 反射3:利用java反射技术将查询结果封装成对象
- JDBC学习笔记(16):利用反射技术将查询结果封装为对象
- 反射技术将查询结果封装为对象_编写一个基本的连接池来实现连接的复用
- java_jdbc_反射技术将查询结果封装为对象
- 通过JAVA反射实现简单的ORM,将查询结果封装为对象
- 利用dot Net技术中反射及代码发送的动态退化或同步化接口封装
- java利用反射技术遍历某个对象的属性及属性值
- 在HQL中将查询结果封装入实例化对象
- Java利用反射自动封装成实体对象的方法
- JAVA 利用反射机制查询数据库返回相应对象
- 第三十章 利用结果集元数据将查询结果封装为map
- 根据反射将数据库查询结果Datatable,转换为对应的Model类实体对象
- Java反射实现不同对象相同代码地对象查询和封装
- 利用结果集元数据将查询结果封装成Map
- JDBC学习笔记(15):利用结果集元数据将查询结果封装为map
- JDBC事务及将查询结果封装成对象(通用)
- hibernate将本地SQL查询结果封装成对象