java反射示例:数据库数据反射为java对象
2017-12-20 18:32
429 查看
首先,准备必要的对象:
数据库连接在最后讲解
... private static Connection con; private static Statement stm; private static PreparedStatement pps; private static ResultSet rss; //列名-列类型 map private static HashMap<String,String> column_type=new HashMap<>();
通过DatabaseMetaData对象获取列名和列类型
后面需要通过列名来给对应名字的变量赋值,通过列类型赋予给变量正确的数据类型
private static void setMetaData(Class clazz) { //获取类的名字 String name=clazz.getSimpleName(); try { DatabaseMetaData meta=con.getMetaData(); rss=meta.getColumns(con.getCatalog(), "root", name, "%"); while(rss.next()) { column_type.put(rss.getString("COLUMN_NAME"), rss.getString("TYPE_NAME")); } } catch (Exception e) { e.printStackTrace(); } }
通过反射获取类对象
下面是读取数据反射为类对象的操作,类对象反射写入数据库可以借此类推
/** * 通过id查询对象 * @param id 对象id * @param clazz 类 */ private static Object getObjectById(int id,Class clazz) { Object o=null; //获取类的名字 String name=clazz.getSimpleName(); //如果 列名-列类型 map为空,获取一下 if(column_type.size()==0) setMetaData(); try { //查询数据(通过类名查对应的表) pps=con.prepareStatement("SELECT * FROM "+name+" WHERE id=?"); pps.setInt(1, id); rss=pps.executeQuery(); //获取类实例 o=clazz.newInstance(); //查询结果 if(rss.next()) { //遍历列名 for(String name:column_type.keySet()) { //查找类中对应的变量 Field f=c.getDeclaredField(name); //获取数据库中的类型 & 类中的类型(末尾类型) String type=column_type.get(name), field_type=f.getType().getSimpleName(); //获取类中变量的set方法 Method m=c.getMethod("set"+upwordFirstCase(name), f.getType()); switch(type) { //字符串类型 case "VARCHAR": if(field_type.equals("String"));{ //判断两种类型是否相容 m.invoke(o, rss.getString(name)); //执行set方法,写入类对象 } break; //整形 case "INT": if(field_type.equals("int")||field_type.equals("Integer"));{ m.invoke(o, rss.getInt(name)); } break; //日期类型 case "DATE": if(field_type.equals("Date"));{ m.invoke(o, rss.getDate(name)); } break; } } } }catch(Exception e) { e.printStackTrace(); } return o; } /** * 使字符串首字母大写 * 示例:name-->Name * 通过此方法获取的字符串前面加上set、get后,用于获取实体类中自动生成的getter,setter方法 * @param s 需要首字母大写的字符串 */ private static String upwordFirstCase(String s) { char first=s.charAt(0); if(first>='a'&&first<='z') first-=32; return first+s.substring(1); }
附:数据库连接
此包需要导入构建路径
//连接准备 private static final String DRIVER="org.gjt.mm.mysql.Driver", URL="jdbc:mysql://localhost:3306/test?useSSL=true", USER="root", PASS="root";
//连接 private static void 4000 init() { try { Class.forName(DRIVER); con=DriverManager.getConnection(URL, USER, PASS); stm=con.createStatement(); } catch (SQLException | ClassNotFoundException e) { e.printStackTrace(); } }
[b]小生水平有限,欢迎大家指点[/b]
相关文章推荐
- object对象java 利用反射 从数据库取出数据对象list 类似hibernate
- java 利用反射 从数据库取出数据对象list 类似hibernate
- [原创] Java JDBC连接数据库,反射创建实体类对象并赋值数据库行记录(支持存储过程)
- Java -- 利用反射 操作任意数组,包括对象数组 和 基本数据类型的数组
- java 反射技术 打印类成员变量的值(查看一个对象的成员数据时十分方便)
- java使用jdbc连接数据库工具类和jdbc连接mysql数据示例
- ibatis 读取数据库数据,没有查询到,则返回的java对象为null
- Java反射复制一个数据对象
- JAVA 利用反射机制查询数据库返回相应对象
- 是用JDBC从数据库中获取数据并以java对象返回
- Java数据库——处理大数据对象
- 数据库中树结构数据,转换为Java对象树结构( 多叉树结构 )
- 利用java反射处理excel数据导入示例
- Json树形结构数据转Java对象并存储到数据库的实现-超简单的JSON复杂数据处理
- java中将数据对象序列化后保存到数据库中,并反序列化取出显示
- Java注解(Annotation)用法:利用注解和反射机制指定列名导出数据库数据
- JAVA连接数据库并获取数据的示例
- java使用jdbc连接数据库工具类和jdbc连接mysql数据示例
- Java数据库与Model类的数据反射机制(待完善)
- 使用java反射将数据库结果集转换成对象结果集