JAVA:自定义套件...

news/2024/5/19 0:01:31 标签: jdbc

各位亲爱的小伙伴们大家好,最近很多伙伴都问我该怎么做自定义套件封装,我在这里做了一个教程分享给大家。

java开发人员现在对数据库的操作一般会用到诸如像Hibernate,Mybatis,SpringJdbcTemplate等ORM组件,但是这些组件是怎样从原始的编码方式一步步封装过来的呢 ?

一、最原始的编码方式

如下图所示: 我在05年刚毕业的时候,曾经是这样写Jdbc访问数据库的.

二、封装的过程和思路

总得来说,Java组件封装的原则就是高内聚,低耦合,直白一点的解释就是将重复性的代码提取出去作为工具类,尽量减少类与类之间的固定依赖。

1) DbUtil工具类

通过查看最原始编码方式的代码 ,我们可以看出,获取数据库的连接和关闭数据库连接的代码,在每一次操作中都需要,所以我们可以思考一下,将这部分代码提取出去.

* 新建DbUtil工具类 ,用于数据库的开连接和关连接

通过工具类的封装,我们可以继续在工具类里面将数据库的信息通过配置文件加载,以及启用流行的连接池技术,在这里不在赘述.

2) 增删改方法的封装

在封装了DbUtil工具类的基础上,我们试着做一个单表的增删改查,请看以下代码:

进一步观察增删改方法 ,除了Sql语句和参数传入的不同,其他代码其实也是重复的,我们是否可以考虑将这些公用的代码也提取出去呢?

伟大的Java程序员们都是”懒鬼”,一切都是为了少些一些重复的代码以提高工作效率.

我们可以新建一个模板类JdbcTemplate, 对增删改方法进行封装,外部只需要传入sql语句和sql语句需要用到的参数.

通过上面步骤的封装,我们再来看看让对单表增删改的操作是如何方便简单的,新建一个单表增删改的测试类,继承我们封装的模板类,代码如下:

回过头看看我们的封装过程和代码,是不是对于开发人员来讲 ,越来越简单,代码写的越来越少,这就是Java在实际开发过程中需要用到大量前辈们封装的组件的原因.

3) 查询方法的封装

在增删改方法的封装过程当中,我们发现,增删改的操作,方法的返回值是固定的,但是查询方法的返回值是不固定的,查询不同的表,返回的是不同对象,也有可能是返回的其他类型的值.

通过以上分析,我们封装查询方法的时候,只能返回一个固定格式的对象或者列表,让执行查询的人来解析固定格式的结果得到自己想要的返回值.

两种方式:

a:返回一个List<Map<Object,Object>结构

在JdbcTemplate模板类面新加查询模板方法

这种封装方式在执行查询时候,获取的结果是List<Map<Object,Object>>结构的值,需要自己再进行转化,但是对于查询来说,就非常的简单了。

在UserDaoTemplateTest类里面新加查询方法

b:返回一个接口的匿名内部类

这种方式,封装起来稍微复杂一些,但是对于查询方来说,就可以直接在查询方法里面获取自己想要的对象,返回List<Bean>,

非常简单。

步骤:

* 新建一个接口 RowMapper<T>,成员是一个匿名的内部类

* 在JdbcTemplate模板类里面新增模板查询方法

* 查询的时候,通过实现匿名的内部类来获取结果,直接映射到Java对象当中 ,如代码所示,在UserDaoTemplateTest中进行查询

最终的代码目录结构如下,希望对大家的学习有所帮助。

如果需要达到像Mybatis和Hibernate等组件的高度,还有很长的一段的路要走,有兴趣的同学可以查看一下SpringJdbcTemplate的源码,其中的思想是跟它不谋而合的。

三、总结

通过以上的封装过程,我们可以了解到Java封装组件的一个基本思路,有助于大家以后在用到相关的ORM组件时,对它们有一个更深得到认识。当然,本篇文章封装的代码只是冰山一角,还有更多精彩有料有趣内容,想要学好java的伙伴们还有更多福利哦,希望各位伙伴们不要错过这次和以后的精彩内容。



http://www.niftyadmin.cn/n/811643.html

相关文章

IT人必须掌握的面试技巧

最能体现求职者能力的就是面试&#xff0c;能不能拿到Offer&#xff0c;取决于你面试时的表现&#xff0c;只有有准备才能在面试过程中游刃有余。尽管面试公司不同&#xff0c;面试方式也不同&#xff0c;但是万变不离其宗&#xff0c;只要掌握了面试的技巧&#xff0c;了解面试…

UITextView和UITextField的placeholder,键盘隐藏,键盘换行变完成字样

本文转载至 http://blog.csdn.net/hengshujiyi/article/details/9086093- (void)initFeedBackViews{ //设置页面的背景颜色 UIColor *ViewBgColor [UIColor colorWithRed:(247.0f/255.0f)green:(247.0f/255.0f) blue:(247.0f/255.0f) alpha:1.0f]; self.view.backgroundColor…

Java 多线程并发编程之 Synchronized 关键字

synchronized 关键字解析 同步锁依赖于对象&#xff0c;每个对象都有一个同步锁。 现有一成员变量 Test&#xff0c;当线程 A 调用 Test 的 synchronized 方法&#xff0c;线程 A 获得 Test 的同步锁&#xff0c;同时&#xff0c;线程 B 也去调用 Test 的 synchronized 方法&am…

UITextView 实现placeholder的方法

本文转载至 http://www.cnblogs.com/easonoutlook/archive/2012/12/28/2837665.html 在UITextField中自带placeholder属性&#xff0c;可以用于提示输入框信息。但是UITextView并不具备此功能 介绍两种方法来实现&#xff1a; 第一种&#xff1a; 初始化UITextView //首先定义U…

Java 线程池的理论与实践

前段时间公司里有个项目需要进行重构&#xff0c;目标是提高吞吐量和可用性&#xff0c;在这个过程中对原有的线程模型和处理逻辑进行了修改&#xff0c;发现有很多基础的多线程的知识已经模糊不清&#xff0c;如底层线程的运行情况、现有的线程池的策略和逻辑、池中线程的健康…

iOS打电话、发短信、发邮件功能开发

本文转载至 http://www.lvtao.net/ios/506.html 今天把APP里常用小功能 例如发短信、发邮件、打电话。全部拿出来简单说说它们的实现思路。 1.发短信实现打电话的功能&#xff0c;主要二种方法&#xff0c;下面我就分别说说它们的优缺点。1.1.发短信(1)——URL // 直接拨号&am…

函数防抖与函数节流

前言&#xff1a; 防抖和节流都是防止函数多次调用&#xff0c;在时间轴上控制函数的执行次数。 函数防抖&#xff08;debounce&#xff09; 在事件被触发n秒后再执行回调&#xff0c;如果在这n秒内又被触发&#xff0c;则重新计时&#xff0c;先计算时间后执行。 生活中的实例…

Java 线程池(ThreadPoolExecutor)原理分析与使用

在我们的开发中“池”的概念并不罕见&#xff0c;有数据库连接池、线程池、对象池、常量池等等。下面我们主要针对线程池来一步一步揭开线程池的面纱。 使用线程池的好处 1、降低资源消耗 这里提到了线程池的饱和策略&#xff0c;那我们就简单介绍下有哪些饱和策略&#xff1a;…