精华内容
下载资源
问答
  • DAO什么意思

    2021-05-15 11:10:38
    数据访问对象(data access object,DAO)是为某种类型的数据库或其他持久性机制提供一个抽象接口的对象。通过映射应用程序对持久层的调用,DAO 提供一些特定的数据操作,而无需暴露数据库细节。这种隔离支持单一...

    数据访问对象(data access object,DAO)是为某种类型的数据库或其他持久性机制提供一个抽象接口的对象。通过映射应用程序对持久层的调用,DAO 提供一些特定的数据操作,而无需暴露数据库细节。这种隔离支持单一功能原则。它分离了应用程序需要访问哪些数据,就域特定对象和数据类型(DAO 的公共接口),而言,这些需求可以用数据库管理系统(DBMS)、数据库模式等满足(DAO 的实现)。

    data access

    尽管这种设计模式同样适用于以下内容:1、大多数编程语言;2、有持久化需求的大多数软件类型;3、大多数数据库。它在传统上与 Java EE 应用程序和关系数据库相关(通过 JDBC API 访问,因为它源于 Sun Microsystems 的最佳实践指南,该平台的“核心 J2EE 模式”)。

    使用数据访问对象的优点是应用程序的两个重要部分之间相对简单并严格分离,它们可以但不应该彼此了解任何东西,并且两者可预期的频繁和独立发展。改变业务逻辑可以依赖于相同的 DAO 接口,而对持久性逻辑的更改只要接口保持正确实现,就不会影响 DAO 客户端。存储的所有细节都隐藏在应用程序的其余部分中(见信息隐藏)。因此,可以修改一个 DAO 实现而不影响应用程序的其余部分,从而可能实现对持久性机制的更改。DAO 充当了应用程序与数据库之间的中介,它们在对象与数据库记录之间来回转移数据。用测试替身取代 DAO 可以促进代码的单元测试,使测试不依赖于持久层。

    在 Java 编程语言的非特定上下文中,数据访问对象作为一项设计概念可以用多种方式实现。这可以将应用程序中的数据访问部分分离为非常简单的接口,迁移到框架或商业产品。DAO 编码范例可能需要一些技巧。像是 Java Persistence API 和 Enterprise JavaBeans 之类的技术已内置在应用程序服务器中,可以在 JavaEE 应用程序服务器的应用程序中使用。商业产品如 TopLink 可以在基于对象关系映射(ORM)的产品上使用。流行的开源 ORM 产品包括 Doctrine (PHP)、Hibernate、iBATIS,以及 JPA 实现(例如 Apache OpenJPA)。

    使用 DAO 的潜在缺点包括抽象泄漏、代码重复和抽象反演。尤其是将 DAO 作为常规 Java 对象的抽象会隐藏每个数据库访问的高成本,并且可能强迫开发人员触发多个数据库查询来检索普通 SQL 查询中一次就可取回的信息。如果一个应用程序需要多个 DAO,人们可能发现自己对每个 DAO 重复基本上相同的创建、读取、更新和删除代码。不过,也可以实现一个处理常用操作的通用 DAO 来避免样板化代码。

    展开全文
  • java中dao什么意思

    千次阅读 2020-12-22 18:05:36
    DAO 模式 DAO (DataAccessobjects 数据存取对象)是指位于业务逻辑和持久化数据之间实现对持久化数据的访问。通俗来讲,就是将数据库操作都封装起来。 对外提供相应的接口 在面向对象设计过程中,有一些"套路”...

    DAO 模式

    DAO (DataAccessobjects 数据存取对象)是指位于业务逻辑和持久化数据之间实现对持久化数据的访问。通俗来讲,就是将数据库操作都封装起来。

    对外提供相应的接口

    在面向对象设计过程中,有一些"套路”用于解决特定问题称为模式。

    DAO 模式提供了访问关系型数据库系统所需操作的接口,将数据访问和业务逻辑分离对上层提供面向对象的数据访问接口。

    从以上 DAO 模式使用可以看出,DAO 模式的优势就在于它实现了两次隔离。

    • 1、隔离了数据访问代码和业务逻辑代码。业务逻辑代码直接调用DAO方法即可,完全感觉不到数据库表的存在。分工明确,数据访问层代码变化不影响业务逻辑代码,这符合单一职能原则,降低了藕合性,提高了可复用性。
    • 2、隔离了不同数据库实现。采用面向接口编程,如果底层数据库变化,如由 MySQL 变成 Oracle 只要增加 DAO 接口的新实现类即可,原有 MySQ 实现不用修改。这符合 "开-闭" 原则。该原则降低了代码的藕合性,提高了代码扩展性和系统的可移植性。

    一个典型的DAO 模式主要由以下几部分组成。

    • 1、DAO接口: 把对数据库的所有操作定义成抽象方法,可以提供多种实现。

    • 2、DAO 实现类: 针对不同数据库给出DAO接口定义方法的具体实现。
    • 3、实体类:用于存放与传输对象数据。
    • 4、数据库连接和关闭工具类: 避免了数据库连接和关闭代码的重复使用,方便修改。
    • DAO 接口:

      public interface PetDao {
          /**
           * 查询所有宠物
           */
          List<Pet> findAllPets() throws Exception;
      }

      DAO 实现类:

      public class PetDaoImpl extends BaseDao implements PetDao {
          /**
           * 查询所有宠物
           */
          public List<Pet> findAllPets() throws Exception {
              Connection conn=BaseDao.getConnection();
              String sql="select * from pet";
              PreparedStatement stmt= conn.prepareStatement(sql);
              ResultSet rs=    stmt.executeQuery();
              List<Pet> petList=new ArrayList<Pet>();
              while(rs.next()) {
                  Pet pet=new Pet(
                          rs.getInt("id"),
                          rs.getInt("owner_id"),
                          rs.getInt("store_id"),
                          rs.getString("name"),
                          rs.getString("type_name"),
                          rs.getInt("health"),
                          rs.getInt("love"),
                          rs.getDate("birthday")
                          );
                      petList.add(pet);
              }
              BaseDao.closeAll(conn, stmt, rs);
              return petList;
          }
      }

      宠物实体类(里面get/set方法就不列出了)

      public class Pet {
          private Integer id;    
          private Integer ownerId;    //主人ID
          private Integer storeId;    //商店ID
          private String name;    //姓名
          private String typeName;    //类型
          private int health;    //健康值
          private int love;    //爱心值
          private Date birthday;    //生日

      连接数据库

      public class BaseDao {
          private static String driver="com.mysql.jdbc.Driver";
          private static String url="jdbc:mysql://127.0.0.1:3306/epet";
          private static String user="root";
          private static String password="root";
              static {
                  try {
                      Class.forName(driver);
                  } catch (ClassNotFoundException e) {
                      e.printStackTrace();
                  }
              }
              
          public static Connection getConnection() throws SQLException {
              return DriverManager.getConnection(url, user, password);    
          }
          
          public static void closeAll(Connection conn,Statement stmt,ResultSet rs) throws SQLException {
              if(rs!=null) {
                  rs.close();
              }
              if(stmt!=null) {
                  stmt.close();
              }
              if(conn!=null) {
                  conn.close();
              }
          }
          
      
          public int executeSQL(String preparedSql, Object[] param) throws ClassNotFoundException {
              Connection conn = null;
              PreparedStatement pstmt = null;
              /* 处理SQL,执行SQL */
              try {
                  conn = getConnection(); // 得到数据库连接
                  pstmt = conn.prepareStatement(preparedSql); // 得到PreparedStatement对象
                  if (param != null) {
                      for (int i = 0; i < param.length; i++) {
                          pstmt.setObject(i + 1, param[i]); // 为预编译sql设置参数
                      }
                  }
              ResultSet num = pstmt.executeQuery(); // 执行SQL语句
              } catch (SQLException e) {
                  e.printStackTrace(); // 处理SQLException异常
              } finally {
                  try {
                      BaseDao.closeAll(conn, pstmt, null);
                  } catch (SQLException e) {    
                      e.printStackTrace();
                  }
              }
              return 0;
          }
          
      }

       

    展开全文
  • java中的Dao类是什么意思

    万次阅读 多人点赞 2019-06-23 00:38:42
    DAO类都是进行数据操作的类, 是对于数据库中的数据做增删改查等操作的代码。 DAO(Data Access Object) 数据访问对象是一个面向对象的数据库接口,它显露了 Microsoft Jet 数据库引擎(由 Microsoft Access 所使用...

    DAO类都是进行数据操作的类,

    是对于数据库中的数据做增删改查等操作的代码。

    DAO(Data Access Object) 数据访问对象是一个面向对象的数据库接口,它显露了 Microsoft Jet 数据库引擎(由 Microsoft Access 所使用),并允许 Visual Basic 开发者通过 ODBC 像直接连接到其他数据库一样,直接连接到 Access 表。DAO 最适用于单系统应用程序或小范围本地分布使用。

    DAO层一般有接口和该接口的实现类,接口用于规范实现类,实现类一般用于用于操作数据库! 一般操作修改,添加,删除数据库操作的步骤很相似,就写了一个公共类DAO类 ,修改,添加,删除数据库操作时直接调用公共类DAO类。

    展开全文
  • 适合受众:2年以下的初级程序员和0基础的门外汉内容大纲:1.为什么需要一个好的代码结构2.什么样才是一个好的结构3.每一个分类代表什么含义4.是否适用于WEB,Android和IOS?5....

    适合受众:2年以下的初级程序员和0基础的门外汉

    内容大纲:

    1.为什么需要一个好的代码结构

    2.什么样才是一个好的结构

    3.每一个分类代表什么含义

    4.是否适用于WEB,Android和IOS?

    5.进一步的学习的话,是要学习系统架构么?

    一 为什么需要一个好的代码结构

    1. 好的代码结构并不仅仅是为了看上去清晰,它更像是我们对一个系统的拆解和组装。

    2. 好的代码结构可以让你在遇到代码交接这种天理不容的情况时,减少提刀砍人的可能性。

    3. 好的代码结构可以让多人协作开发更容易,而不会缠缠绵绵到天涯,再相爱相杀。

    我们经常形容一个坏的代码结构,像屎一样。

    我们称它为一坨,说真的,接手过烂代码之后,真的找不到比屎更能描述自己感受的词了。

    “屎”代表着混乱,一坨,各种杂质。接手一堆烂代码的难度就像是用一坨屎来做沙画。

    有时候我们还会用一团毛线来形容代码,大概是这样的。

    对的,这种感受是绝对不会错的。而我们要做的就是把这团毛线,变成像瑞士军刀一样的清晰。

    你们觉得哪个更有成就感?

    二 什么样才是一个好的结构

    1. 好的结构应该保持单一职责。

    2. 好的结构应该是通用的。

    3. 好的结构应该是有明确定义的。

    这其实就是所谓的脚手架提供的最大的价值,一般而言,Java,Android,IOS都有一套明确的框架体系,JS本来没有,后来有了,然后。。他们就打起来了。

    就像。。。他们一样。

    该喷火的喷火,该喷水的喷水,每个人分工都很明确。

    三 每一个分类代表什么含义

    1.Model

    Model是模型,一般而言,会有人分的更细,VO,DTO等等。我并不推荐分的更细,这个Model常常和持久化的数据一一对应,如Mysql和MongoDB。

    Model承载的作用就是数据的抽象,描述了一个数据的定义,Model的实例就是一组组的数据。整个系统都可以看成是数据的 流动,既然要流动,就一定是有流动的载体。

    这个红圈标的就是Model。它就应该是一个纯数据的集合,就是被各种东西传来传去,被各种加工处理的数据团。

    通常会有很多Model,一条业务流就是对应一条或者多条数据流,拿知乎为例子。

    文章是一个Model,一般叫Article,包括Title,Summary,Author,Content等等。

    评论也是一个Model,一般叫Comment,包括Content,userID等等。

    对于初学者而言,第一个要学会,就是建模,把业务逻辑映射成数据模型。

    2.Util

    Util是工具的意思,一般来说,常常用来描述和业务逻辑没有关系的数据处理。

    Util一般要和私有方法对比:私有方法一般来说是只是在特地场景下使用的,私有方法越多,代码结构越乱。常见的重构策略就是首先从一个越长行数的代码里抽象出若干个私有方法,然后再抽出公用的Util。

    如果有可能,尽可能的少用私有方法,而是把他换成一个公用的Util,代表他和业务逻辑是不相关的。通常命名也是ArticleUtil,CommentUtil之类的。

    像这种打包,不管是充气娃娃还是别的什么东西,都打包。你可以理解为图中的黑衣人就是一个Util。

    某中程度上也会跟Service有点接近。但是Service一般而言,都是包含有业务逻辑的,很少能做单元测试。

    Util一般来说,就是一个明确的输入和一个明确的输出结果。单元测试中,多数也是来测试Util。

    积累好自己的Util是一件很重要的事儿。

    3 Service

    Service比Util的概念大很多,它的重点是在于提供一个服务。这个服务可能包括一系列的数据处理,也有可能会调用多个Util,或者是调用别的服务。总归一句话,就是,有什么事情,你来找我。

    就像这个图上的妹妹一样,她就是一个Service,她能提供什么样的服务?这个是必须定义好的。如果是洗脚,她要帮你脱鞋,要端盆子烫你的脚。这里面,你的脚就是一个Model,盆子里的水相当于Util,不管里面放进去啥都能烫一烫。

    帮你脱鞋可以是一个Service,也可以是一个私有函数,也可以是一个Util。看你的是让这个小妹妹帮你脱,还是别的小妹妹脱,还是自动脱鞋机。

    如果是你自动脱。。。说明你在Model里面加上了功能,你的脚就不是一个纯粹的数据模型了,而是一个包含业务功能在里面的充血模型。

    这样不好。老老实实让小妹妹帮你拖鞋不好么。

    4.Dao

    Dao一般而言,都是用来和底层数据库通信,负责对数据库的增删改查。

    是的。他就是一个Dao。他从来不关心这些货物要去哪里,他只关心。入库,出库,查询和更换。

    所谓的CRUD就是创建,读取,更新,删除。

    Dao最好都是要独立出来。

    到现在为止,最佳实践就是一个Service只对应一个Dao。Service会做一些额外的检查,如货物是否损坏,入库单是否完整,等等等等。

    我并不推荐在Service里调用多个Dao,也推荐在Service里调用多个Service,大多数情况下我都不推荐这么干。

    具体原因以后再说,这也是一个开放性的话题。

    现在我们分清楚了Model,Util,Service和Dao,可是谁来做总的调度呢?

    5.Controller

    控制中心,所有的指令,调度都从这里发出去。

    哪一个Service做什么事儿,谁的数据提供给谁,一般而言,都是在Controller里实现的。

    Controller也是最常见的容易产生脏代码地方,通常他们会把一些不该放到Controller里东西也放进来。

    大概的感觉就是这样的。

    干嘛的都有。想想如果打小针,抽血,查尿也混杂到门诊大厅的感觉?

    可是大部分人写代码就是这样的。

    四.是否适用于WEB,Android和IOS?

    Java后台是有很清楚的结构的,毕竟在JSP里写Sql语句的蛮荒时代已经过去了。

    Android本身就是一个良好的框架体系,基本上问题也不大,最多就是MVP和MVC的差别之类。

    IOS虽然没有官方提供这种框架体系,特别是很多人喜欢直接在Dict里用key取数据,这本身就破坏了代码的层次性。

    但是毕竟是有李明杰提供的Json解析Util,只是各家要求的力度而已。

    最难以理解的是WEB,也就是JS。

    我不是在黑JS,我是在黑JS程序员。分层结构一直都不是JS社区里最注重的,在JQuery时代更是如此,不管是Html还是JS还是CSS混在一起是正常的。

    那个时候叫插件,现在改名了,叫组件。

    你很难在JQuery里找到一套清晰的分层结构,就跟十几年前所有的人都在Jsp里写逻辑语句的道理差不多。

    直到google的大神偶尔遛达过来一看,咦?你们怎么还在刀耕火种?我来给你们加点现代感的东西吧。

    于是Angular横穿出世,一次性的构建了一个清晰的框架结构。每次看到Angular的时候都忍不住 惊叹,原来前端代码也可以这样!

    而原来的感觉就是这样。。。

    现在基本上可以分成两大阵营,一个是React和Vue,一个是Angular。

    React和Vue本身更偏得于插件化,哦,不,组件化。所以他们需要便宜桶,来拼接整个前端的架构体系。

    Angular却是有典型的Java架构风格,妥妥的硬汉子。

    所以,实际上说,这套体系也是可以应用在WEB上的,就像Android和IOS一样的,但是你喜欢,或者不喜欢,自己选啦。

    五 进一步的学习的话,是要学习系统架构么?

    是的。进一步要学习,并不仅仅是学习系统架构。

    这里还没有讲到Service的设计,互相之间的调用,解耦,服务之间的通信和管理。

    消息队列这个神器还没有登场,MongoDB这种战略要塞也没出场。

    所以以上内容,仅适用于2年以内的各种工程师。

    来源:zhihu.com/question/58410621/answer/156868800

    推荐好文强大,10k+点赞的 SpringBoot 后台管理系统竟然出了详细教程!分享一套基于SpringBoot和Vue的企业级中后台开源项目,代码很规范!能挣钱的,开源 SpringBoot 商城系统,功能超全,超漂亮
    
    展开全文
  • 在Java中VO , PO , BO, DAO ,POJO是什么意思 最近在项目中,遇到VO,我的天。。。那就一起学习回忆一下 首先简单说明下: O/R Mapping是Object Relational Mapping(对象关系映射)的缩写。简单来说,就是将...
  • 1.先名词解释吧:DAO = Data Access Object = 数据存取对象Service = 服务Controller = 控制器Util = 工具Model = 模型首先,一个代码是不是有完善的结构,和是不是有上面这些东西没有什么关系,只是通常来说,我们...
  • ai人工智能操控什么意思Beyond the already complex challenge of implementing AI, some companies have started analyzing the possible benefits of building an AI Decentralized Autonomous Organizations (AI ...
  • DAO : data  access  object数据访问对象 这个大家最熟悉,和上面几个O区别最大,基本没有互相转化的可能性和必要. 主要用来封装对数据库的访问。通过它可以把POJO持久化为PO,用PO组装出来VO、DTO ...
  • DAO = Data Access Object = 数据存取对象 Service = 服务 Controller = 控制器 Util = 工具 Model = 模型 首先,一个代码是不是有完善的结构,和是不是有上面这些东西没有什么关系,只是通常来说,我们做一...
  • PO: persistantobject持久对象 BO: businessobject业务对象 VO: valueobject值对象,ViewObject表现层对象 QO: 查询对象 POJO: plainordinaryjavaobject简单java对象 ...DAO: dataaccesso...
  • Service:service层是在mcv三层模式中新添加一层,能够更加清晰的定义应用程序的边界,需要操作数据的时候,通过service层访问DAO层来实现。service层做的事情,不仅仅是调用DAO操作数据,还会包含了一定的业务逻辑。...
  • 代码如下 ``` ... String hql ="FROM Users WHERE name=?... user = (Users)session.createQuery(hql).setParameter(0, userName).setParameter(1, userPwd).uniqueResult();...createQuery(hql).setParameter(),...
  • 作者:技能树IT修真院链接:https://www.zhihu.com/question/58410621/answer/623496434来源:知乎著作权归...1.为什么需要一个好的代码结构 2.什么样才是一个好的结构 3.每一个分类代表什么含义 4.是否适用于W...
  • 来源 |zhihu.com/question/58410621/answer/156868800适合受众 :2年以下的初级程序员和0基础的门外汉。# 为什么需要一个好的代码结构好的代码结...
  • dao 与数据库的操作,增删改查等方法 model 一般都是javabean对象,例如与数据库的某个表相关联。 service 供外部调用,等于对dao,model等进行了包装。 impl 定义的接口 util 通常都是工具类,如字符串处理、...
  • Sun 没有声明什么时候将增加支持,但它暗示这将在即将推出的一个 dot 版本中实现。 更进一步 如果您试图在 Javadocs 页面中查看这些属性,那么您可能很难找到它们。它们位于核心的 java.lang 包中,但有点隐蔽,...
  • dao 与数据库的操作,增删改查等方法modal 一般都是javabean对象,例如与数据库的某个表相关联。service 供外部调用,等于对dao,modal等进行了包装。impl 定义的接口util 通常都是工具类,如字符串处理、日期处理等...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 257
精华内容 102
关键字:

dao什么意思