百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

ORM框架书写第一步操作(Apache Commons DbUtils)

ccwgpt 2024-10-16 08:01 42 浏览 0 评论

ORM框架书写第一步操作(Apache Commons DbUtils)

新一次的内部提升开始了,如果您想写一个框架从Apache Commons DbUtils开始学习是一种不错的选择,我们先学习应用这个小“框架”再把源代码理解,然后写一个属于自己的ORM框架不是梦。

一、简介

DbUtils是Apache下commons工具集中的一个小工具,它主要是对JDBC封装的ORM小工具,简化了JDBC的操作。之所以把它称之为工具而不是框架,是因为它和其他的ORM框架还是由很大的区别(例如Hibernate)。DbUtils并不支持所谓的聚合关联映射、缓存机制、实体状态的管理、延迟加载技术等等,它纯粹只是对JDBC的API进行封装。但也由于它的这种简单,因此性能高也是它的特点。DbUtils的源代码并不多,也很容易读得懂,非常适合于初学者阅读和学习。


二、ORM概要

对象关系映射(Object Relational Mapping),简称ORM。网上有很多专业的解释,但对于初学者来说这些专业的术语也许不太好理解。所以我们还是通过一些实际例子来说明。

在日常的开发中我们经常用到实体或者DTO对象,这似乎对每一个程序员来说都是再熟悉不过的了。但这些所谓的实体或者DTO对象按照领域驱动设计的说法,它们只有自己的属性,却没有属于自己的业务行为(get和set那不叫业务行为)。因此我们把他们称之为贫血模型。那用这些贫血模型来做什么呢?没错,就是封装数据。我们经常会将一些不同类型的数据封装到这些对象中。

给对象属性赋完值以后,便把这个实体传递给Dao层执行保存操作。最终将数据持久化到数据库的某张表中。

在这个过程我们发现一点,数据在Java中是以对象的形式存储,而最终持久化到数据库的时候是以关系型表格的形式存储,也就是说,我们把一个对象化结构的数据映射到了关系型数据库中的这个过程,就是对象关系映射。反之,当我们从关系型数据库中查询出的数据,又转换成一个对象模型的数据结构,这也是对象关系映射。

因此,我们可以将对象关系映射理解为它是一种对象模型和关系型数据库之间相互转换的过程。在实际开发中,我们会遇到大量的ORM操作,然而你会发现,这种操作其实大部分都是重复劳动,频繁的给PreparedStatment设置参数,又或者是频繁的从ResultSet中读取数据保存到实体中,这些操作让我们在开发中降低了效率。我们能否将这些繁琐的操作封装起来,我给你一个实体,你会自动帮我保存到数据库。我告诉你一个对象的类型,你会自动将结果集中的数据封装到这个对象中返回给我。这样就大大简化的JDBC的操作,提高了开发效率。接下来我们所学习的DbUtils就帮我们完成了这些事情。


三、下载与安装

安装:

教程中使用的是1.6的版本,下载的压缩包是 commons-dbutils-1.6-bin.zip。解压后将commons-dbutils-1.6.jar导入工程即可。


四、DML操作

首先,我们在数据中创建USERS_INFO表。(mysql数据库)

这里我们使用DBCP连接池作为数据源。DBCP也是commons工具集中一个小工具。简单点说,它主要用于监听和管理JDBC的Connection对象,达到连接复用的效果(连接池的原理及好处可以在JDBC教程的章节中进行查阅)。

接下来编写一个DBCP连接池的工具类,用于获取DataSource

4.1、QueryRunner

这个类用于发送执行SQL语句并返回相应的结果。其实现当中对Connection以及PreparedStatment接口的API进行了封装。QueryRunner有两种方式来管理连接,一种是在构建QueryRunner实例时通过构造方法传递一个数据源DataSource实例;另一种则是在调用相应的操作方法,如query、update、batch等这些方法时传入一个Connection对象。这两种方式有什么区别呢?通过源码的阅读,我们不难发现,其实对于DataSource的管理,在每次执行完相应操作后,DbUtils会自动关闭数据源的连接对象。而在调用相应的操作方法时传入的Connection对象,在使用完之后是需要我们手动去关闭这个资源的。在以下所有的例子中,我们都将使用DataSouce的方式进行操作。

