BasicDao的使用

2023-10-30

本次博客带领大家学习BasicDao的使用。

BasicDao的基本说明

  1. DAO:data access object数据访问对象。
  2. 这样的通用类,称为BasicDao,是专门和数据库交互的,即完成对数据库(表)的crud操作。
  3. 在BasicDao 的基础上,实现一张表对应一个Dao,更好的完成功能,比如Customer表-Customer.java类(javabean)-Customer.java。

BasicDAO 应用实例

  1. dao_.utils //工具类
public class JDBCUtilsByDruid {
    private  static DataSource ds;

    //在静态代码块完成 ds初始化
    static {
        Properties properties = new Properties();
        try {
            properties.load(new FileInputStream("src\\druid.properties"));
            ds = DruidDataSourceFactory.createDataSource(properties);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //编写getConnection 方法
    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }

    //关闭连接,在数据库连接池技术中,close不是真的断掉连接,而是把使用的Connection对象放回连接池
    public static void close(ResultSet resultSet, Statement statement,Connection connection){
        try {
            if (resultSet != null){
                resultSet.close();
            }
            if (statement !=null){
                statement.close();
            }
            if (connection !=null){
                connection.close();
            }
        } catch (SQLException e) {
            throw  new RuntimeException(e);
        }
    }
}
  1. dao_.domain //javabean
public class Actor {
    private Integer id;
    private String name;
    private String sex;
    private Date borndate;
    private String phone;

    public Actor() {
    }

    public Actor(Integer id, String name, String sex, Date borndate, String phone) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.borndate = borndate;
        this.phone = phone;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Date getBorndate() {
        return borndate;
    }

    public void setBorndate(Date borndate) {
        this.borndate = borndate;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    @Override
    public String toString() {
        return "\nActor{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", borndate=" + borndate +
                ", phone='" + phone + '\'' +
                '}';
    }
}
  1. dao_.dao //存放XxxDAO 和 BasicDAO
public class BasicDAO<T> { //泛型指定具体类型

    private QueryRunner qr=new QueryRunner();

    //开发通用的dml方法,针对任意的表
    public int update(String sql,Object... paramenters){
        Connection connection = null;
        try {
            connection = JDBCUtilsByDruid.getConnection();
            int update = qr.update(connection, sql, paramenters);
            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... paramenters){

        Connection connection = null;
        try {
            connection = JDBCUtilsByDruid.getConnection();
            return qr.query(connection, sql, new BeanListHandler<T>(clazz),paramenters);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }finally {
            JDBCUtilsByDruid.close(null,null,connection);
        }
    }

    //查询单行结果的通用方法
    public T querySingle(String sql,Class<T> clazz,Object... paramenters){
        Connection connection = null;
        try {
            connection = JDBCUtilsByDruid.getConnection();
            return qr.query(connection, sql, new BeanHandler<T>(clazz),paramenters);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }finally {
            JDBCUtilsByDruid.close(null,null,connection);
        }
    }

    //查询单行单列的方法,即返回单值的方法
    public Object queryScalar(String sql,Object... paramenters){
        Connection connection = null;
        try {
            connection = JDBCUtilsByDruid.getConnection();
            return qr.query(connection, sql, new ScalarHandler(),paramenters);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }finally {
            JDBCUtilsByDruid.close(null,null,connection);
        }
    }
}
public class ActorDAO extends BasicDAO<Actor> {
    //1.就有 BasicDAO 的方法
    //2.根据业务需求,可以编写特有的方法。
}
  1. dao_.test //写测试类
public class TestDAO {
    //测试ActorDAO 对actor表crud操作
    @Test
    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, 6);
        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-11-11", "999");

        System.out.println(update >0 ? "执行成功" : "执行没有影响结果");
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BasicDao的使用 的相关文章

  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • 给定两个 SSH2 密钥,我如何检查它们是否属于 Java 中的同一密钥对?

    我正在尝试找到一种方法来验证两个 SSH2 密钥 一个私有密钥和一个公共密钥 是否属于同一密钥对 我用过JSch http www jcraft com jsch 用于加载和解析私钥 更新 可以显示如何从私钥 SSH2 RSA 重新生成公钥
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • 多个 Maven 配置文件激活多个 Spring 配置文件

    我想在 Maven 中构建一个环境 在其中我想根据哪些 Maven 配置文件处于活动状态来累积激活多个 spring 配置文件 目前我的 pom xml 的相关部分如下所示
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • Java Integer CompareTo() - 为什么使用比较与减法?

    我发现java lang Integer实施compareTo方法如下 public int compareTo Integer anotherInteger int thisVal this value int anotherVal an
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • 玩!框架:运行“h2-browser”可以运行,但网页不可用

    当我运行命令时activator h2 browser它会使用以下 url 打开浏览器 192 168 1 17 8082 但我得到 使用 Chrome 此网页无法使用 奇怪的是它以前确实有效 从那时起我唯一改变的是JAVA OPTS以启用
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O

随机推荐

  • 各种手机的UserAgent大全

