Java EE 查询 将数据库中对应的表逐行转换成DAO实体类。
来源:互联网 发布:南洋理工大学硕士知乎 编辑:程序博客网 时间:2024/06/04 00:54
4/14/2017 3:20:05 PM
Java EE 查询 将数据库中对应的表逐行转换成DAO实体类。List方式返回。自动赋值时忽略大小写的名称进行匹配,自动赋值到指定的实体类中。
需要导入mysql-connector-java-xxxx-bin.jar包
直接上代码:
package com.hbbc.test;import java.io.IOException;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.sql.Statement;import java.util.ArrayList;import java.util.Date;import java.util.List;import java.util.Properties;public class DBUtil {public Connection openConnection(String propertiesName){ try { Class.forName("com.mysql.jdbc.Driver"); Properties prop=new Properties(); prop.load(DBUtil.class.getClassLoader().getResourceAsStream(propertiesName!=""?propertiesName:"main.properties")); String url=prop.getProperty("url"); String username=prop.getProperty("username"); String password=prop.getProperty("password"); return DriverManager.getConnection(url, username, password); } catch (ClassNotFoundException | IOException | SQLException e) { e.printStackTrace(); } return null;}@SuppressWarnings("unchecked")public static void main(String[] args) { String sql="SELECT * FROM testdb"; ArrayList<UserBean> beanList=(ArrayList<UserBean>) DBUtil.QueryDB(sql, UserBean.class); for (int i = 0; i < beanList.size(); i++) { System.out.println("id:"+beanList.get(i).getId()+",age:"+beanList.get(i).getAge()+",username:"+beanList.get(i).getUserName()+",sex:"+beanList.get(i).isSex()+",addTime:"+beanList.get(i).getAddTime()); }}/** * * @param sql 查询语句 * @param clazz 实体类型 * @return 返回的list类型,需强制转换 */public static List<?> QueryDB(String sql,Class<?> clazz){ DBUtil dbu=new DBUtil(); Connection conn=dbu.openConnection(""); ArrayList<Object> resultlist=new ArrayList<>(); try { java.sql.PreparedStatement pst=conn.prepareStatement(sql); Statement stmt=conn.createStatement(); ResultSet rs=stmt.executeQuery(sql); ResultSetMetaData rsd=pst.executeQuery().getMetaData(); pst=conn.prepareStatement(sql); //获取反射对象中的属性集合 Field[] field=clazz.getDeclaredFields(); while (rs.next()) { Object obj=clazz.newInstance();//反射对对象实例化 //数据表中列数,获取列名称下标从第1个开始遍历 for (int k = 1; k <= rsd.getColumnCount(); k++) { //当前类中属性的数量 for (int j = 0; j < field.length; j++) { //获取数据表中当前列明 String columnName=rsd.getColumnName(k); //如果当前数据表列中的名称和类中属性名称相同,就执行属性赋值方法 if (columnName.equalsIgnoreCase(field[j].getName())) { //System.out.println("field.length:"+field.length); //属性的类型 String typeName=field[j].getGenericType().toString(); //以下是常用的类型 if (("class java.lang.String").equals(typeName)) { //属性赋值 Method m=clazz.getMethod("set"+columnName, String.class); m.invoke(obj,rs.getString(columnName)); }else if (("int").equals(typeName)) { Method m=clazz.getMethod("set"+columnName, int.class); m.invoke(obj,rs.getInt(columnName)); }else if(("boolean").equals(typeName)){ Method m=clazz.getMethod("set"+columnName, boolean.class); m.invoke(obj,rs.getBoolean(columnName)); }else if ("class java.util.Date".equals(typeName)) { Method m=clazz.getMethod("set"+columnName, Date.class); m.invoke(obj,rs.getDate(columnName)); }// System.out.print("typeName:"+typeName+",Name:"+field[j].getName()+",ColumnName:"+columnName);// System.out.println("---------------执行完"); } } } resultlist.add(obj); } return resultlist; } catch (SQLException e) { System.out.println("数据库连接失败"); e.printStackTrace(); } catch (NoSuchMethodException e) { System.out.println("没有这个方法"); e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalAccessException e) { System.out.println("获取不到数据表中当前的值"); e.printStackTrace(); } catch (IllegalArgumentException e) { System.out.println("反射,传递参数错误"); e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (InstantiationException e) { System.out.println("无法对该类newInstance"); e.printStackTrace(); } return null;}}
如下是实体类:
package com.hbbc.test;import java.util.Date;public class UserBean {private String userName;private int id;private int age;private boolean sex;private Date addTime;public String getUserName() { return userName;}public void setUserName(String userName) { this.userName = userName;}public int getId() { return id;}public void setId(int id) { this.id = id;}public int getAge() { return age;}public void setAge(int age) { this.age = age;}public boolean isSex() { return sex;}public void setSex(boolean sex) { this.sex = sex;}public Date getAddTime() { return addTime;}public void setAddTime(Date addTime) { this.addTime = addTime;}}
Demo查看:
Demo下载
0 0
- Java EE 查询 将数据库中对应的表逐行转换成DAO实体类。
- 根据反射将数据库查询结果Datatable,转换为对应的Model类实体对象
- Java 将数据库对应的表生成对应的实体类,包含注释信息
- 利用java 反射将DTO类中的属性值更新到对应的实体类中
- 将JSON数据转换成JAVA的实体类
- Java工具类_表结构自动生成对应的实体类、Mapper.xml文件、Dao类
- 数据库中实体的对应关系
- Java实体类的属性类型与数据库表字段类型对应表
- java将实体对象转换成JSON格式的字符串
- 如果将Java中从数据库查询到的结果集转换为Json数组形式
- 将Java中的实体类转换成axis2的xml对象模型(OMElement)
- 数据库的表字段自动转换为java实体类
- oracle查询 将对应的key转换为value
- 【utils】将指定的mysql数据库中的表生成java实体类
- 在Hibernate中进行多表查询,每个表中各取几个字段,也就是说查询出来的结果集并没有一个实体类与之对应,如何解决这个问题?
- mybatis如何自动生成实体类,映射文件以及对应的dao层
- DAO、实体类的特征
- 一对一和一对多的关联查询(该实体类中存在实体类属性和实体类集合属性,将关联的实体类详细信息查询出来,但没有查询所有该实体类信息)
- nyoj1274 信道安全(河南省第九届acm程序设计大赛)
- JVM调优
- java理解程序逻辑1
- Spring MVC Controller中返回json数据中文乱码处理
- HTTP 长连接和短连接协议原理
- Java EE 查询 将数据库中对应的表逐行转换成DAO实体类。
- C++实现优先队列
- 大方法的执行性能与调优过程
- 两个OOM Cases排查过程的分享
- JavaScript函数的参数默认值
- 汉诺塔的递归实现
- 海量存储
- 如何快速实现一个基于Nginx的网站…
- cmake编译qt项目