4.2、Insert操作

4.3、Update操作

4.4、Delete操作

4.5、批量操作


五、DQL操作

5.1、ResultSetHandler接口

这个接口的核心作用是将查询结果进行封装(O/R Mapping)。它有许多不同的实现类,每一个实现类都将ResultSet中的结果封装成不同类型的数据对象。如下图:

在ResultSetHandler众多的处理器实现类中主要分为两类,一类是处理单条结果集的,一类是处理多条结果集的。

单条数据处理器:BeanHandler、ArrayHandler、MapHandler、ScalarHandler

多条数据处理器:AbstractKeyedHandler(KeyedHandler、BeanMapHandler)、AbstractListHandler(ColumnListHandler、ArrayListHandler、MapListHandler)

5.2、BeanHandler

将单条查询结果封装为Bean对象

使用BeanHandler查询单条记录:

将多条查询结果封装为List集合,集合中的每个元素都是一个Bean对象

5.3、ArrayHandler

将单条查询结果封装为一个Object数组

5.4、ArrayListHandler

将多条查询结果封装为List集合,集合中的每个元素都是一个Object数组

5.5、MapHandler

将单条查询结果封装为一个Map对象, Key保存的是查询的列名,Value保存的是列的值

5.6、MapListHandler

将多条查询结果封装为一个List集合,集合中的每个元素都是一个Map对象

5.7、ScalarHandler

将单条查询结果中的某一列转换为指定的类型

5.8、ColumnListHandler

将多条查询结果中的某一列封装为List集合

5.9、KeyedHandler

将多条查询结果转换为Map,并将某列保存为Key,而Value则与MapHandler的查询结果一样,封装的是一个Map集合

5.10. BeanMapHandler

将多条查询结果转换为Map,并将某列保存为Key,而Value则与BeanHandler的查询结果一样,封装的是一个Bean对象


六、作业

6.1、作业要求

1. 任意数据库,建立一个表student,字段有id,name(id是自增长的,name是char类型)

2. 利用DbUtils完成CRUD操作

3. insert操作要能得到返回的自增长值

4. Connection对象要能正确处理

6.2、提交内容

1. 整个项目的源代码打包发到我的qq或者直接把你的项目的git地址告诉我即可

6.3、提交时间

2017-11-2号 星期四 中午12:00前


七、资料下载与说明

7.1、参考

  • https://coding.net/u/david_cj/p/dbutils-demo/git 陈军老师写的详细教程

  • http://www.cnblogs.com/best/p/7474442.html Git的使用

  • https://commons.apache.org/proper/commons-dbutils/ 官网

7.2、资料下载

相关推荐

团队管理“布阵术”:3招让你的团队战斗力爆表!

为何古代军队能够以一当十?为何现代企业有的团队高效似“特种部队”,有的却松散若“游击队”?**答案正隐匿于“布阵术”之中!**今时今日,让我们从古代兵法里萃取3个核心要义,助您塑造一支战斗力爆棚的...

知情人士回应字节大模型团队架构调整

【知情人士回应字节大模型团队架构调整】财联社2月21日电,针对原谷歌DeepMind副总裁吴永辉加入字节跳动后引发的团队调整问题,知情人士回应称:吴永辉博士主要负责AI基础研究探索工作,偏基础研究;A...

豆包大模型团队开源RLHF框架,训练吞吐量最高提升20倍

强化学习(RL)对大模型复杂推理能力提升有关键作用,但其复杂的计算流程对训练和部署也带来了巨大挑战。近日,字节跳动豆包大模型团队与香港大学联合提出HybridFlow。这是一个灵活高效的RL/RL...

创业团队如何设计股权架构及分配(创业团队如何设计股权架构及分配方案)

创业团队的股权架构设计,决定了公司在随后发展中呈现出的股权布局。如果最初的股权架构就存在先天不足,公司就很难顺利、稳定地成长起来。因此,创业之初,对股权设计应慎之又慎,避免留下巨大隐患和风险。两个人如...

