基于反射机制操作jdbc手写简单orm框架

2019-01-14  本文已影响0人  我不是一盘水饺

前言

首先这是引用网上一位网友手写的orm框架因为本人尝试途中出现问题后来才知道是对反射的不熟悉所以决定记录下来。

这是原文章作者地址

https://www.jianshu.com/p/c13870967d9b  原作者文章地址

简介

orm框架,以前对他的了解就是通过java 代码对数据库进行操作的一些方法,后来查相关资料用既通俗又正确的说法就是使用xml格式的元数据来描述对象关系的细节。

就是说只要提供了持久化类与表的映射关系,ORM框架在运行时就能参照映射文件的信息,把对象持久化到数据库中。

目前主流的orm框架有熟悉的mybatis,hibernate ,上网查了下jfinal 也是 不过这个以后有时间再接触。

开始写

原文作者使用的是java se做根本项目,本人为方便使用了maven项目不用导jar包,输入坐标就可以了。

mysql-connector-java 项目的概览

首先bean包里有4个类

上面3个类分别用于封装什么已经有注释了,下面这个类用于映射properities配置文件的属性

下面是properties配置文件的配置,涂黑的是数据库所在的ip加端口号

然后是util包

下面的canonicalPath是生成实体类的路径

下面的实际上运用反射机制getClass获得当前的传入来的类的Class对象,因为每个被编译好的java 文件都是一个Class的实例,所以自然可以通过获取Class对象反过来获得该类信息。Class的实例的getMethod方法可以获得该类对外公开的方法第一个参数为该类里面公开的方法名第二个参数为该方法的形参。最后返回Method实例的invoke方法,第一个参数是入参的那个类,第二个参数是刚刚找到的那个公开方法的入参实际上就是执行了刚才获取到的那个方法然后返回那个方法的返回值。


接下来是core包

下面的DatabaseMetaData类是Connection对象的一个属性可用来查数据库的一些整体信息如版本号,url等等,可称为元数据,通过获取这些信息可以获取到表名字段名等,为生成实体类做准备。

下面第70行就是利用传进来的某个类型获得的字段名,其实就是一个实体类里某个字段的get方法里的某个字段对应的入参,然后通过反射调用该字段get方法获取值,值不为空就追加到集合中去。

最后首先生成实体类然后可以执行crud,这里就执行一个增加方法。

第一次写文章,肯定有错误或者知识漏洞,如果有幸被大家见到这文章,还望多多指点指点!!!!

最后说句真心话,好多框架都运用了大量的反射机制,所以有必要去了解清楚,熟练运用。

上一篇下一篇

猜你喜欢

热点阅读