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

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日

相关文章

  • 详解JAVA高质量代码之数组与集合

    详解JAVA高质量代码之数组与集合 一、前言 在开发Java软件时,为了提高代码的质量和可维护性,有必要了解常用的数据结构,数组和集合是其中非常重要和常用的两种。 本篇文章将详细讲解Java中数组和集合的特点、使用场景、注意事项以及实例演示,希望能对大家有所帮助。 二、数组 1. 特点 数组是一组有序的数据集合。 数组中的数据类型必须相同。 数组长度固定,一…

    Java 2023年5月26日
    00
  • java实现接口的典型案例

    Java使用接口来定义接口规范和实现类之间的约定。接口指定的方法是在实现类中要实现的。下面是Java实现接口的典型案例的完整攻略。 1. 定义接口 首先,在Java中定义接口使用interface关键字。接口定义了一堆方法,但是不会实现这些方法。下面的截图是一个简单的MyInterface接口的例子。 public interface MyInterface…

    Java 2023年5月18日
    00
  • MyBatis持久层框架的用法知识小结

    MyBatis持久层框架的用法知识小结 MyBatis是一款优秀的持久化框架,通过XML或注解的方式实现了对象关系映射(ORM)。MyBatis主要解决了JDBC编程的繁琐和易错的问题,提供了诸如对象映射、缓存等一系列优秀的特性。下面将对MyBatis的使用进行详细介绍。 1. Maven依赖 在使用MyBatis前,需要在Maven项目中引入依赖。 &lt…

    Java 2023年5月19日
    00
  • SpringCloud使用Feign实现动态路由操作

    Spring Cloud是一个基于Spring Boot开发的微服务框架,其中Feign作为一个轻量级的HTTP客户端,可以与Eureka、Ribbon等组件实现服务间的通讯,同时,Feign还提供了非常方便的方式进行服务之间的调用。下面,我将详细讲解如何在Spring Cloud中使用Feign进行动态路由操作。 一、添加依赖 在Spring Cloud项…

    Java 2023年5月20日
    00
  • 一天吃透操作系统八股文

    操作系统的四个特性? 并发:同一段时间内多个程序执行(与并行区分,并行指的是同一时刻有多个事件,多处理器系统可以使程序并行执行) 共享:系统中的资源可以被内存中多个并发执行的进线程共同使用 虚拟:通过分时复用(如分时系统)以及空分复用(如虚拟内存)技术把一个物理实体虚拟为多个 异步:系统进程用一种走走停停的方式执行,(并不是一下子走完),进程什么时候以怎样的…

    Java 2023年4月17日
    00
  • java中类和对象的知识点总结

    Java 是一种面向对象的编程语言,类和对象是其中最重要的概念之一,下面是 Java 中类和对象的知识点总结的完整攻略。 类与对象的基本概念 在 Java 中,类是一种抽象的概念,其用于描述某一类事物的共同属性和行为。而对象则是实际存在的、具有一定状态和行为的个体,是类的一个实例化结果。 定义类 在 Java 中,定义一个类需要使用 class 关键字,类名…

    Java 2023年5月26日
    00
  • Java Cookie与Session实现会话跟踪详解

    Java Cookie与Session实现会话跟踪详解 本文将详细介绍Java中Cookie与Session的使用方法,以及它们实现会话跟踪的原理。 会话跟踪简介 在Web应用程序中,会话跟踪是指识别与跟踪用户状态的过程,主要是为了维护用户与应用程序之间的交互状态。常见的应用场景包括登录、购物车、用户偏好设置等等。 会话跟踪通常是通过Cookie或Sessi…

    Java 2023年5月20日
    00
  • 基于springboot 长轮询的实现操作

    基于Spring Boot长轮询的实现操作 长轮询是一种实现实时通信的技术,它可以在客户端和服务器之间建立一个持久的连接,以便服务器可以在有新数据时立即向客户端推送。在本文中,我们将讲解如何使用Spring Boot实现长轮询,包括两个示例。 示例一:使用Spring WebFlux实现长轮询 Spring WebFlux是Spring Framework …

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