JAVA中“Action层, Service层 ,modle层和Dao层”的功能区分是什么

JAVA中“Action层, Service层 ,modle层和Dao层”的功能区分是什么,第1张

modle层就是对应的数据库表的实体类。

Dao层是使用了Hibernate连接数据库、 *** 作数据库(增删改查)。

Service层:引用对应的Dao数据库 *** 作,在这里可以编写自己需要的代码(比如简单的判断)。

Action层:引用对应的Service层,在这里结合Struts的配置文件,跳转到指定的页面,当然也能接受页面传递的请求数据,也可以做些计算处理。

补充:

一般java都是三层架构数据访问层(dao),业务逻辑层(biz 或者services),界面层(ui) action 是业务层的一部分,是一个管理器 (总开关),取出前台界面的数据,调用biz方法,转发到下一个action或者页面)。

模型层(model)一般是实体对象(把现实的的事物变成java中的对象),作用是一暂时存储数据方便持久化(存入数据库或者写入文件)作为一个包裹封装一些数据来在不同的层以及各种java对象中使用。

dao是数据访问层 就是用来访问数据库实现数据的持久化(把内存中的数据永久保存到硬盘中)。

DAO(数据访问对象)是一种应用程序编程接口(API),存在于微软的Visual

Basic中,它允许程序员请求对微软的Access数据库的访问。DAO是微软的第一个面向对象的数据库接口。DAO对象封闭了Access的Jet函数。通过Jet函数,它还可以访问其他的结构化查询语言(SQL)数据库。

Service层调用DAO层方法。

由于一个Service方法可能需要调用多个DAO对象的方法,需要在Service层进行事务控制。

由于一些原因,需要采用编程式事务(现使用TransactionTemplate)。

可是存在一个问题:

只有当创建TransactionTemplate对象的DataSourceTransactionManager使用的DataSource对象和DAO对象创建JdbcTemplate对象使用的DataSource是同一个对象时才能在transactionTemplateexecute()方法中控制事务。暂时想到如下设计:

1 BasicDao类

所有DAO的父类,提供静态变量DataSource用于为所有的DAO类创建JdbcTemplate对象。

同时提供DataSource的get方法,用于在Service方法中创建DataSourceTransactionManager对象。

public class BasicDao { private static DataSource dataSource; protected JdbcTemplate jdbc; static { dataSource = new MyDataSource(); } public BasicDao() { jdbc = new JdbcTemplate(dataSource); } //getters and setters } 2 DAO类

继承自BasicDao类,完成数据库 *** 作。

3 Service类

调用DAO类的方法,完成业务。

DataSource dataSource = BasicDaogetDataSource(); DataSourceTransactionManager txManager = new DataSourceTransactionManager(dataSource); TransactionTemplate txTemplate = new TransactionTemplate(txManager ); final Dao1 dao1= new Dao1(); final Dao2 dao2= new Dao2(); transactionTemplateexecute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus arg0) { dao1function1(); dao2function2(); // return null; } }); 暂时只能这样来实现,请问各位有什么更好的实现吗?不要使用Spring的IOC容器和声明式事务。

以上面的Service方法为例吧:

1在ProxyClass中进行事务的控制,将DataSource保存到ThreadLocal。

2在ProxyClass中调用代理的具体Service类的service方法。

3Service类的service方法只完成具体的业务dao方法调用。

4Dao类的DataSource对象从ThreadLoacl中取得。

public class ProxyClass { public static final ThreadLocal threadLocal = new ThreadLocal(); private DataSourceTransactionManager txManager; private TransactionTemplate txTemplate; TargetService target; //代理的具体的目标服务对象 public ProxyClass() { DataSource dataSource = new MyDataSource(); txManager = new DataSourceTransactionManager(dataSource); txTemplate = new TransactionTemplate(txManager ); threadLocalset(dataSource); } public void service() { transactionTemplateexecute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus arg0) { targetservice(); //调用具体服务方法 } }); } // } 问题补充:finallygo 写道不对的,你的代码编译可以通过吗

如果是直接使用JDBC进行 *** 作的话,在ThreadLocal应该存储Connection。

dao层:dao层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的 *** 作,具体到对于某个表、某个实体的增删改查

service层:service层叫服务层,被称为服务,肯定是相比之下比较高层次的一层结构,相当于将几种 *** 作封装起来。

至于为什么service层要使用接口来定义有以下几点好处: 

在java中接口是多继承的,而类是单继承的,如果你需要一个类实现多个service,你用接口可以实现,用类定义service就没那么灵活

要提供不同的数据库的服务时,我们只需要面对接口用不同的类实现即可,而不用重复地定义类

编程规范问题,接口化的编程为的就是将实现封装起来,然调用者只关心接口不关心实现,也就是“高内聚,低耦合”的思想。

扩展资料:

Java Web,是用Java技术来解决相关web互联网领域的技术总和。web包括:web服务器和web客户端两部分。Java在客户端的应用有java applet,不过使用得很少,Java在服务器端的应用非常的丰富,比如Servlet,JSP和第三方框架等等。Java技术对Web领域的发展注入了强大的动力。

参考资料:

Web Service百度百科 数据访问层百度百科

以上就是关于JAVA中“Action层, Service层 ,modle层和Dao层”的功能区分是什么全部的内容,包括:JAVA中“Action层, Service层 ,modle层和Dao层”的功能区分是什么、DAO是什么意思、请问DAO层采用JdbcTemplate *** 作数据,如何在Service层控制事务等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10199333.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存