【封装】封装DML和DQL方法

2023-10-26

一、工具类型的封装及普适性泛型工具


1.1 封装DML方法

public int commonsUpdate(String sql, Object... args) {
        Connection connection = null;
        PreparedStatement preparedStatement = null;

        try {
            connection = DBUtils.getConnection();
            preparedStatement = connection.prepareStatement(sql);

            for (int i = 0; i < args.length; i++) {
                preparedStatement.setObject(i + 1, args[i]);
            }

            return preparedStatement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DBUtils.closeAll(null, preparedStatement, null);
        }
        return 0;
    }

1.2 封装DQL方法

 /**
     * 公共查询方法 (可查询单个对象,也可查询多个对象,可以查任何一张表)
     *
     * @param sql
     * @param args
     * @return
     */
    //                              select * from t_account
    //                              select * from t_student
    //工具不知道查的是什么  调用者知道
    //封装对象、对象赋值  调用者清楚
    public List<T> commonsSelect(String sql, RowMapper<T> rowMapper, Object... args) {

        List<T> elements = new ArrayList<T>();

        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

        try {
            connection = DBUtils.getConnection();
            preparedStatement = connection.prepareStatement(sql);

            if(args !=null){
                for (int i = 0; i < args.length; i++) {
                    preparedStatement.setObject(i + 1, args[i]);
                }
            }


            resultSet = preparedStatement.executeQuery();

            while (resultSet.next()) {
                //根据查询到的结果完成ORM,如何进行对象的创建及赋值?
                T t = rowMapper.getRow(resultSet);//回调---->调用者提供的一个封装方法ORM
                elements.add(t);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DBUtils.closeAll(null, preparedStatement, resultSet);
        }
        return elements;
    }

二、用户案例

entity:

package com.t1.entity;

public class User {
   
    private int id;
    private String username;
    private String password;
    private String sex;
    private String email;
    private String address;

    @Override
    public String toString() {
   
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", sex='" + sex + '\'' +
                ", email='" + email + '\'' +
                ", address='" + address + '\'' +
                '}';
    }

    public int getId() {
   
        return id;
    }

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

    public String getUsername() {
   
        return username;
    }

    public void setUsername(String username) {
   
        this.username = username;
    }

    public String getPassword() {
   
        return password;
    }

    public void setPassword(String password) {
   
        this.password = password;
    }

    public String getSex() {
   
        return sex;
    }

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

    public String getEmail() {
   
        return email;
    }

    public void setEmail(String email) {
   
        this.email = email;
    }

    public String getAddress() {
   
        return address;
    }

    public void setAddress(String address) {
   
        this.address = address;
    }

    public User() {
   
    }

    public User(int id, String username, String password, String sex, String email, String address) {
   
        this.id = id;
        this.username = username;
        this.password = password;
        this.sex = sex;
        this.email = email;
        this.address = address;
    }
}


utils:

//DBUtils工具类
package com.t1.utils;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class DBUtils {
   
    private static final Properties PROPERTIES = new Properties();
    //为当前线程绑定一个Connection连接。从头到尾
    private static final ThreadLocal<Connection> THREAD_LOCAL = new ThreadLocal<Connection>();

    static {
   
        InputStream is = DBUtils.class.getResourceAsStream("/db.properties");
        try {
   
            PROPERTIES.load(is);
            Class.forName(PROPERTIES.getProperty("driver"));
        } catch (IOException e) {
   
            e.printStackTrace();
        } catch (
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【封装】封装DML和DQL方法 的相关文章

  • 使用 GWT 读取非常大的本地 XML 文件

    我正在使用 GWT 构建我的第一个 Java 应用程序 它必须从一个非常大的 XML 文件中读取数据 当我尝试发送对文件中信息的请求时遇到问题 并且我不太确定它是否与文件的大小或我的语义有关 在我的程序中 我有以下内容 static fin
  • 不同类型的数组

    是否可以有一个包含两种不同类型数据的数组 我想要一个包含双精度型和字符串的数组 我尝试过 ArrayList
  • 通往楼梯顶部的可能路径

    这是一个非常经典的问题 我听说谷歌在他们的面试中使用过这个问题 问题 制定一个递归方法 打印从楼梯底部到楼梯顶部的所有可能的独特路径 有 n 个楼梯 您一次只能走 1 步或 2 步 示例输出 如果它是一个有 3 级楼梯的楼梯 1 1 1 2
  • Integer.parseInt("0x1F60A") 以 NumberformatException 结束

    我尝试从数据库中获取长字符串内的表情符号代码 格式如下 0x1F60A 所以我可以访问代码 但它将是String 起初 我尝试通过执行以下操作来转换变量tv setText beforeEmo getEmijoByUnicode int e
  • 大数据使用什么数据结构

    我有一个包含一百万行的 Excel 工作表 每行有 100 列 每行代表一个具有 100 个属性的类的实例 列值是这些属性的值 哪种数据结构最适合在这里使用来存储数百万个数据实例 Thanks 这实际上取决于您需要如何访问这些数据以及您想要
  • 使用 JUnit 时,有没有办法验证测试方法中是否调用了 try/catch 指令的 Catch 部分?

    例如 如果我想测试以下课程 public class SomeClass public void someMethod try Some code where comething could go wrong catch Exception
  • 如何检测 Java 字符串中的 unicode 字符?

    假设我有一个包含 的字符串 我如何找到所有这些 un icode 字符 我应该测试他们的代码吗 我该怎么做呢 例如 给定字符串 A X 我想将其转换为 AYXY 我想对其他 unicode 字符做同样的事情 并且我不想将它们存储在某种翻译映
  • 自动删除主键序列中的间隙

    我正在创建一个网页 该网页根据用户操作将数据存储到 MySQL 数据库中 数据库有很多行 行的主键是列 rowID 它只是按顺序对行进行编号 例如 1 2 3 4 用户可以选择删除行 问题是当用户删除最后一行以外的行时 rowID 中有一个
  • 套接字的读写如何同步?

    我们创建一个套接字 在套接字的一侧有一个 服务器 在另一侧有一个 客户端 服务器和客户端都可以向套接字写入和读取 这是我的理解 我不明白以下事情 如果服务器从套接字读取数据 它在套接字中是否只看到客户端写入套接字的内容 我的意思是 如果服务
  • 为什么我在 MySQL 中设置更大的 INT 数据类型长度时没有收到错误消息?

    我对 MySql 中的数据类型长度有点困惑 我阅读了参考手册http dev mysql com doc refman 5 0 en data types html http dev mysql com doc refman 5 0 en
  • 生成的序列以 1 开头,而不是注释中设置的 1000

    我想请求一些有关 Hibernate 创建的数据库序列的帮助 我有这个注释 下面的代码 在我的实体类中 以便为合作伙伴表提供单独的序列 我希望序列以 1000 开头 因为我在部署期间使用 import sql 将测试数据插入数据库 并且我希
  • 从 GitHub 上托管的 Spring Cloud Config Server 访问存储库的身份验证问题

    我在 GitHub 上的存储库中托管配置 如果我将回购公开 一切都好 但如果我将其设为私有 我将面临 org eclipse jgit errors TransportException https github com my user m
  • 如何避免 ArrayIndexOutOfBoundsException 或 IndexOutOfBoundsException? [复制]

    这个问题在这里已经有答案了 如果你的问题是我得到了java lang ArrayIndexOutOfBoundsException在我的代码中 我不明白为什么会发生这种情况 这意味着什么以及如何避免它 这应该是最全面的典范 https me
  • 使用 Mockito 模拟某些方法,但不模拟其他方法

    有没有办法使用 Mockito 模拟类中的某些方法 而不模拟其他方法 例如 在这个 诚然是人为的 Stock我想嘲笑的班级getPrice and getQuantity 返回值 如下面的测试片段所示 但我想要getValue 执行乘法 如
  • HashMap 值需要不可变吗?

    我知道 HashMap 中的键需要是不可变的 或者至少确保它们的哈希码 hashCode 不会改变或与另一个具有不同状态的对象发生冲突 但是 HashMap中存储的值是否需要与上面相同 为什么或者为什么不 这个想法是能够改变值 例如在其上调
  • QuerySyntaxException:无法找到类

    我正在使用 hql 生成 JunctionManagementListDto 类的实际 Java 对象 但我最终在控制台上出现以下异常 org hibernate hql internal ast QuerySyntaxException
  • JMenu 中的文本居中

    好吧 我一直在网上寻找有关此问题的帮助 但我尝试的任何方法似乎都不起作用 我想让所有菜单文本都集中在菜单按钮上 当我使用setHorizontalTextPosition JMenu CENTER 没有变化 事实上 无论我使用什么常量 菜单
  • 如何在 codeigniter 查询中使用 FIND_IN_SET?

    array array classesID gt 6 this gt db gt select gt from this gt table name gt where array gt order by this gt order by q
  • 如何使用play框架上传多个文件?

    我在用play framework 2 1 2 使用java我正在创建视图来上传多个文件 我的代码在这里 form action routes upload up enctype gt multipart form data
  • 在浏览器刷新中刷新检票面板

    我正在开发一个付费角色系统 一旦用户刷新浏览器 我就需要刷新该页面中可用的统计信息 统计信息应该从数据库中获取并显示 但现在它不能正常工作 因为在页面刷新中 java代码不会被调用 而是使用以前的数据加载缓存的页面 我尝试添加以下代码来修复

随机推荐

  • java后端解决重复提交问题

    一 为什么会出现重复提交 主要是由于网络的延迟问题以及页面刷新的操作 二 表单的重复提交会导致的问题 主要能够造成很多脏数据 三 解决的办法 3 1 前端解决办法 通过前端的方法将提交按钮变灰 对于前端的办法这里就不做演示了 因为前端的控制
  • C++11标准中按值传递类对象参数的使用时机

    严正声明 本文系作者davidhopper原创 未经许可 不得转载 作为一名资深C 程序员 在C 98 03标准时代 一直将 不得按值传递类对象参数 的规定奉为圭臬 例如 void SetParam const std string nam
  • 自定义实现Java ListNode链表

    写在前面 今天写代码的时候 发现我居然被Java的ListNode的输入卡了半天 所以就打算写一篇博客来整理一下ListNode 链表的定义 首先ListNode就是链表 它的基本结构如下 及一个包含数据 和指针的结构 我们将一个节点的指针
  • Unity3D游戏编程——离散仿真作业

    Unity3D游戏编程 离散仿真作业 1 简答题asd 1 1解释游戏对象 GameObjects 和资源 Assets 的区别与联系 答 游戏对象 GameObjects 是一系列资源的组成序列 资源 Assets 是一系列可以被Unit
  • python tkinter.Text 高级用法 -- 设计功能齐全的文本编辑器

    众所周知 tkinter的Text文本框功能强大 Python自带的IDLE编辑器也是用tkinter编写的 这里作者也用tkinter的Text文本框等控件 设计功能较齐全的文本编辑器程序 目标功能 编辑文本文件 编辑二进制文件 字符会以
  • YOLO内卷时期该如何选模型?

    关注公众号 发现CV技术之美 本篇文章来自知乎 作者 迪迦奥特曼 原地址 https zhuanlan zhihu com p 566469003 前两天看到了美团微信公众号上的宣传 更新发布了新版YOLOv6 还放出了arxiv论文 更新
  • MySQL主从复制,数据库最经典的主从复制你还不知道吗?我不允许!!!

    作者 小刘在C站 个人主页 小刘主页 努力不一定有回报 但一定会有收获加油 一起努力 共赴美好人生 学习两年总结出的运维经验 以及思科模拟器全套网络实验教程 专栏 云计算技术 小刘私信可以随便问 只要会绝不吝啬 感谢CSDN让你我相遇 目录
  • vue+高德地图实现多边形范围内标点

    vue 高德地图实现多边形范围内标点 具体实现 一 安装并引入高德地图 二 创建一个aMap地图文件 三 aMap上创建多边形围栏 四 配置围栏 地图点击事件 五 地图点击标点事件 本篇文章可用于vue项目使用百度地图 获取指定多边形范围内
  • Python 使用VSCode配置代码智能提示的方法(numpy)

    本文主要介绍Python中 使用VSCode作用开发工具时 使用代码智能提示的配置方法 以及使用Numpy时 创建的变量或对象没有提示问题的解决方法 原文地址 Python 使用VSCode配置代码智能提示的方法 numpy
  • STM32CUBEMX_SDIO和FATFS_读写SD卡

    STM32CUBEMX SDIO和FATFS 读写SD卡 简述 FATFS是一个完全免费开源 专为小型嵌入式系统设计的FAT File Allocation Table 文件系统模块 FATFS的编写遵循ANSI C 并且完全与磁盘I O层
  • C++入门--类和对象(上)

    目录 一 C 的类 1 类的引入 2 类的定义 3 类的访问限定符及封装 4 封装 5 类的作用域 6 类的实例化 7 类对象的大小 二 this指针 1 this指针引入 2 this指针的特性 三 C语言和C 实现Stack的对比 1
  • 微信小程序 background-image直接设置本地图片路径,编辑器正常显示,真机运行不显示解决方法

    项目场景 微信小程序 设置background image直接设置本地图片路径 问题描述 编辑器正常显示 真机运行不显示 原因分析 background image只能用网络url或者base64图片编码 解决方案 1 将本地图片转为网络u
  • 用Rsync,实现网站的增量部署

    整个网站通常会很大 尤其的其中静态的图片视频之类 但我们通常不会修改他们 平常只会修改几个文件 如果每次更新都将整个网站从本地上传到服务器 无疑很费时间 如果要找到修改的文件 并只上传这些文件 甚至只上传这些文件修改的部分 无疑会方便很多
  • img.shape img.size

    import cv2 import numpy as np img cv2 imread messi5 jpg print img shape px img 100 100 print px blue img 100 100 0 print
  • WARNING: You are using pip version 19.2.3, however version 20.1.1 is available. -解决方法

    当用PIP下载模块时提示 WARNING You are using pip version 19 2 3 however version 20 1 1 is available You should consider upgrading
  • 寒假日报(2.3-2.5)

    1 终于学完了慕课中的 python3入门机器学习 简单总结回顾一下我学习到的东西 具体的学习笔记以后有时间就补上 Jupyter Notebook的使用 numpy基础 matpotlib绘图 KNN k近邻算法 分类 非监督学习 线性回
  • 实现基于TensorFlow的手写数字识别(1)

    一 MNIST数字识别数据集获取及处理 通过学习林大贵老师的 TensorFlow Keras深度学习人工智能实践应用 对图像处理的过程有了较浅薄的理解 在此与大家分享 同时由于上书中提供的代码下载页面失效 笔者按照书本中的内容手敲代码 如
  • 解决cv2.error: OpenCV(3.4.4) C:\projects\opencv-python\opencv\modules\highgui\src\window.cpp:356: erro

    Opencv python中调用cv2 imshow 时出现该错误 解决 图片路径有误 将第一幅图片中路径改为 Image ying3 jpg即可
  • jvm之String

    基本特性 字符串 使用一对 引起来表示 声明为final的 不可被继承 实现了Serializable接口 表示字符串是支持序列化的 实现了Comparable接口 表示String 可以比较大小 在jdk8及以前内部定义了final ch
  • 【封装】封装DML和DQL方法

    封装DML和DQL方法 一 工具类型的封装及普适性泛型工具 1 1 封装DML方法 1 2 封装DQL方法 二 用户案例 一 工具类型的封装及普适性泛型工具 1 1 封装DML方法 public int commonsUpdate Stri