我写了一个轻量级数据持久层框架,也就是山寨版的Hibernate

wentshop 2012-07-13 04:31:12
这是CSDN地址:http://download.csdn.net/detail/wentshop/4427382不要积分,希望大牛指导,里面有demo和源码

资源简介:
先说下这是我自己写的,如果追求完美就不要看了,我菜鸟一枚,这是一个轻量级的山寨版Hibernate,无需写配置文件,提供两种java类跟数据库表映射,接口和annotation,目前只支持sqlserver,(也不是很好支持,扩展性很强)其实跟hibernate差远了,但是性能理论上远超Hibernate,资源里面有示例项目。
...全文
202 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
另外,那些 Test 的类为什么都是 main ?

我还是不能明白那些 clone 存在的意义?一般而言,使用数据对象实现 clone 方法,几乎不会把业务逻辑处理类也去实现 clone 方法
  • 打赏
  • 举报
回复
在你的代码中,我看到有很多的 clone,我看了一下完全没有必要去 clone 一下啊?

还有 ConnectionPool 你就不应该自己去实现,下面这些连接池实现最为基本的东西,在 ConnectionPool 中都没看到!

a. 连接池需要实现前面提到的 javax.sql.DataSource 接口,以适合于不同的场合。

b. Connection#close 问题。使用者使用连接池与不使用连接池,除了从哪获得 Connection 对象不一样之外,其他 JDBC 的代码是完全相同的,并不能因为使用连接池而改变既有的 JDBC 代码。如果不能改变 JDBC 代码,就带来了一个 Connection close 的问题,大家都知道这个调用是关闭数据库连接,如果在连接池中这么做的话就会关闭连接,使用连接得不到重用。

c. 连接被动关闭问题。为了保证连接的复用性,将连接一直保存在池中。有些数据库服务器会将已经连接很久的客户端连接主动踢掉,如果碰到这种情况,在池中的这个连接池就会变为不可用状态,如果被客户端使用的话将会抛出连接被关闭的 SQLException。

d. 连接回收问题。假如我们的连接池最大设为 50 个,在某一并发很高的时段达到了 50 个,但是过后并发率就降下去了,对于连接池来说池中还是 50 个连接,实际上后面根本不需要那么多连接。这时连接池白白地浪费了几十个数据库宝贵的连接(数据库对于客户端的连接数是有限制的),如果连接池占用了很多的连接,那么可能会导致其他应用程序因为数据库客户端的连接数到了限制而无法再获得连接。我们应该及时地将不需要使用的连接关闭还给数据库服务器,保留一些基本连接数。

e. 网络中断重连问题。连接池中的连接在网络中断时,池中连接会全部断开,数据库服务端也会回收断开的连接。但是网络中断后,过了一些时间又连上了,这时池中的连接依然是断开的,如果取出来用的话,不用说就会抛出异常的。一个可用的连接需要有实现自动重连功能,否则就没有可用的价值。
wentshop 2012-07-15
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

引用 8 楼 的回复:

引用 4 楼 的回复:

这个工作,很有意义。
希望像楼主这样的人能多一些。

我也是忙里偷闲,随便写的


别找借口 要做就好好做 拿个自己都觉得是随便的东西 让别人看 你觉得 很好玩?

以后你再做出什么东西 让别人看 别人还会看么?
[/Quote]
不要误会啊,我是在工作完没事的时候写一些的,但我是认真的,工作上大家都个忙个的没人愿意看你的东西,我本人很菜,所以想拿出来请教一下
wentshop 2012-07-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

在你的代码中,我看到有很多的 clone,我看了一下完全没有必要去 clone 一下啊?

还有 ConnectionPool 你就不应该自己去实现,下面这些连接池实现最为基本的东西,在 ConnectionPool 中都没看到!

a. 连接池需要实现前面提到的 javax.sql.DataSource 接口,以适合于不同的场合。

b. Connection#close 问题。使……
[/Quote]
很高兴你能提出宝贵意见,我是去年刚毕业的学生,对很多知识的理解还不够,比如你说的clone问题,我感觉clone能提高性能吧,就用了,还有其他你说的,


a:我没有实现该接口是为为了配合其他代码使用的,它不是独立存在的。


b:这个强制使用者使用工具包自带的连接池,目的是为了不让使用者去关心合适关闭该连接,所以没有开房close的方法。

c:工具包中有一个Task,这个类是在每天的23:59:59清理连接池的,准备在里面加入清理的同时判断一下连接池中的连接是否可用。

d:这个每天会清理一次,是按总链接数的10%清理的,清理到初始连接时不再清理。

e:没有考虑这个问题,解决办法应该就是找一个线程去对连接进行检测

Test是我自己测试用的,真正使用时,不会被打包到jar包内的

可能clone的主要作用是对数据的复制吧,但是clone主要是不用new,在构造函数耗时时能提高性能,我不知道方法体多的话会不会耗时。
朱超ZhuChao.Tech 2012-07-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 4 楼 的回复:

这个工作,很有意义。
希望像楼主这样的人能多一些。

我也是忙里偷闲,随便写的
[/Quote]

别找借口 要做就好好做 拿个自己都觉得是随便的东西 让别人看 你觉得 很好玩?

以后你再做出什么东西 让别人看 别人还会看么?
-AJ- 2012-07-15
  • 打赏
  • 举报
回复
to 火龙果 : 你还真是良师益友
wentshop 2012-07-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

这个工作,很有意义。
希望像楼主这样的人能多一些。
[/Quote]
我也是忙里偷闲,随便写的
-AJ- 2012-07-13
  • 打赏
  • 举报
回复
这个工作,很有意义。
希望像楼主这样的人能多一些。
wentshop 2012-07-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

先顶起,下载下来试试
[/Quote]

QQQ
ZhangYongjia_ 2012-07-13
  • 打赏
  • 举报
回复
先顶起,下载下来试试
ZhangYongjia_ 2012-07-13
  • 打赏
  • 举报
回复
先顶起,下载下来试试

23,407

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