    手机 UA 常用UserAgent列表 去重共85339条 类型 系统 设备 浏览器 User Agent 手机 Android OPPO R11st 手机百度 Mozilla 5 0 Linux Android 7 1 1 OPPO R1
  • [C#][Xml][Error Recording]System.ArgumentException:““.”(十六进制值 0x00)是无效的字符。”

    问题描述 在通过工具修改Xml内容后 在通过doc Save file path SaveOptions None 保存修改内容时 工具崩溃报错信息为 System ArgumentException 十六进制值 0x00 是无效的字符 问
  • 使用Skywalking追踪你的SpringBoot程序

    由于Skywalking符合opentracing的数据标准 而opentracing也是未来的大势所趋 特写一个傻瓜式教程 帮你手把手进行监控自己的SpringBoot程序 1 准备工作 访问https github com apache
  • Java学习笔记 五(面向对象)

    一 面向对象的概念 1 面向对象是把解决的问题按照一定的规则划分为多个独立的对象 然后通过调用对象的方法来解决问题 面向对象的主要特点为封装性 继承性和多态性 2 封装性 封装是面向对象的核心思想 将对象的属性和行为封装起来 不需要让外界知
  • 音乐学习笔记

    音乐学习笔记 1 和声 1 1基础和弦 1 2 卡农进行 1 和声 1 1基础和弦 1 音阶 音阶 大调音阶 1 c 1 2 3 4 5 6 7 1 小调音阶 6 c 6 7 1 2 3 4 5 6 1 主音 4 下属音 5 属音 1级和弦
  • 【CUDA编程】 动态体素化实现

    动态体素化实现 动态体素化DV克服了硬体素化HV的一些缺点 动态体素化DV保留了分组grouping阶段 相反 它没有采样固定的点数或体素容量 它保留了点和体素之间的完全映射 因此 体素数和每个体素中的点数都是动态的 依赖于具体的映射函数
  • MySQL 8.0 最最详细的安装教程以及错误解决办法

    如果你是来解决错误的 请点击直达 安装中的常见错误本教程也详细说明了一番 MySQL 8 0 安装教程 首先去官网下载MySQL Installer官网下载 本教程重重之重是设置密码验证方式和密码 其余步骤是详细说明 安装步骤 1 在这里我
  • Treap树实现文件C语言

    对于这个 想说的是 关于 NullNode 结点 在调用Release 释放内存之后 要将其恢复为NULL 以便下次的连续使用 自己想到的 很不错 treap c treap树实现文件 include treapTree h 全局变量声明定
  • 【Python基础】网络编程入门总结

    如何在网络中唯一标识一台计算机 IP地址 同一台计算机上多个程序如何共用网络而不冲突 网络端口 范围 0 65535 但0 1023 被占用 1024 65535 可用 不同计算机通信怎么才能相互理解 使用相同的协议 TCP UDP 基于T
  • 基于ISO13400 (DoIP) 实现车辆刷写

    近年来 在整车研发中基于以太网实现车辆高带宽通讯无疑是人们热议的话题 无论是车内基于车载以太网来减少线束成本 实现ADAS 信息娱乐系统等技术 还是基于新的电子电气架构以及远程诊断需求来实现以太网诊断 DoIP 各家OEM都投入了大量人力
  • Mac 平台相关操作

    安装第三方软件 安装第三方软件时 Mac 会提示 无法打开 DragonBonesPro app 因为无法验证开发者 解决办法就是打开控制台在控制台中输入 打开任何来源 sudo spctl master disable 之后再次安装应用程
  • 100天精通Python(数据分析篇)——第67天:Pandas数据连接、合并、加入、添加、重构函数(merge、concat、join、append、stack、unstack)

    文章目录 一 数据连接 pd merge 1 left right 2 how 3 on 4 left on right on 5 sort 6 suffixes 7 left index right index 二 数据合并 pd con
  • jvm是如何处理异常的

    jvm发现运算是已经违反了数学运算规则 java将这种常见的问题进行描述 并封装成了对象叫做ArithmeticException 当除0运算发生后 jvm将该问题打包成了一个异常对象 并将对象抛给调用者main函数 new Arithme
  • vue 多级菜单栏,鼠标移入显示鼠标移除隐藏

  • 注意力机制——注意力评分函数(代码+详解)

    目录 注意力分数 关于a函数的设计有两种思路 1 加性注意力 Additive Attention 2 缩放点积注意力 Scaled Dot Product Attention 模块导入 遮蔽softmax操作 加性注意力代码 补充知识 1
  • 地理信息安全在线培训考试题库-单选题

    1 根据 测绘成果管理条例 利用涉及国家秘密测绘成果开发生产的产品 未经 A 进行保密技术处理的 其秘密等级不得低于所用测绘成果的秘密等级 A 国务院测绘行政主管部门或者省 自治区 直辖市人民政府测绘行政主管部门 B 省级以上保密管理部门
  • OpenResty&Nginx安装ZhongKui-WAF

    Zhongkui WAF 钟馗是中国传统文化中的一个神话人物 被誉为 捉鬼大师 专门驱逐邪恶之物 Zhongkui WAF的命名灵感来源于这一神话人物 寓意着该软件能够像钟馗一样 有效地保护Web应用免受各种恶意攻击和威胁 Zhongkui
  • ModuleNotFoundError:No module named 'pyecharts' 解决pythone安装pyecharts无法正常运行问题

    一 Pyecharts安装方法 方法一 打开CMD输入命令安装 因镜像在国外 所以安装较慢 pip install pyecharts 方法二 利用国内清华镜像安装 pip install i https pypi tuna tsinghu
  • 使用vite打包可以按需引入的组件库 (rollup)

    package json name private false version 0 1 9 main lib index umd js module lib index es js types lib index d ts author n
  • BasicDao的使用

    本次博客带领大家学习BasicDao的使用 BasicDao的基本说明 DAO data access object数据访问对象 这样的通用类 称为BasicDao 是专门和数据库交互的 即完成对数据库 表 的crud操作 在BasicDa