首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JDBC+反射教你手写自己的Dao层框架

大家好,我是一个爱举铁的程序员Shr。

本篇文章将用到前几篇文章介绍过的知识自定义数据访问层框架,建议看这篇文章之前先去了解JDBC元数据和反射。

如果是初学者,觉得JDBC封装数据太麻烦,一个类十多个字段,重复的代码导致浪费了大量时间,那待会我开车的时候你可要抓紧了。

如果你用Hibernate,Mybatis用了两三年还只是停留在使用的情况,看源码太费劲,看一会就想睡觉,本篇文章将带你走进框架底层,探索精彩的世界。

本篇文章较长,耐心看完~~~

源码地址:https://github.com/ShrMus/Dao/tree/master/dao_20180603/src/main/java/com/shrmus/jdbc02

一、新建数据库表

新建名为dao_20180603的数据库,再新建emp表

二、新建类

三、新建数据源类

四、新建数据库连接属性文件

新建文件jdbc.properties,文件和数据源类在同一个目录,文件内容如下:

五、新建数据库连接类

六、新建查询类

这个类用来对数据进行增删改查。

七、测试

看到这里,你已经发现和原先的JDBCUtil完全不一样了,为什么要这么做呢,为了做到功能单一。

后面关键的地方来了。

7.1测试添加员工

7.1.1在查询类中添加代码

7.1.2编写Dao类

7.1.3编写测试类

运行结果:

SQL = insert into Emp(id,name,address,hireDate) values('1','张三','长沙','2018-06-03 23:49:12')

再看数据库:

添加了一条数据。查询类中的inser()方法根据传过来的参数,获取数据库表的主键,再获取字段和字段值,方法内部拼接SQL语句。

7.2测试查询所有员工

7.2.1在查询类中添加代码

7.2.2 编写Dao类

7.2.3编写测试类

在运行这个测试方法之前我又添加了一条数据。

运行结果:

SQL = select id,name,address,hireDate from Emp

Emp [id=1, name=张三, address=长沙, hireDate=2018-06-03 23:49:12.0]

Emp [id=2, name=李四, address=株洲, hireDate=2018-06-04 00:00:18.0]

7.3测试根据主键查询员工

7.3.1在查询类添加代码

7.3.2编写Dao类

7.3.3编写测试类

运行结果:

SQL = select id,name,address,hireDate from Emp where id='1'

Emp [id=1, name=张三, address=长沙, hireDate=2018-06-03 23:49:12.0]

7.4测试修改员工的信息

7.4.1编写查询类

7.4.2编写Dao类

7.4.3编写测试类

运行结果:

SQL = update Emp set name='王五', address='广州', hireDate='2018-06-04 00:05:55' where id='1'

看看数据库:

修改成功了。激动人心吧。以前怎么没发现JDBC元数据这么好使呢。

7.5测试删除员工

7.5.1编写查询类

7.5.2编写Dao类

7.5.3编写测试类

运行结果:

SQL = delete from Emp where id='1'

再看看数据库:

因为是根据主键删除的,所以测试类的员工的名字是李四就忽略了。

总结

如果你仔细看了查询类的代码或者你自己有练习过,你就会发现那些框架是怎样的思路了。XML,注解,映射就都能拨云见日了。以前在Dao类作死地封装数据,现在就轻松多了。

注意事项:

我写的都是基本的增删改查,没有涉及到多表查询的。

目前只支持MySQL

只支持表名和类名一样

只支持表中字段和类的属性名一样

不支持联合主键

未提供连接池

关于JDBC元数据和反射的知识点我就不多说了,可能看不懂的也看不到底下了,如果有疑问可以给我留言。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180605G01GAN00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券