( 农民 - Javen) 19:46:46
时间到了,现在开始吧!
大家欢迎 朱世杰 给我们讲解 DAO 模式的应用!
(_阿古) 19:46:57
欢迎
顶
( 农民 - Javen) 19:47:02
还是老习惯,请大家用普通字体、颜色。 主讲使用红色
(杨树) 19:47:04
啪啪啪啪,鼓掌
(_阿古) 19:47:16
(朱世杰℡) 19:47:18
大家好,呵呵,很荣幸能和大家交流一下
( foxcrane) 19:47:18
(&咚咚响) 19:47:19
嗯.
(山鬼的情人) 19:47:27
( foxcrane) 19:47:28
(ThinkInJava) 19:47:33
好
( 农民 - Javen) 19:47:34
(聊且一笑) 19:47:42
(朱世杰℡) 19:47:48
开始吧?
( 农民 - Javen) 19:48:11
好的! 现在开始!
(郁也风) 19:48:15
(_阿古) 19:48:28
(朱世杰℡) 19:48:35
DAO模式大家都熟悉的,就是数据访问对象
(朱世杰℡) 19:49:17
本来这部分是CHAR来讲的,现在我和大家先交代一下,这些官方的语言我不太会说
(朱世杰℡) 19:50:00
大家觉得有必要在讲DAO的含义吗,我想直接讲方案好了,时间不够
(朱世杰℡) 19:50:19
DAO的包装现在已经发展的很成熟了
(郁也风) 19:50:22
(杨树) 19:50:28
(朱世杰℡) 19:50:47
我一会给大家介绍一个方案
(朱世杰℡) 19:50:55
先说说它的特点吧
(朱世杰℡) 19:51:46
1,传统的分层结构,和一些数据库隔离等等
(朱世杰℡) 19:52:20
这些我不多说了。2,以接口来编程
(朱世杰℡) 19:52:37
大家可以随时提问
(朱世杰℡) 19:53:10
接口编程不是大家通常说的,而是你在新加一个实体以后,所做的只是CODE一个接口
(&咚咚响) 19:53:23
不应该说是用接口而以..
(朱世杰℡) 19:53:31
也就是用了反射和代理
(&咚咚响) 19:53:31
基类才是用接口..
(&咚咚响) 19:53:49
具体的还是类,而不是接口吧..
(朱世杰℡) 19:54:02
呵呵,是接口,所以我觉得它特别
(朱世杰℡) 19:54:13
不需要你实现它
( foxcrane) 19:54:20
你说的这个接口编程和大家通常说的 有什么区别
你用DAO接口来解决多数据库支持的问题么
(冰云) 19:54:22
是通过接口方法名调用named query哪个吗?
(朱世杰℡) 19:54:54
TO FOXCRANE
(&咚咚响) 19:55:19
DAO是封装了data source怎么可能是接口的呢..我还是不明白啊
(朱世杰℡) 19:55:26
你还没理解我的意思,是说只做接口,程序会代理它的实现的
(朱世杰℡) 19:55:42
TO 冰云
(朱世杰℡) 19:56:20
你说的这个在后面我会谈到,不过现在,只是谈到这个CRUD
(拓拔涛) 19:56:27
程序会代理它的实现的?
(朱世杰℡) 19:56:41
也就是动态代理了。
(拓拔涛) 19:56:58
恩,继续~
( foxcrane) 19:57:03
哦,好象很有趣,关注
(朱世杰℡) 19:57:27
普通的SAVE ADD 等等,这些是可以代理的
(朱世杰℡) 19:58:08
但是具有业务特色的查询怎么办?只有自己来做了
(&咚咚响) 19:58:37
那其实只要在DAO之前加一个service就可以了..
(朱世杰℡) 19:58:37
自己做也并不意味着要写那么多代码的复杂实现
(聊且一笑) 19:59:52
好,有意思,动态代理
(朱世杰℡) 20:00:17
因为HIBERNATE是有NAMED QUERY的,所以我们也可以用代理的方法,分2步,1,先在那个实体接口里加上自己的业务方法
(朱世杰℡) 20:00:55
2,在实体配置里加上NAMED QUERY
(朱世杰℡) 20:01:22
这样比直接用HIBERNATE的NAMDE QUERY也方便很多
(朱世杰℡) 20:01:43
我们要做的就这2步
(朱世杰℡) 20:02:32
还有问题吗
(朱世杰℡) 20:02:56
这部分是比较难理解的
( 农民 - Javen) 20:03:02
举例? 问题多了,没有明白!
(聊且一笑) 20:03:23
这个举个例子
(朱世杰℡) 20:03:33
OK
(拓拔涛) 20:04:01
所有的都要到配置里面处理?
(朱世杰℡) 20:04:10
public interface UserMgr {
public void add(User user) throws PersistenceException;
public void update(User user) throws PersistenceException;
public void remove(User user) throws PersistenceException;
public User findByPrimaryKey(Long id) throws LookupException;
public Collection findAll() throws LookupException;
}
(朱世杰℡) 20:04:47
如果只是简单的CRUD,那么我们在新加了一个实体以后,要做的就是这么多
( 农民 - Javen) 20:05:39
你说的这个实体,是另外的 POJO ?还是实现 POJO 还加上实现这个接口?
(朱世杰℡) 20:05:52
就是HIBERNATE里的PO
(朱世杰℡) 20:06:20
对
(朱世杰℡) 20:06:59
意思就是简化我们的CODE量
(&咚咚响) 20:07:26
那就是把一个PO变成一个BO了
(朱世杰℡) 20:08:18
按我的理解,在这里,还只是PO
(&咚咚响) 20:08:42
可是你的PO已经加了业务逻辑啊..比如add()..update之类的啊
(朱世杰℡) 20:09:11
不是的,