Java高级Day52-BasicDAO

138.BasicDao

基本说明:

  1. DAO:data access object 数据访问对象

  2. 这样的通用类,称为 BasicDao,是专门和数据库交互的,即完成对数据库(表)的crud操作

  3. 在BasicDao 基础上,实现一张表对应一个Dao,更好的完成功能,比如 Customer表

代码实现:

复制代码
public class BasicDao<T> { //泛型指定具体的类型
    private QueryRunner qr = new QueryRunner();
    //开发通用的dml发明合法,针对任意的表
    public int update(String sql, Object... parameters) {
        Connection connection = null;
        try{
            connection = JDBCUtilsByDruid.getConnection();
            int update = qr.update(connection, sql, parameters);
            return update;
        } catch (SQLException e) {
            throw new RuntimeException(e);//将编译异常转成运行异常
        }finally {
            JDBCUtilsByDruid.close(null,null,connection);
        }
    }
    //返回多个对象(即查询的结果是多行的),针对任意表
    public List<T> queryMulti(String sql, Class<T> clazz,Object... parameters) {
        Connection connection = null;
        try{
            connection = JDBCUtilsByDruid.getConnection();
            return qr.query(connection, sql, new BeanListHandler<T>(clazz), parameters);
​
        } catch (SQLException e) {
            throw new RuntimeException(e);//将编译异常转成运行异常
        }finally {
            JDBCUtilsByDruid.close(null,null,connection);
        }
    }
​
    //查询单行结果的通用方法
    public T querySingle(String sql, Class<T> clazz, Object... parameters) {
        Connection connection = null;
        try{
            connection = JDBCUtilsByDruid.getConnection();
            return qr.query(connection, sql, new BeanHandler<T>(clazz), parameters);
        } catch (SQLException e) {
            throw new RuntimeException(e);//将编译异常转成运行异常
        }finally {
            JDBCUtilsByDruid.close(null,null,connection);
        }
    }
​
    //查询单行单列的方法,返回单值的方法
    public Object queryScalar(String sql, Object... parameters) {
        Connection connection = null;
        try{
            connection = JDBCUtilsByDruid.getConnection();
            return qr.query(connection, sql, new ScalarHandler<>(), parameters);
        } catch (SQLException e) {
            throw new RuntimeException(e);//将编译异常转成运行异常
        }finally {
            JDBCUtilsByDruid.close(null,null,connection);
        }
    }
}

测试ActorDAO 对 actor表的crud操作

复制代码
public void testActorDAO() {
    ActorDAO actorDAO = new ActorDAO();
    //1.查询
    List<Actor> actors = actorDAO.queryMulti("select * from actor where id >= ?",Actor.class, 1);
    System.out.println("===查询结果===");
    for(Actor actor : actors) {
        System.out.println(actor);
    }
    
    //2.查询单行记录
    Actor actor = actorDAO.querySingle("select * from actor where id = ?",Actor.class, 1);
    System.out.println("===查询单行结果===");
    System.out.println(actor);
    }
​
    //3.查询单行单列
    Object o = actorDAO.queryScalar("select name from actor where id = ?",6);
    System.out.println("===查询单行单列值===");
    System.out.println(o)
        
    //4. dml操作 insert,update,delete
    int update = actorDAO.update("insert into actor values(null,?,?,?,?)","张无忌","男","2000-1-1","111");
    System.out.println(update > 0 ? "执行成功" : "执行没有影响表");
}
相关推荐
huaqianzkh6 小时前
WinForm C#:循环修改控件UI闪烁卡顿?SuspendLayout / ResumeLayout 与 BeginUpdate 优化
开发语言·ui·c#
杨凯凡6 小时前
Spring Boot 链路追踪实战:Micrometer、TraceId 与异步线程上下文传播
java·spring boot·后端
计算机毕设定制辅导-无忧学长6 小时前
《基于Spring Boot的迷游哈游戏综合服务平台的开发》
java·vue.js·spring boot·mysql·迷游哈游戏综合服务平台
非优秀程序员15 小时前
第04章 邮箱大战,163 与 QQ 的暗战|《互联网产品恩仇录》
java·vue.js·架构
知已难寻16 小时前
Docker 入门:容器技术与 Docker 基础
java·运维·服务器·docker·云原生·容器
沐晓时光16 小时前
C语言入门,内存函数知识讲解
c语言·开发语言
文丑颜不良啊18 小时前
LeetCode2481~2500题目解析
java·leetcode
Flynn Liang19 小时前
同一需求三套写法:用 Spring AI、LangChain4j、AgentScope Java 各实现一个带工具调用的 RAG 助手(实战对比)
java·人工智能·大模型·架构设计·spring ai·langchain4j·agentscope
聪明的笨猪猪19 小时前
实际工程问题:AI 生成 Spring Cache(@Cacheable / @CachePut / @CacheEvict)缓存注解踩坑
java·经验分享·面试·ai编程
愿有所息20 小时前
记一次 ARM64 + JDK8 上 fastjson2 的诡异数据错乱
java