dao_导出 - CSDN
dao 订阅
DAO(Data Access Object) 数据访问对象是一个面向对象的数据库接口,它显露了 Microsoft Jet 数据库引擎(由 Microsoft Access 所使用),并允许 Visual Basic 开发者通过 ODBC 像直接连接到其他数据库一样,直接连接到 Access 表。DAO 最适用于单系统应用程序或小范围本地分布使用。 展开全文
DAO(Data Access Object) 数据访问对象是一个面向对象的数据库接口,它显露了 Microsoft Jet 数据库引擎(由 Microsoft Access 所使用),并允许 Visual Basic 开发者通过 ODBC 像直接连接到其他数据库一样,直接连接到 Access 表。DAO 最适用于单系统应用程序或小范围本地分布使用。
信息
简    称
DAO
局限性
适用于单系统应用程序
中文名
数据库访问对象
外文名
Data Access Object
DAO访问接口
DAO(Data Access Object)是一个数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。 在核心J2EE模式中是这样介绍DAO模式的:为了建立一个健壮的J2EE应用,应该将所有对数据源的访问操作抽象封装在一个公共API中。用程序设计的语言来说,就是建立一个接口,接口中定义了此应用程序中将会用到的所有事务方法。在这个应用程序中,当需要和数据源进行交互的时候则使用这个接口,并且编写一个单独的类来实现这个接口在逻辑上对应这个特定的数据存储。
收起全文
精华内容
参与话题
  • 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类。

    展开全文
  • 什么是DAO模式?

    千次阅读 2018-09-10 21:58:17
    DAO(Data Access Object)顾名思义是一个为数据库或其他持久化机制提供了抽象接口的对象,在不暴露底层持久化方案实现细节的前提下提供了各种数据访问操作。 在实际的开发中,应该将所有对数据源的访问操作进行...

    DAO(Data Access Object)顾名思义是一个为数据库或其他持久化机制提供了抽象接口的对象,在不暴露底层持久化方案实现细节的前提下提供了各种数据访问操作。

    在实际的开发中,应该将所有对数据源的访问操作进行抽象化后封装在一个公共API中。

    用程序设计语言来说,就是建立一个接口,接口中定义了此应用程序中将会用到的所有事务方法。在这个应用程序中,当需要和数据源进行交互的时候则使用这个接口,并且编写一个单独的类来实现这个接口,在逻辑上该类对应一个特定的数据存储。

    DAO模式实际上包含了两个模式,一是Data Accessor(数据访问器),二是Data Object(数据对象),前者要解决如何访问数据的问题,而后者要解决的是如何用对象封装数据。

    展开全文
  • DAO的简单理解

    千次阅读 2019-06-17 11:11:28
    DAO的简单理解 DAO 设计模式 客户层:客户使用浏览器进行访问 显示层:使用servlet和jsp进行页面的显示 业务层(business object):将多个原子性的DAO操作进行组合 数据层(DAO):提供DAO的原子性操作 DAO组成 ...

    DAO的简单理解

    DAO 设计模式

    • 客户层:客户使用浏览器进行访问
    • 显示层:使用servlet和jsp进行页面的显示
    • 业务层(business object):将多个原子性的DAO操作进行组合
    • 数据层(DAO):提供DAO的原子性操作

    DAO组成

    • 数据库连接:
    • vo(value object):定义涉及的变量的getter和setter,后期提取相关的值时操作vo对象。一个vo对象类似于一条记录
    • DAO:主要定义接口,定义一些列的数据库的原子性操作,不负责打开数据库的打开和关闭。
    • lmpl:dao接口的实现类,重写相关的方法,编写详细的相关操作。
    • proxy:代理实现类,主要完成数据的打开和关闭,调用dao接口实现类的对象的方法。
    • factory:通过工厂类获取一个DAO的实例化对象

    相关类之间的关系

    • EmpDao.java,定义接口————EmpDaolmpl.java,实现EmDao接口,完成具体代码的编写
      ————EmpDaolmpl.java,建立emdao的实例化对象,调用对象的具体方法,同时,通过数
      据库连接类建立数据库连接
    • empdaolmpl中属性emdao几口

    总结

    代码的总体思想是将整个的逻辑实现进行分离分割,将代码分为多个层次,虽然
    代码量增加,但整体的结构清晰利于维护

    展开全文
  • DAO层接口,为什么能操作数据库

    千次阅读 多人点赞 2018-11-12 13:59:47
    public interface TestDAO { Test selectById(Integer id); } 一、问题:  如上代码所示,为什么调用TestMapper的selectById方法,就能从数据库中读取数据?TestMapper不是个接口吗?接口怎么能直接调用方法呢?...
    public interface TestDAO {
        Test selectById(Integer id);
    }

    一、问题:

      如上代码所示,为什么调用TestMapper的selectById方法,就能从数据库中读取数据?TestMapper不是个接口吗?接口怎么能直接调用方法呢?

    猜测:

      接口当然是不能直接调用方法的,那么接口的实现类呢?应该是mybatis框架,自动实现了DAO层的接口。

    那么让我们debug一下,来看看DAO层的实现类,是怎么生成的。

     

    二、准备工作,代码准备

    1、需要一个实体类

    public class Test {
        private Integer id;
    
        private String name;
    
       //...
    }

    2、需要一个DAO层接口

    public interface TestDAO {
        Test selectById(Integer id);
    }

    3、需要一个mybatis-config.xml配置文件

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/mybatis_test?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC"/>
                    <property name="username" value="root"/>
                    <property name="password" value="123456"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="mappers/TestMapper.xml"/>
        </mappers>
    </configuration>

    4、需要一个TestMapper.xml文件,与TestDAO接口进行绑定

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
    <mapper namespace="com.me.mybatis.dao.TestDAO">
        <resultMap id="testMap" type="com.me.mybatis.domain.Test">
            <result property="id" column="id" />
            <result property="name" column="name" />
        </resultMap>
    
        <sql id="allColumn">
            id, name
        </sql>
    
        <select id="selectById" resultMap="testMap">
            SELECT <include refid="allColumn"/>
            FROM test
            WHERE id = #{id}
        </select>
    
    </mapper>

    5、POM文件,引入依赖

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.me</groupId>
        <artifactId>mybatis-test</artifactId>
        <version>1.0-SNAPSHOT</version>
    
    
        <dependencies>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.4.6</version>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.16.14</version>
            </dependency>
    
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.12</version>
            </dependency>
        </dependencies>
    
    </project>

    6、项目结构如下:

    7、Main类,进行测试

    public class Main {
    
        public static SqlSession getSqlSession() throws IOException {
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            return sqlSessionFactory.openSession();
        }
    
        public static void main(String[] args) throws IOException {
            TestDAO testDAO = getSqlSession().getMapper(TestDAO.class);
            Test test = testDAO.selectById(1);
        }
    }

     

    三、开始debug

    1、起始位置

       从main方法中的TestDAO testDAO = getSqlSession().getMapper(TestDAO.class);这一行开始debug,探究TestDAO接口的实现类,是怎么来的?

    2、UML图

      这里先给出一个UML图,照着这个UML进行讲解

     

    3、sqlsession将getMapper方法,委托给configuration实现

    3.1 那configuration又是哪里冒出来的呢?

       还记得mybatis-config.xml文件吗?xml中的元素,与JAVA类是一一对应的。所以这个文件里的<configuration></configuration>,也就被解析成了这里的DefaultSqlSession类中的configuration。

     

    4、configuration又将getMapper方法委托给mapperRegistery去实现

    4.1 mapperRegistery又是哪里来的?

    可以发现MapperRegistery作为Configuration的实例变量,是自己new出来的。那它对应xml中的哪一块呢?我们继续往下看。

     

    5、mapperRegistery又将getMapper方法,委托给了MapperProxyFactory去实现

    5.1 我们可以看到mapperProxyFactory是由knownMappers这个Map,get出来的。那knownMappers这个Map,是什么时候有值的?

    5.2  我们看到在addMapper这个方法中,knownMappers 加入了值。于是我们沿着addMapper回溯,看看是谁调用了它。

    回溯路线: MapperRegistery.addMapper() -->  Configuration.addMapper() --> XMLConfigBuilder.mapperElement() --> XMLConfigBuilder.parseConfiguration()

      5.3  在parseConfiguration方法中,我们可以看到mapperElement(root.evalNode("mappers")),这是什么意思?这是在解析xml文件中的<mappers></mappers>标签啊。

      也就是说MapperProxyFactory中的knownMappers,存的就是一个个的mapper。

     

    6、继续回到MapperRegistery中的getMapper方法

    可以看到mapperProxyFactory这个代理工厂,终于生成代理类的实例了。

     

    7、继续跟踪

       终于到了我们所熟悉的动态代理方法了,就是在这里生成了DAO层的实例。这也就是为什么DAO层的接口,能够直接调用方法的原因了——其实不是接口调用方法,而是它的代理类调用方法。

     

      根据我们所熟知的动态代理,可以知道mapperProxy必定是实现了InvocationHandler接口,我们点进去,验证一下。发现确实如此。

    以后我们调用TestDAO这个接口中的方法时,实际上会到MapperProxy的invoke方法中来。

     

    四、完善UML

    经过debug,我们可以知道,TestDAO接口生成代理类实例的流程,大致如下(不太准确):

     

     

    展开全文
  • Java中DAO的实现

    千次阅读 2018-11-10 17:24:14
    Java中DAO的实现
  • DAO

    2020-09-05 12:20:45
    DAO(Data Access Object)数据访问对象是一个面向对象的数据库接口,它显露了 Microsoft Jet数据库引擎(由 Microsoft Access 所使用),并允许 Visual Basic 开发者通过 ODBC 像直接连接到其他数据库一样,直接连接...
  • dao层注解@repository

    万次阅读 2019-03-11 10:07:21
    上一篇博客中第三种实例化方式说到了要用到@repository这个注解,其实根据以往这么久的开发经验,在dao层不用写这个注解spring也是可以实例化的。但是通常将dao接口注入到service层的时候,需要写@Resource这个注解...
  • DAO三层架构及工厂模式

    千次阅读 2019-04-05 09:01:10
    目录结构 1.在domain包中创建User实体类 package com.rick.domain; import java.util.Date; public class User { private int id; private String name; private Date birthday;... public int getI...
  • JDBC中Dao

    万次阅读 多人点赞 2017-12-26 14:25:14
    一、DAO模型DAO(Date Access Object) 模型就是写一个类,把访问数据库的代码封装起来,DAO在数据库与业务逻辑(Service)之间。1、实体域,即操作的对象,例如我们操作的表示user表,那么就需要先写一个User类; 2...
  • dao层和serivce层的作用和区别

    万次阅读 2018-07-06 09:52:32
    文章载来源:【http://blog.csdn.net/qq_34825926/article/details/69346084】访问数据库的传统方法 传统访问数据库的方法非常面向过程,分为以下几步 – 实例化connection – 实例化statement – 通过statement...
  • Java中DAO层、Service层和Controller层的区别

    万次阅读 多人点赞 2018-09-03 09:48:41
    DAO层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表的增删改查,也就是说某个DAO一定是和数据库的某一张表一一对应的,其中封装了增删改查基本操作,建议DAO只做...
  • springboot配置扫描DAO

    万次阅读 2019-07-02 17:21:22
    可以使用三种注解来引入DAO层的接口到spring容器中。 1.@Mapper,写在每一个DAO层接口上,如下: //@Mapper public interface UserDAO { public User find(@Param(&quot;name&quot;) String name, @...
  • DAO层是干什么的

    万次阅读 多人点赞 2018-07-26 10:50:17
    DAO(Data Access Object) 是数据访问层 Action像是服务员,顾客点什么菜,菜上给几号桌,都是ta的职责;Service是厨师,action送来的菜单上的菜全是ta做的;Dao是厨房的小工,和原材料(通过hibernate操作数据库)打...
  • DAO和DTO的区别

    万次阅读 2018-05-18 15:47:55
    DAO: data access object数据访问对象 主要用来封装对数据库的访问。通过它可以把POJO持久化为PO,用PO组装出来VO、DTO DTO : Data Transfer Object数据传输对象 主要用于远程调用等需要大量传输对象的地方...
  • springboot启动扫描不到dao层接口

    万次阅读 2018-07-09 20:06:30
    今天启动springboot项目时失败了,检查原因发现是启动类的MapperScan("")的值写到类名了,改成类所在的包名错误就修复了。
  • DAO和Repository有什么区别

    千次阅读 2013-03-29 17:47:25
    http://www.jdon.com/32562/5
  • 解决SpringBoot中的dao实例无法自动注入(@autowire)问题

    万次阅读 热门讨论 2018-04-25 06:56:34
    由于对springboot不熟悉,我在一个小bug上边卡了很久。 mapper接口一定要加注解@Mapper!!! 加@Component没用!!!否则spring无法识别mapper对应的...Field dao in com.bamzhy.hotelbybz.service.RoomSetServiceimpl
  • MVC的dao层、service层和controller层

    万次阅读 多人点赞 2018-03-09 09:55:14
    1、daodao层主要做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,dao层的设计首先是设计dao层的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可以再模块中调用此接口来进行数据业务...
  • hibernate更新的时候报了org.springframework.dao.DataIntegrityViolationException: Could not execute JDBC batch update; SQL [此处省略sql语句]; nested exception is org.hibernate.exception.DataException: ...
  • DAO与DAL的区别

    万次阅读 2014-03-10 17:28:49
    DAO(Data Access Object)侧重ORM对象关系映射,DAO曾往往提供的是ORM操作。 DAL(Data Access Layer)多用于分布式系统 分布式系统提供水平伸缩能力,应用层水平扩展后,会使数据库连接资源相对较少成为瓶颈,此时...
1 2 3 4 5 ... 20
收藏数 363,031
精华内容 145,212
关键字:

dao