通过代理类实现java连接数据库(使用dao层操作数据)实例分享

下面我就来详细讲解一下如何通过代理类实现Java连接数据库,并使用DAO层操作数据。

1. 环境准备

在开始操作之前,需要准备以下环境:

  • JDK
  • MySQL数据库
  • Eclipse或IntelliJ IDEA等Java开发工具
  • JDBC驱动包:MySQL的JDBC驱动包

2. 创建数据库

首先,需要创建一个名为“test”的数据库。可以使用MySQL命令行或可视化工具创建数据库,并创建一个名为“user”的数据表,同时插入一些数据作为示例。

示例代码如下:

CREATE DATABASE test;

USE test;

CREATE TABLE user (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20),
    age INT,
    address VARCHAR(50)
);

INSERT INTO user (name, age, address) VALUES ('Tom', 20, 'Beijing');
INSERT INTO user (name, age, address) VALUES ('Jerry', 22, 'Shanghai');
INSERT INTO user (name, age, address) VALUES ('Alice', 18, 'Guangzhou');
INSERT INTO user (name, age, address) VALUES ('Bob', 25, 'Hangzhou');

3. 创建Java项目

接下来,我们需要在开发工具中创建一个Java项目,并引入MySQL的JDBC驱动包。

4. 编写代理类

接下来,我们需要编写一个代理类来连接数据库,并执行数据操作。这里我们使用DAO(Data Access Object)模式,即创建一个UserDao接口和其实现类UserDaoImpl。

示例代码如下:

package com.example.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.example.model.User;
import com.example.util.DBUtil;

public class UserDaoImpl implements UserDao {

    @Override
    public List<User> findAll() {
        List<User> userList = new ArrayList<>();
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            conn = DBUtil.getConnection(); // 获取数据库连接
            String sql = "SELECT * FROM user";
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();
            while (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                int age = rs.getInt("age");
                String address = rs.getString("address");
                User user = new User(id, name, age, address);
                userList.add(user);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DBUtil.close(conn, pstmt, rs); // 关闭数据库连接
        }
        return userList;
    }

}

这个代理类的作用是查询数据库中的所有用户信息。

在代理类中,我们通过调用DBUtil类的getConnection()方法获取数据库连接,然后通过PreparedStatement执行SQL查询语句,最后封装成User对象并添加到List集合中。

5. 编写数据库连接工具类

在上一步中,我们使用了一个DBUtil类来获取数据库连接和关闭资源,下面是该类的实现代码。这里我们使用JDBC的方式连接数据库。

