【JDBC】BasicDAO使用指南

简介: 4.测试DAO类开发通过BasicDAO的使用,DML和查询语句的使用将会变得十分方便!🧂


1.BasicDAO引入



BasicDAO的示意图:🙌




2.BasicDAO的开发


import jdbc.DruidJdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
/**
 * 开发BasicDAO,是其他DAO的父类
 */
public class BasicDAO<T> {
    private QueryRunner qr = new QueryRunner();
    /**
     * 开发通用的DML方法
     *
     * @param sql        待执行的sql语句
     * @param parameters 参数列表
     * @return 受影响的行数
     */
    public int update(String sql, Object... parameters) {
        Connection connection = null;
        try {
            connection = DruidJdbcUtils.getConnection();
            int update = qr.update(connection, sql, parameters);
            return update;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            DruidJdbcUtils.close(null, null, connection);
        }
    }
    /**
     * 查询多条结果
     *
     * @param sql        待执行的sql语句
     * @param clazz      一个类的Class对象
     * @param parameters 参数列表
     * @return 查询到的结果集合
     */
    public List<T> queryMulti(String sql, Class<T> clazz, Object... parameters) {
        Connection connection = null;
        try {
            connection = DruidJdbcUtils.getConnection();
            return qr.query(connection, sql, new BeanListHandler<T>(clazz), parameters);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            DruidJdbcUtils.close(null, null, connection);
        }
    }
    /**
     * 查询单行结果
     *
     * @param sql        待执行的sql语句
     * @param clazz      一个类的Class对象
     * @param parameters 参数列表
     * @return 查询到的数据库单行结果
     */
    public T querySingle(String sql, Class<T> clazz, Object... parameters) {
        Connection connection = null;
        try {
            connection = DruidJdbcUtils.getConnection();
            return qr.query(connection, sql, new BeanHandler<T>(clazz), parameters);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            DruidJdbcUtils.close(null, null, connection);
        }
    }
    /**
     * 返回单行单列结果
     * @param sql 待执行的sql语句
     * @param parameters 参数列表
     * @return 查询到的单行单列结果
     */
    public Object queryScalar(String sql, Object... parameters) {
        Connection connection = null;
        try {
            connection = DruidJdbcUtils.getConnection();
            return qr.query(connection, sql, new ScalarHandler<>(), parameters);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            DruidJdbcUtils.close(null, null, connection);
        }
    }
}


3.实例对象的DAO类开发


开发实例对象DAO类的必要性是:方便日后更复杂的数据库查询情况:


import jdbc.domain.User;
/**
 * User类的DAO
 * 根据业务需求的User类的特有的方法
 */
public class UserDAO extends BasicDAO<User>{
}


4.测试DAO类开发


通过BasicDAO的使用,DML和查询语句的使用将会变得十分方便!🧂


import jdbc.dao.UserDAO;
import jdbc.domain.User;
import org.junit.jupiter.api.Test;
import java.util.List;
/**
 * DAO测试类
 */
public class TestDAO {
    /**
     * 测试UserDAO
     */
    @Test
    public void testUserDAO() {
        UserDAO userDAO = new UserDAO();
        // 查询
        List<User> list = userDAO.queryMulti("select * from user where id >= ?", User.class, 100);
        for (User user : list) {
            System.out.println(user);
        }
        User user = userDAO.querySingle("select * from user where id = ?", User.class, 100);
        System.out.println(user);
        Object o = userDAO.queryScalar("select username from user where id = ?", 20);
        System.out.println(o);
        int update = userDAO.update("delete from user where id = ?", 66);
        System.out.println(update);
    }
}
目录
相关文章
|
1月前
|
SQL druid Java
JDBC和数据库连接池-两个工具类-JDBCUtilsByDruid和BasicDAO
JDBC和数据库连接池-两个工具类-JDBCUtilsByDruid和BasicDAO
30 0
|
SQL druid Java
JDBC BasicDAO详解(通俗易懂)
JDBC 第七节 详解BasicDAO 通俗易懂!
152 0
|
1月前
|
Java 关系型数据库 MySQL
mysql5.7 jdbc驱动
遵循上述步骤,即可在Java项目中高效地集成MySQL 5.7 JDBC驱动,实现数据库的访问与管理。
124 1
|
6月前
|
Java 关系型数据库 数据库连接
实时计算 Flink版操作报错之在使用JDBC连接MySQL数据库时遇到报错,识别不到jdbc了,怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
86 0
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
37 0
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
46 0
|
3月前
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
55 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
|
3月前
|
SQL Java 关系型数据库
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
125 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
|
3月前
|
前端开发 关系型数据库 MySQL
com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver 的区别
这篇文章讨论了`com.mysql.jdbc.Driver`和`com.mysql.cj.jdbc.Driver`两个MySQL驱动类的区别,指出`com.mysql.jdbc.Driver`适用于MySQL 5的`mysql-connector-java`版本,而`com.mysql.cj.jdbc.Driver`适用于MySQL 6及以上版本的`mysql-connector-java`。文章还提到了在实际使用中如何根据MySQL版本选择合适的驱动类。
com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver 的区别