Java之dao模式详解及代码示例

yizhihongxing

Java 之 DAO 模式详解及代码示例

什么是 DAO 模式

DAO,即 Data Access Object,数据访问对象,是一种数据访问的设计模式。它的主要目的是将数据存储到持久化层(通常是数据库)并从数据库中检索数据。这样,就可以将业务逻辑层与数据访问层分离,从而提高系统的可维护性和可重用性。

DAO 模式主要包含以下几个组件:

  • 持久层接口 (DAO):定义访问数据库所需的方法。
  • 持久层实现类:实现持久层接口中的方法,对数据库进行读写。
  • 实体对象:代表数据在系统中的一个实体,对应数据库中的一张表。
  • 数据库连接:用于建立与数据库的连接。

DAO 模式的优点

使用 DAO 模式的主要优点如下:

  • 分离了业务逻辑与数据层:DAO 模式的主要目的是将业务逻辑层与数据访问层分离,从而提高系统的可维护性和可重用性。
  • 简化了代码:将数据访问逻辑与业务逻辑分离,可以让系统更容易维护和阅读。
  • 提高了数据访问的安全性:通过 DAO 接口限制了对数据库的操作,避免了直接访问数据库的不安全情况发生。

DAO 模式的示例

这里我们来看两个简单的示例来说明 DAO 模式的使用。

示例一:用户 DAO 接口

// 用户 DAO 接口
public interface UserDao {

    // 用户登录验证
    User login(String userName, String password);

    // 添加一条用户记录到数据库
    boolean addUser(User user);

    // 根据用户ID删除对应记录
    boolean deleteUserById(String userId);
}

示例二:用户 DAO 实现

// 用户 DAO 实现
public class UserDaoImpl implements UserDao {

    private Connection connection;

    public UserDaoImpl(Connection connection) {
        this.connection = connection;
    }

    @Override
    public User login(String userName, String password) {
        String sql = "SELECT * FROM user WHERE user_name = ? AND password = ?";
        PreparedStatement ps = null;
        ResultSet rs = null;
        User user = null;

        try {
            ps = this.connection.prepareStatement(sql);
            ps.setString(1, userName);
            ps.setString(2, password);
            rs = ps.executeQuery();

            if (rs.next()) {
                user = new User();
                user.setId(rs.getInt("id"));
                user.setUserName(rs.getString("user_name"));
                user.setPassword(rs.getString("password"));
                user.setRealName(rs.getString("real_name"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (rs != null) {
                    rs.close();
                }

                if (ps != null) {
                    ps.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        return user;
    }

    @Override
    public boolean addUser(User user) {
        String sql = "INSERT INTO user (user_name, password, real_name) VALUES (?, ?, ?)";
        PreparedStatement ps = null;
        int result = 0;

        try {
            ps = this.connection.prepareStatement(sql);
            ps.setString(1, user.getUserName());
            ps.setString(2, user.getPassword());
            ps.setString(3, user.getRealName());
            result = ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (ps != null) {
                    ps.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        return result > 0;
    }

    @Override
    public boolean deleteUserById(String userId) {
        String sql = "DELETE FROM user WHERE id = ?";
        PreparedStatement ps = null;
        int result = 0;

        try {
            ps = this.connection.prepareStatement(sql);
            ps.setString(1, userId);
            result = ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (ps != null) {
                    ps.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        return result > 0;
    }
}

在 DAO 实现中,我们主要是实现了 UserDao 接口中定义的方法,来对数据库进行读写。

结语

通过上述示例,我们可以看到 DAO 模式的使用,将业务逻辑层与数据访问层分离,代码可读性更高,易于维护,也更加安全。对于大型的应用系统而言,使用 DAO 模式可以有效地提高应用程序的可扩展性和可维护性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java之dao模式详解及代码示例 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Tomcat 是如何管理Session的方法示例

    Tomcat 是一个流行的 Java Web 服务器,可以通过 Session 技术实现 Web 应用程序的状态管理。下面我们来详细讲解 Tomcat 是如何管理 Session 的方法示例。 1. 使用 HTTPSession 接口 Tomcat 通过内置的 HTTPSession 接口来管理 Session。若要在应用程序中使用 Session,可以通过…

    Java 2023年5月19日
    00
  • 2021年最新Redis面试题汇总(3)

    注意:为了更好的呈现Markdown格式,下文中有些地方的符号用中文描述而不是直接使用符号。但这并不影响文本的正确性。 2021年最新Redis面试题汇总(3)——完整攻略 题目概述 本文是“2021年最新Redis面试题汇总(3)”的完整攻略。本篇文章共包括14个Redis面试题,均为比较高级的面试题,适用于Redis高级岗位的面试。 Redis是目前非常…

    Java 2023年5月19日
    00
  • SSH框架实现表单上传图片实例代码

    下面我会详细讲解 “SSH框架实现表单上传图片实例代码”的完整攻略。 1. 前期准备工作 在进行表单上传图片代码实现之前,你需要了解以下几个重要的知识点: SSH框架的基本概念和使用方法 MultipartFile类型的文件上传方式 前端表单的设计和提交 2. 后台代码实现 2.1. 建立控制器 首先我们需要在后台建立一个控制器来接收前端传来的文件并完成上传…

    Java 2023年5月20日
    00
  • springboot与springmvc基础入门讲解

    让我来为您详细讲解“springboot与springmvc基础入门讲解”的完整攻略。 简介 Spring Boot是Spring Framework的一个扩展框架,它为Spring开发者提供了更快的开发体验。Spring MVC是一个经典的MVC框架,负责接收HTTP请求并将其转换为相应的处理程序,通常由Controller和Model组成。 本文将对Sp…

    Java 2023年5月15日
    00
  • java list与数组之间的转换详细解析

    Java List与数组之间的转换详细解析 在Java中,List是常用的数据结构之一,而数组也是Java中常用的数据结构。我们有时候需要在它们之间进行转换,本文将详细讲解Java List与数组之间的转换攻略。 1. 将List转换为数组 将List转换成数组需要注意以下几点: 首先,需要确定要转换的List的元素类型; 其次,需要创建一个与List元素类…

    Java 2023年5月26日
    00
  • 详解Java停止线程的四种方法

    详解Java停止线程的四种方法 前言 在Java程序设计中,我们常常需要在一定条件下停止线程的执行,本文将介绍Java中常用的四种停止线程的方法。 方式一:使用标志位 在很多情况下,我们使用一个标志位来控制线程是否应该停止运行。当标志位为真时,线程运行继续;当标志位为假时,线程运行结束。具体代码如下: public class StopThread impl…

    Java 2023年5月18日
    00
  • 浅谈JDK8中的Duration Period和ChronoUnit

    下面我将详细讲解一下关于“浅谈JDK8中的Duration Period和ChronoUnit”的攻略。 什么是Duration和Period? 在Java8中,Duration和Period是两个时间间隔的类。它们可以用于各种时间操作,比如计算两个日期之间的差异,计算一个操作的持续时间等。 Duration类 Duration类表示时间上的持续时间,它可以…

    Java 2023年5月20日
    00
  • 一文吃透Elasticsearch

    本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~ Github地址 如果访问不了Github,可以访问gitee地址。 gitee地址 跟大家分享Elastic…

    Java 2023年4月17日
    00
合作推广
合作推广
分享本页
返回顶部