package com.example.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBUtil {

    private static final String URL = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&characterEncoding=utf-8";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "123456";

    static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL, USERNAME, PASSWORD);
    }

    public static void close(Connection conn, PreparedStatement pstmt, ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (pstmt != null) {
            try {
                pstmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

DBUtil类中定义了一个静态常量URL,用于存放数据库连接的URL地址,USERNAME和PASSWORD分别为连接数据库的用户名和密码。

在DBUtil中,我们使用静态代码块来加载MySQL的JDBC驱动程序,通过getConnection()方法获取数据库连接对象,使用close()方法关闭数据库连接对象、Statement对象和ResultSet对象。

6. 测试代码

最后,我们来编写测试代码,来验证代理类是否正常工作,能够从数据库中查询出数据并输出到控制台。

package com.example.test;

import java.util.List;

import com.example.dao.UserDao;
import com.example.dao.UserDaoImpl;
import com.example.model.User;

public class Test {

    public static void main(String[] args) {
        UserDao userDao = new UserDaoImpl();
        List<User> userList = userDao.findAll();
        for (User user : userList) {
            System.out.println(user);
        }
    }

}

这段代码中,我们通过UserDaoImpl类的实例来查询所有用户信息,并输出到控制台。

运行该代码后,将输出以下结果:

User [id=1, name=Tom, age=20, address=Beijing]
User [id=2, name=Jerry, age=22, address=Shanghai]
User [id=3, name=Alice, age=18, address=Guangzhou]
User [id=4, name=Bob, age=25, address=Hangzhou]

至此,我们就成功地使用代理类实现Java连接数据库,并使用DAO层操作数据。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:通过代理类实现java连接数据库(使用dao层操作数据)实例分享 - Python技术站

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

相关文章

  • MyBatis自定义映射关系和关联查询实现方法详解

    MyBatis自定义映射关系和关联查询实现方法详解 简介 MyBatis是一款支持自定义SQL、存储过程和高级映射的持久层框架。在开发过程中,有时需要在查询结果中嵌套查询结果,或者查询结果中的列与实体类中的属性名不匹配。这就需要用到MyBatis自定义映射关系和关联查询。 MyBatis自定义映射关系 MyBatis中自定义映射关系可以通过ResultMap…

    Java 2023年5月20日
    00
  • 深入介绍Java对象初始化

    深入介绍Java对象初始化 Java对象初始化指的是在创建对象后对其进行初始化的过程。其中,对象初始化包含了对象成员变量的初始化和执行构造器方法的操作。 对象成员变量的初始化 对象成员变量(非静态成员变量)可以在创建对象之前或者在构造器方法中进行初始化。其中,非静态成员变量可以归为以下两类: 未经初始化的成员变量 在Java中,成员变量不会自动初始化。如果一…

    Java 2023年5月26日
    00
  • SpringMVC数据页响应ModelAndView实现页面跳转

    下面是详细讲解“SpringMVC数据页响应ModelAndView实现页面跳转”的完整攻略: 1. ModelAndVew概述 在SpringMVC中,Controller层处理完业务逻辑后,需要将处理好的数据返回到前端页面进行展示,而ModelAndView就是一个很好的方案。ModelAndView是SpringMVC中的一个类,它用来处理Contro…

    Java 2023年6月15日
    00
  • 详解JDK自带javap命令反编译class文件和Jad反编译class文件(推荐使用jad)

    详解JDK自带javap命令反编译class文件和Jad反编译class文件 什么是javap命令和Jad反编译? javap命令是JDK自带的反编译工具,用于反编译class文件。 Jad是一款免费的Java反编译器,可以将class文件反编译为Java源代码。 使用javap命令反编译class文件 打开命令行工具,进入.class文件所在的目录。 键入…

    Java 2023年5月19日
    00
  • Java面试题冲刺第八天–Spring框架2

    Java面试题冲刺第八天–Spring框架2 本文将详细讲解Java面试题冲刺第八天–Spring框架2的完整攻略,包括Spring框架的概述、Spring框架的核心模块、Spring框架的优点、Spring框架的示例说明等。 Spring框架的概述 Spring框架是一个轻量级的Java开发框架,它提供了一系列的工具和框架,用于简化Java开发过程中的…

    Java 2023年5月18日
    00
  • maven导入本地仓库jar包,报:Could not find artifact的解决

    当我们在使用Maven构建项目时,有时候会遇到Maven导入本地仓库jar包时出现“Could not find artifact”的错误,这可能是因为Maven没有将该jar包添加到本地仓库中。 以下是解决该问题的完整攻略: 1.通过命令行将jar包安装到本地仓库 首先,我们需要打开命令行工具,进入到jar包所在的文件夹。然后,使用以下命令将该jar包安装…

    Java 2023年5月20日
    00
  • java中map和对象互转工具类的实现示例

    下面是”Java中Map和对象互转工具类的实现示例”的详细攻略: 1. 什么是Map和对象互转工具类? Map和对象互转工具类是Java编程中的一种实用工具,用于实现Map结构与Java对象之间的转换,便于数据的处理和传递。通过Map与Java对象之间的相互转换,我们可以更加方便地对数据进行处理和传递。 2. 如何实现Map和对象互转工具类? 我们可以使用反…

    Java 2023年5月26日
    00
  • 解决Jquery下拉框数据动态获取的问题

    当使用 jQuery 实现下拉框时,我们可能需要动态获取数据来填充下拉框选项。如果不处理好动态获取数据的方法,就会导致下拉框无法成功渲染出数据,或渲染出错误的数据。 以下是解决 Jquery 下拉框数据动态获取的问题的完整攻略,包含两个示例: 1. ajax方式获取数据 一种比较常见的方式是使用 ajax 请求来获取数据。我们可以使用 jQuery 的 $.…

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