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对象的)。
    
    展开全文
  • 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接口...

    DAO模式


    1)什么是Dao

    Data Access Object(数据存取对象)

    位于业务逻辑和持久化数据之间

    实现对持久化数据的访问

    2DAO模式的作用?

    隔离业务逻辑代码和数据访问代码

    隔离不同数据库的实现


    3DAO模式的组成部分

    DAO接口

    DAO实现类

    实体类

    数据库连接和关闭工具类


    4)编写DAO程序


    跟朋友写的一个玩具项目,一个模拟的学习平台,提供注册、登陆、点赞、收藏、评论、积分、签到等诸多功能,采用了DAO模式,可以参考看一下。

    传送门:https://github.com/ZzzzZzreal/StudyPlatform

    展开全文
  • Java中DAO层、Service层和Controller层的区别

    万次阅读 多人点赞 2018-09-03 09:47:07
    DAO层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表的增删改查,也就是说某个DAO一定是和数据库的某一张表一一对应的,其中封装了增删改查基本操作,建议DAO只做...
  • 对于后端开发者来说,经常跟数据库打交道,hibernate mybatis是常用是的持久化层,mybatis简单、灵活,易上手,但要写大量的sql;Hibernate太复杂,但对...此DAO层正是由此而来,基于Hibernate开发,解决小sql的问...
  • Java DAO、Service、web理解之DAO

    千次阅读 2019-06-08 21:13:45
    DAO 模式 DAO (Data Access Object数据存取对象)是指位于业务逻辑和持久化数据之间实现对持久化数据的访问。通俗来讲,就是将数据库操作都封装起来。(接口设计+SQL编写,不涉及业务代码) DAO 包含的模块: dao ...
  • DAO模式的好处是数据访问和业务逻辑分离,便于数据维护,业务逻辑不需要了解访问细节。 DAO的组成: 1.DatabaseConnection:负责打开和关闭数据库; 2.VO:包含属性以及其getter和setter方法; 3.DAO:定义操作...
  • 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...
  • DAO工厂类

    2019-02-03 15:08:25
    DAO工厂类 DAO工厂类是返回一个DAO实现类的一个实例。 范例: 定义DAO工厂类,代码如下: commodityDAOFactory.java package com.MyJavaBean.text; public class commodityDAOFactory { public static ...
  • Android DAO

    千次阅读 2014-04-18 18:30:38
    DAO(Data Access Object) 数据库操作对象设计模式的简称,是javaEE中MVC设计模式中Model层中的用于对数据库的访问的那一层。DAO包中包括五个重要的部分,分别如下: 1)数据库连接类 2)VO类,即实体类,每一个类...
  • 程序员需要写dao接口和dao实现类。 需要向dao实现类中注入SqlSessionFactory,在方法体内通过SqlSessionFactory创建SqlSession。 二、dao接口 新建dao接口,代码如下: package cn.sunft.mybatis.dao; import ...
  • 泛型DAO

    2014-07-29 11:39:22
    泛型DAO标准: 在公司里面,用的基本上都是泛型DAO,实现了代码的重用性。 目录结构如下:
  • DAO设计模式

    万次阅读 2018-06-11 21:13:50
    DAO(Data Access Object) 数据访问对象是一个面向对象的数据库接口,它显露了 Microsoft Jet 数据库引擎(由 Microsoft Access 所使用),并允许 Visual Basic 开发者通过 ODBC 像直接连接到其他数据库一样,直接...
  • 使用MyBatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper动态代理开发方法。原始Dao开发中存在以下问题: Dao方法体存在重复代码:通过SqlSessionFactory创建SqlSession,调用SqlSession的数据库操作方法...
  • DAO分层

    2013-09-14 14:11:10
    客户端—>表示层—>业务层—>数据层—>数据库 ...Service接口:服务层,对DAO层的进一步封装,客户端直接从Service层获取服务,不必知道DAO层对底层数据的具体操作; Service实现类:实现Service接口;
  • DAO与Service

    2018-11-26 19:50:38
    DAO层: DAO层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表的增删改查,也就是说某个DAO一定是和数据库的某一张表一一对应的,其中封装了增删改查基本操作,建议...
  • Dao Jet数据库引擎

    2015-09-22 13:51:57
    这是从VC6光盘提取的,遇到“无法对DAO/Jet db引擎进行初始化”问题的伙计们,可以下载此Dao Jet数据库引擎重新安装即可。
  • JDBC中Dao

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

    千次阅读 2016-12-01 21:41:55
    使用dao接口开发Dao层程序,只需要编写Dao接口与其对应实现类即可。 代码如下: 相关配置文件 底层搭建:详见 http://blog.csdn.net/qq_28796345/article/details/53402808 配置文件:详见 ... ...
  • dao设计模式简介 dao全称是data access object,数据库访问对象,主要的功能就是用于进行数据操作的,在程序的标准开发架构中属于数据层的操作 企业分层架构 客户层:因为现在都采用了B/S开发架构,所以一般都使用...
  • dao模式总结

    千次阅读 2017-05-05 19:31:09
    一:DAO模式: 1.定义: 为解决业务代码和数据访问代码的紧耦合给修改和维护代码带来的不便,推荐使用DAO模式封装和JDBC。 2.DAO模式组成部分: ①DAO接口 ②DAO实现类 ③实体类 ...
  • spring dao层注解 欢迎来到Spring教程的第三部分。 在这一部分中,我们将继续编写Timesheet应用程序,这次我们将实现DAO层,业务服务并编写一些测试。 在上一部分中,我们定义了GenericDao接口,该接口告诉我们需要...
  • 什么是DAO

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

    2018-04-13 18:27:25
    DAO(Data Access Object) 数据访问对象是一个面向对象的数据库接口,它显露了 Microsoft Jet 数据库引擎(由 Microsoft Access 所使用),并允许 Visual Basic 开发者通过 ODBC 像直接连接到其他数据库一样,直接...

空空如也

1 2 3 4 5 ... 20
收藏数 80,171
精华内容 32,068
关键字:

dao