消息称吴永辉入职后引发字节大模型团队架构大调整

2月21日,有消息称前谷歌大佬吴永辉加入字节跳动,并担任大模型团队Seed基础研究负责人后,引发了字节跳动大模型团队架构大调整。多名原本向朱文佳汇报的算法和技术负责人开始转向吴永辉汇报。简单来说,就是...

31页组织效能提升模型,经营管理团队搭建框架与权责定位

分享职场干货,提升能力!为职场精英打造个人知识体系,升职加薪!31页组织效能提升模型如何拿到分享的源文件:请您关注本头条号,然后私信本头条号“文米”2个字,按照操作流程,专人负责发送源文件给您。...

异形柱结构(异形柱结构技术规程)

下列关于混凝土异形柱结构设计的说法,其中何项正确?(A)混凝土异形柱框架结构可用于所有非抗震和抗震设防地区的一般居住建筑。(B)抗震设防烈度为6度时,对标准设防类(丙类)采用异形柱结构的建筑可不进行地...

职场干货:金字塔原理(金字塔原理实战篇)

金字塔原理的适用范围:金字塔原理适用于所有需要构建清晰逻辑框架的文章。第一篇:表达的逻辑。如何利用金字塔原理构建基本的金字塔结构受众(包括读者、听众、观众或学员)最容易理解的顺序:先了解主要的、抽象的...

底部剪力法(底部剪力法的基本原理)

某四层钢筋混凝土框架结构,计算简图如图1所示。抗震设防类别为丙类,抗震设防烈度为8度(0.2g),Ⅱ类场地,设计地震分组为第一组,第一自振周期T1=0.55s。一至四层的楼层侧向刚度依次为:K1=1...

结构等效重力荷载代表值(等效重力荷载系数)

某五层钢筋混凝土框架结构办公楼,房屋高度25.45m。抗震设防烈度8度,设防类别丙类,设计基本地震加速度0.2g,设计地震分组第二组,场地类别为Ⅱ类,混凝土强度等级C30。该结构平面和竖向均规则。假定...

体系结构已成昭告后世善莫大焉(体系构架是什么意思)

实践先行也理论已初步完成框架结构留余后人后世子孙俗话说前人栽树后人乘凉在夏商周大明大清民国共和前人栽树下吾之辈已完成结构体系又俗话说青出于蓝而胜于蓝各个时期任务不同吾辈探索框架结构体系经历有限肯定发展...

框架柱抗震构造要求(框架柱抗震设计)

某现浇钢筋混凝土框架-剪力墙结构高层办公楼,抗震设防烈度为8度(0.2g),场地类别为Ⅱ类,抗震等级:框架二级,剪力墙一级,混凝土强度等级:框架柱及剪力墙C50,框架梁及楼板C35,纵向钢筋及箍筋均采...

梁的刚度、挠度控制(钢梁挠度过大会引起什么原因)

某办公楼为现浇钢筋混凝土框架结构,r0=1.0,混凝土强度等级C35,纵向钢筋采用HRB400,箍筋采用HPB300。其二层(中间楼层)的局部平面图和次梁L-1的计算简图如图1~3(Z)所示,其中,K...

死要面子!有钱做大玻璃窗,却没有钱做“柱和梁”,不怕房塌吗?

活久见,有钱做2层落地大玻璃窗,却没有钱做“柱子和圈梁”,这样的农村自建房,安全吗?最近刷到个魔幻施工现场,如下图,这栋5开间的农村自建房,居然做了2个全景落地窗仔细观察,这2个落地窗还是飘窗,为了追...

不是承重墙,物业也不让拆?话说装修就一定要拆墙才行么

最近发现好多朋友装修时总想拆墙“爆改”空间,别以为只要避开承重墙就能随便砸!我家楼上邻居去年装修,拆了阳台矮墙想扩客厅,结果物业直接上门叫停。后来才知道,这种配重墙拆了会让阳台承重失衡,整栋楼都可能变...

取消回复欢迎 发表评论: