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中。用程序设计的语言来说,就是建立一个接口,接口中定义了此应用程序中将会用到的所有事务方法。在这个应用程序中,当需要和数据源进行交互的时候则使用这个接口,并且编写一个单独的类来实现这个接口在逻辑上对应这个特定的数据存储。
收起全文
精华内容
下载资源
问答
  • DAO

    万次阅读 2019-12-16 13:10:51
    DAO: Data Access Object访问数据信息的类和接口,包括了对数据的CRUD(Create、Retrival、Update、Delete),而不包含任何业务相关的信息。有时也称作:BaseDAO。 作用: 为了实现功能的模块化,更有利于代码的...
    DAO:

    Data Access Object访问数据信息的类和接口,包括了对数据的CRUD(Create、Retrival、Update、Delete),而不包含任何业务相关的信息。有时也称作:BaseDAO。

    作用:

    为了实现功能的模块化,更有利于代码的维护和升级。

    customer表结构

    customer表结构

    BaseDAO.java
    public abstract class BaseDAO<T> {
        private Class<T> clazz;
        {
            Type genericSuperclass = this.getClass().getGenericSuperclass();
            ParameterizedType parameterizedType = (ParameterizedType) genericSuperclass;
            //获取父类的泛型参数
            Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
            //泛型的第一个参数
            clazz = (Class<T>) actualTypeArguments[0];
        }
        //通用的增删改方法(考虑事务)
        public int update(Connection connection, String sql, Object... args) {
            PreparedStatement preparedStatement = null;
            try {
                //1.预编译sql语句,返回PreparedStatement的实例
                preparedStatement = connection.prepareStatement(sql);
                //2.填充占位符
                for (int i = 0; i < args.length; i++) {
                    preparedStatement.setObject(i + 1, args[i]);
                }
                //3.执行操作
                return preparedStatement.executeUpdate();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                //4.资源的关闭
                JDBCUtils.closeResource(null, preparedStatement);
            }
            return 0;
        }
        //通用的查询方法(考虑事务)
        public List<T> getForList(Connection connection, String sql, Object... args) {
            PreparedStatement preparedStatement = null;
            ResultSet resultSet = null;
            try {
                preparedStatement = connection.prepareStatement(sql);
                for (int i = 0; i < args.length; i++) {
                    preparedStatement.setObject(i + 1, args[i]);
                }
                resultSet = preparedStatement.executeQuery();
                //获取结果集的元数据:ResultSetMetaData
                ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
                //通过ResultSetMetaData获取结果集中的列数
                int columnCount = resultSetMetaData.getColumnCount();
                //创建集合对象
                ArrayList<T> list = new ArrayList<>();
                while (resultSet.next()) {
                    T instance = clazz.newInstance();
                    //处理结果集一行数据中的每一个列:给instance对象指定的属性赋值
                    for (int i = 0; i < columnCount; i++) {
                        //获取列值
                        Object columnValue = resultSet.getObject(i + 1);
                        //获取每个列的列名
                        String columnLabel = resultSetMetaData.getColumnLabel(i + 1);
                        //给customer对象指定的columnName属性,赋值为columnValue(通过反射)
                        Field field = clazz.getDeclaredField(columnLabel);
                        field.setAccessible(true);
                        field.set(instance, columnValue);
                    }
                    list.add(instance);
                }
                return list;
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                JDBCUtils.closeResource(null, preparedStatement, resultSet);
            }
            return null;
        }
        //查询特殊值的通用方法
        public <E> E getValue(Connection connection, String sql, Object... args) {
            PreparedStatement preparedStatement = null;
            ResultSet resultSet = null;
            try {
                preparedStatement = connection.prepareStatement(sql);
                for (int i = 0; i < args.length; i++) {
                    preparedStatement.setObject(i + 1, args[i]);
                }
                resultSet = preparedStatement.executeQuery();
                if (resultSet.next()) {
                    return (E) resultSet.getObject(1);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                JDBCUtils.closeResource(null, preparedStatement, resultSet);
            }
            return null;
        }
    }
    
    CustomerDAO.java
    //此接口规范针对于customers表的常用操作
    public interface CustomerDAO {
        //将customer对象添加到数据库中
        void insert(Connection connection, Customer customer);
        //针对指定的id,删除表中的一条记录
        void deleteById(Connection connection, int id);
        //针对内存中的customer对象,去修改数据表中指定的记录
        void update(Connection connection, Customer customer);
        //针对指定id查询得到对应的Customer对象
        Customer getCustomerById(Connection connection, int id);
        //查询表中所有记录构成的集合
        List<Customer> getAll(Connection connection);
        //返回数据表中数据的条目数
        Long getCount(Connection connection);
        //返回数据表中最大的生日
        Date getMaxBirth(Connection connection);
    }
    
    CustomerDAOImpl.java
    public class CustomerDAOImpl extends BaseDAO<Customer> implements CustomerDAO {
        @Override
        public void insert(Connection connection, Customer customer) {
            String sql = "insert into customers(name, email, birth)values(?, ?, ?)";
            update(connection, sql, customer.getName(), customer.getEmail(), customer.getBirth());
        }
        @Override
        public void deleteById(Connection connection, int id) {
            String sql = "delete from customers where id = ?";
            update(connection, sql, id);
        }
        @Override
        public void update(Connection connection, Customer customer) {
            String sql = "update customers set name = ?, email = ?, birth = ? where id = ?";
            update(connection, sql, customer.getName(), customer.getEmail(), customer.getBirth(), customer.getId());
        }
        @Override
        public Customer getCustomerById(Connection connection, int id) {
            String sql = "select id, name, email, birth from customers where id = ?";
            List<Customer> customer = getForList(connection, sql, id);
            return customer.get(0);
        }
        @Override
        public List<Customer> getAll(Connection connection) {
            String sql = "select id, name, email, birth from customers";
            List<Customer> list = getForList(connection, sql);
            return list;
        }
        @Override
        public Long getCount(Connection connection) {
            String sql = "select count(*) from customers";
            return getValue(connection, sql);
        }
        @Override
        public Date getMaxBirth(Connection connection) {
            String sql = "select max(birth) from customers";
            return getValue(connection, sql);
        }
    }
    
    CustomerDAOImplTest.java
    public class CustomerDAOImplTest {
        private CustomerDAOImpl dao = new CustomerDAOImpl();
        @Test
        public void testInsert() {
            Connection connection = null;
            try {
                connection = JDBCUtils.getConnection();
                Customer customer = new Customer(1, "于小飞", "xiaofei@126.com", new Date(43534646435L));
                dao.insert(connection, customer);
                System.out.println("添加成功");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                JDBCUtils.closeResource(connection, null);
            }
        }
        @Test
        public void testDeleteById() {
            Connection connection = null;
            try {
                connection = JDBCUtils.getConnection();
                dao.deleteById(connection, 13);
                System.out.println("删除成功");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                JDBCUtils.closeResource(connection, null);
            }
        }
        @Test
        public void testUpdateConnectionCustomer() {
            Connection connection = null;
            try {
                connection = JDBCUtils.getConnection();
                Customer customer = new Customer(18, "贝多芬", "beiduofen@126.com", new Date(453465656L));
                dao.update(connection, customer);
                System.out.println("修改成功");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                JDBCUtils.closeResource(connection, null);
            }
        }
        @Test
        public void testGetCustomerById() {
            Connection connection = null;
            try {
                connection = JDBCUtils.getConnection();
                Customer customer = dao.getCustomerById(connection, 19);
                System.out.println(customer);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                JDBCUtils.closeResource(connection, null);
            }
        }
        @Test
        public void testGetAll() {
            Connection connection = null;
            try {
                connection = JDBCUtils.getConnection();
                List<Customer> list = dao.getAll(connection);
                list.forEach(System.out::println);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                JDBCUtils.closeResource(connection, null);
            }
        }
        @Test
        public void testGetCount() {
            Connection connection = null;
            try {
                connection = JDBCUtils.getConnection();
                Long count = dao.getCount(connection);
                System.out.println("表中的记录数为:" + count);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                JDBCUtils.closeResource(connection, null);
            }
        }
        @Test
        public void testGetMaxBirth() {
            Connection connection = null;
            try {
                connection = JDBCUtils.getConnection();
                Date maxBirth = dao.getMaxBirth(connection);
                System.out.println("最大的生日为:" + maxBirth);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                JDBCUtils.closeResource(connection, null);
            }
        }
    }
    
    展开全文
  • dao

    千次阅读 2012-06-13 23:07:12
    dao即是数据访问对象:由四部分组成dao接口,dao实现,实体类,dao工厂(提供dao对象的)。
    dao即是数据访问对象:由四部分组成dao接口,dao实现,实体类,dao工厂(提供dao对象的)。
    
    展开全文
  • Java中DAO层、Service层和Controller层的区别

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

    DAO层:
    DAO层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表的增删改查,也就是说某个DAO一定是和数据库的某一张表一一对应的,其中封装了增删改查基本操作,建议DAO只做原子操作,增删改查。

    Service层:
    Service层叫服务层,被称为服务,粗略的理解就是对一个或多个DAO进行的再次封装,封装成一个服务,所以这里也就不会是一个原子操作了,需要事物控制。

    Controler层:
    Controler负责请求转发,接受页面过来的参数,传给Service处理,接到返回值,再传给页面。

    总结:
    个人理解DAO面向表,Service面向业务。后端开发时先数据库设计出所有表,然后对每一张表设计出DAO层,然后根据具体的业务逻辑进一步封装DAO层成一个Service层,对外提供成一个服务。

    展开全文
  • DAO接口

    千次阅读 2019-02-02 21:10:18
    DAO接口 DAO,全名为Data Access Object,数据库访问对象。DAO通常包括三个部分:DAO接口,DAO实现类,DAO工厂类。 名称 描述 DAO接口 用来声明对数据库表的操作,如增删改查记录 DAO实现类 用来实现DAO...

    DAO接口


    DAO,全名为Data Access Object,数据库访问对象。DAO通常包括三个部分:DAO接口,DAO实现类,DAO工厂类。

    名称 描述
    DAO接口 用来声明对数据库表的操作,如增删改查记录
    DAO实现类 用来实现DAO接口,并实现其接口的所有方法
    DAO工厂类 用来返回一个DAO接口类型的DAO实现类实例对象。

    范例: 定义一个DAO接口,并添加操作数据库的方法。
    CommodityDAO.java

    package com.MyJavaBean.text;
    
    public interface CommodityDAO {
         public void addCommodity(Commodity commodity);//定义添加商品的方法
         public void updateCommodity(Commodity commodity);//定义修改商品的方法
         public void deleteCommodity(int commodityId);//定义删除商品的方法
         public void List<Commodity> findAllCommodity();//定义查询商品的方法
         public Commodity findCommodityById(int commodityId);//定义按ID查询商品的方法
    }
    
    展开全文
  • DAO模式

    千次阅读 2018-01-18 17:57:33
    DAO模式1)什么是Dao?Data Access Object(数据存取对象)位于业务逻辑和持久化数据之间实现对持久化数据的访问2)DAO模式的作用?隔离业务逻辑代码和数据访问代码隔离不同数据库的实现3)DAO模式的组成部分DAO接口...
  • 对于后端开发者来说,经常跟数据库打交道,hibernate mybatis是常用是的持久化层,mybatis简单、灵活,易上手,但要写大量的sql;Hibernate太复杂,但对...此DAO层正是由此而来,基于Hibernate开发,解决小sql的问...
  • Nervos DAO是个什么DAO

    2019-11-15 14:58:10
    文| 小野、Future小哥哥出品 | 陀螺财经(tuoluocaijing)在区块链世界里,去中心化自治组织 DAO(Decentralized Autonomous...
  • mapper层=dao层,现在用mybatis逆向工程生成的mapper层,其实就是dao层。对数据库进行数据持久化操作,他的方法语句是直接针对数据库操作的,而service层是针对我们controller,也就是针对我们使用者。service的...
  • Java DAO、Service、web理解之DAO

    千次阅读 2019-06-08 21:13:45
    DAO 模式 DAO (Data Access Object数据存取对象)是指位于业务逻辑和持久化数据之间实现对持久化数据的访问。通俗来讲,就是将数据库操作都封装起来。(接口设计+SQL编写,不涉及业务代码) DAO 包含的模块: dao ...
  • DAO层是干什么的

    万次阅读 多人点赞 2018-07-26 10:50:17
    DAO(Data Access Object) 是数据访问层 Action像是服务员,顾客点什么菜,菜上给几号桌,都是ta的职责;Service是厨师,action送来的菜单上的菜全是ta做的;Dao是厨房的小工,和原材料(通过hibernate操作数据库)打...
  • DAO模式的好处是数据访问和业务逻辑分离,便于数据维护,业务逻辑不需要了解访问细节。 DAO的组成: 1.DatabaseConnection:负责打开和关闭数据库; 2.VO:包含属性以及其getter和setter方法; 3.DAO:定义操作...
  • Mapper和dao

    千次阅读 2021-01-10 23:47:52
    在看公司项目的时候看到了一个dao层接口对应的resource文件夹竟然同时实现XXXmapper.xml mapper写法和XXX.xml同名文件写法当时就傻眼了,还需要这样写不是实现相同功能吗?于是赶紧又找资料来复习下这两种实现方式 ...
  • Dao.java package com.imooc.oa.dao; import com.imooc.oa.entity.Department; import org.springframework.stereotype.Repository; import java.util.List; @Repository("departmentDao") public interface Departm...
  • Android DAO

    千次阅读 2014-04-18 18:30:38
    DAO(Data Access Object) 数据库操作对象设计模式的简称,是javaEE中MVC设计模式中Model层中的用于对数据库的访问的那一层。DAO包中包括五个重要的部分,分别如下: 1)数据库连接类 2)VO类,即实体类,每一个类...
  • 泛型DAO

    2014-07-29 11:39:22
    泛型DAO标准: 在公司里面,用的基本上都是泛型DAO,实现了代码的重用性。 目录结构如下:
  • spring dao层注解_Spring– DAO和服务层

    千次阅读 2020-06-04 23:45:52
    spring dao层注解 欢迎来到Spring教程的第三部分。 在这一部分中,我们将继续编写Timesheet应用程序,这次我们将实现DAO层,业务服务并编写一些测试。 在上一部分中,我们定义了GenericDao接口,该接口告诉我们需要...
  • DAO与Service

    千次阅读 2018-11-26 19:50:38
    DAO层: DAO层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表的增删改查,也就是说某个DAO一定是和数据库的某一张表一一对应的,其中封装了增删改查基本操作,建议...
  • 使用MyBatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper动态代理开发方法。原始Dao开发中存在以下问题: Dao方法体存在重复代码:通过SqlSessionFactory创建SqlSession,调用SqlSession的数据库操作方法...
  • DAO设计模式

    万次阅读 2018-06-11 21:13:50
    DAO(Data Access Object) 数据访问对象是一个面向对象的数据库接口,它显露了 Microsoft Jet 数据库引擎(由 Microsoft Access 所使用),并允许 Visual Basic 开发者通过 ODBC 像直接连接到其他数据库一样,直接...
  • Mybatis-Dao层开发之原始dao

    千次阅读 2016-12-01 21:41:55
    使用dao接口开发Dao层程序,只需要编写Dao接口与其对应实现类即可。 代码如下: 相关配置文件 底层搭建:详见 http://blog.csdn.net/qq_28796345/article/details/53402808 配置文件:详见 ... ...
  • DAO基类

    千次阅读 2016-04-18 14:34:35
    package com.lz.ctsframework.core.support; import java.util.List; import org.apache.ibatis.annotations.Param; ... * 类说明:dao基类  *   *  * 详细描述:  *   * @author liuhuanchao  * @sin
  • DMS DAO原型--ServiceDAO的findAll方法

    千次阅读 2018-09-30 16:43:03
    DAODAO(Data Access Object) 数据访问对象 是一个面向对象的数据库接口.DAO的设计原则是实现数据访问和业务逻辑的分离,封装最基本的增删改查方法(curd). 1.DMS DAO原型——ServiceDAO的findAll方法 案例一:如何使用...
  • JDBC中Dao

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

    千次阅读 2019-01-02 10:25:05
    dao设计模式简介 dao全称是data access object,数据库访问对象,主要的功能就是用于进行数据操作的,在程序的标准开发架构中属于数据层的操作 企业分层架构 客户层:因为现在都采用了B/S开发架构,所以一般都使用...
  • 什么是DAO

    千次阅读 2017-06-20 17:23:37
    什么是DAO DAO是Data Access Object数据访问接口,数据访问:故名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。 DAO的功能: 1. DAO用来封装Data Source的..就比如,Connection conn = DAOFacotry....
  • DAO模式小结

    2019-10-18 15:11:28
    DAO设计模式 DAO(Database Access Object 数据库访问对象) 为了降低耦合性,提出了DAO封装数据库操作的设计模式。 它可以实现业务逻辑与数据库访问相分离。相对来说,数据库是比较稳定的,其中DAO组件依赖于数据库...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 89,639
精华内容 35,855
关键字:

dao