如何模拟编写MyBatis之DataSource与Session呢?

2023-11-01

转自:

如何模拟编写MyBatis之DataSource与Session呢?

下文笔者讲述mybatis之模拟DateSource和Session的方法分享,如下所示

DataSource和Session简介

DataSource:
    实现标准的javax.sql.DataSource接口,用于获取数据库连接
Session:
    可以直接调用exec(sql)来执行sql语句(在DataSource指定的数据库中操作)

DataSource创建

public class VDataSource implements DataSource {

    private String url;
    private String user;
    private String password;

    // 构架函数,创建时尝试加载数据库驱动类
    public VDataSource(String driverClassName, String url, String user, String password) throws ClassNotFoundException {
        Class.forName(driverClassName); 
        this.url = url;
        this.user = user;
        this.password = password;
    }

    // 使用自带的java.sql.DriverManager,代入数据库信息取出一个连接
    @Override
    public Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url, user, password);
    }
}

Session

public interface Session {
    void exec(String sql) throws SQLException;
}
 
新建一个VSession类实现这个接口
public class VSession implements Session {

    private DataSource dataSource;
    private Connection conn;

    public VSession(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    // 若还Session新建后未连接过,从dataSource中获取一个
    public Connection getConnection() throws SQLException {
        if (conn == null) {
            conn = dataSource.getConnection();
        }
        return conn;
    }

    @Override
    public void exec(String sql) throws SQLException {
        Statement stmt = null;
        ResultSet rs = null;
        try {
            // 从连接中创建一个statement
            stmt = getConnection().createStatement();
            // statement执行一句sql查询
            rs = stmt.executeQuery(sql);
            // 结果的元数据,包括别名、列名、类型等
            ResultSetMetaData rsmd = rs.getMetaData();
            // 将所有结果输出
            if (rs.next()) {
                for (int i=1; i<=rsmd.getColumnCount(); i++) {
                    System.out.println(rsmd.getColumnLabel(i)+"="+rs.getObject(i));
                }
                System.out.println();
            }
        } finally {
            if (rs != null) rs.close();
            if (stmt != null) stmt.close();
        }
    }

}

测试代码

public class MyTest {
    private static String driverClassName = "com.mysql.jdbc.Driver";
    // 数据库可改为自己需要的地址
    private static String url = "jdbc:mysql://localhost:3306/user?useUnicode=true&characterEncoding=utf8";

    public static void main(String args[]) throws Exception {
        // 创建VDataSource
        DataSource data = new VDataSource(driverClassName, url, "root", "123456");
        // 创建Session
        Session session = new VSession(data);
        // 执行查询sql
        session.exec("select * from users where id=1");
    }
}
 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何模拟编写MyBatis之DataSource与Session呢? 的相关文章

  • SQL 解析与执行流程

    一 前言 在先前的技术博客中 我们已经详细介绍过数据库的 parser 模块与执行流程 用户输入的 SQL 语句通过词法解析器生成 token 再通过语法分析器生成抽象语法树 AST 经过 AST 生成对应的 planNode 最后执行 p
  • 成为一个黑客,就按照这个路线来!

    前几天一个同学在聊天中提到毕业后想要从事网络安全方向的工作 虽然他本身也是学计算机的 但是又怕心有余而力不足 因为 从事网络安全方面的工作向来起点都比较高 大学里少有开设这类课程的 在学校能够学到的知识比较有限 网上的关于这方面课程的质量又
  • 内网穿透的应用-使用Net2FTP轻松部署本地Web网站并公网访问管理内网资源

    文章目录 1 前言 2 Net2FTP网站搭建 2 1 Net2FTP下载和安装 2 2 Net2FTP网页测试 3 cpolar内网穿透 3 1 Cpolar云端设置 3 2 Cpolar本地设置
  • 亚信安慧AntDB引领数字化转型:浙江移动成功实现CRM系统全域改造

    数字时代 通信运营商在不断迭代的背景下 需要不断探索数字化转型的路径 以适应快速发展的市场和技术环境 在这一浪潮中 浙江移动站在前沿 率先完成了其CRM系统的全域改造 采用了亚信安慧公司研发的AntDB数据库 为整个行业树立了数字化转型的标
  • 6 - 数据备份与恢复|innobackupex

    数据备份与恢复 innobackupex 数据备份与恢复 数据备份相关概念 物理备份与恢复 逻辑备份 推荐 使用binlog日志文件实现对数据的时时备份 使用日志 恢复数据
  • 【计算机毕业设计】出租车管理系统

    现代经济快节奏发展以及不断完善升级的信息化技术 让传统数据信息的管理升级为软件存储 归纳 集中处理数据信息的管理方式 本出租车管理系统就是在这样的大环境下诞生 其可以帮助管理者在短时间内处理完毕庞大的数据信息 使用这种软件工具可以帮助管理人
  • 【计算机毕业设计】北关村基本办公管理系统

    在如今社会上 关于信息上面的处理 没有任何一个企业或者个人会忽视 如何让信息急速传递 并且归档储存查询 采用之前的纸张记录模式已经不符合当前使用要求了 所以 对北关村基本办公信息管理的提升 也为了对北关村基本办公信息进行更好的维护 北关村基
  • 基于java的饮食分享平台系统设计与实现

    基于java的饮食分享平台系统设计与实现 I 引言 A 研究背景和动机 近年来 随着人们生活水平的提高和健康意识的增强 饮食健康已经成为越来越多人的关注焦点 因此 一个方便快捷的饮食分享平台就显得尤为重要 基于Java的饮食分享平台系统设计
  • 电商数据api拼多多接口获取商品实时数据价格比价api代码演示案例

    拼多多商品详情接口 接口接入入口 它的主要功能是允许卖家从自己的系统中快速获取商品详细信息 通过这个接口 卖家可以提取到商品的各类数据 包括但不限于商品标题 价格 优惠价 收藏数 下单人数 月销售量等 此外 还可以获取到商品的SKU图 详情
  • 【计算机毕业设计】趵突泉景区的智慧导游小程序_5ztvv

    当今社会已经步入了科学技术进步和经济社会快速发展的新时期 国际信息和学术交流也不断加强 计算机技术对经济社会发展和人民生活改善的影响也日益突出 人类的生存和思考方式也产生了变化 传统趵突泉景区的智慧导游采取了人工的管理方法 但这种管理方法存
  • 【计算机毕业设计】springbootstone音乐播放器的设计与实现

    随着我国经济的高速发展与人们生活水平的日益提高 人们对生活质量的追求也多种多样 尤其在人们生活节奏不断加快的当下 人们更趋向于足不出户解决生活上的问题 stone音乐播放器展现了其蓬勃生命力和广阔的前景 与此同时 为解决用户需求 stone
  • 【ES6】解构语句中的冒号(:)

    在解构赋值语法中 冒号 的作用是为提取的字段指定一个新的变量名 让我们以示例 const billCode code version route query 来说明 billCode code version 表示从 route query
  • 做测试不会 SQL?超详细的 SQL 查询语法教程来啦!

    前言 作为一名测试工程师 工作中在对测试结果进行数据比对的时候 或多或少要和数据库打交道的 要和数据库打交道 那么一些常用的sql查询语法必须要掌握 最近有部分做测试小伙伴表示sql查询不太会 问我有没有sql查询语法这一块的文档可以学习
  • 温室气体排放更敏感的模型(即更高的平衡气候敏感性(ECS))在数年到数十年时间尺度上也具有更高的温度变化(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码 数据
  • MyBatis - jdbcTypeForNull Oracle

    我将 MyBatis 与 Oracle 11g R2 数据库结合使用 我正在使用 MyBatis 3 3 和 ojdbc6 12 1 0 2 我的问题是每当我尝试插入一个空对象时我都会得到以下信息 org springframework j
  • MyBatis 与 Guava 多重映射

    我想用番石榴多重地图 https google github io guava releases snapshot api docs com google common collect Multimap html as a 结果图 http
  • 在 MyBatis 3/Java 上从缓存反序列化对象时出现问题

    所以我正在使用 MySQL MyBatis3 Tomcat 进行一个业余项目 我目前正在致力于在 MyBatis 中打开缓存 当我第一次尝试打开缓存时 由于我的对象没有实现可序列化 所以出现了异常 因此 在使用我试图缓存的对象实现 Seri
  • MyBatis Spring Boot 自定义类型处理程序

    我需要 Spring Boot 和 MyBatis 集成方面的帮助 我对自定义 BaseTypeHandler 有疑问 我创建了一个映射器 MappedTypes LocalDateTime class public class Local
  • mybatis:使用带有 XML 配置的映射器接口作为全局参数

    我喜欢使用 XML 表示法来指定全局参数 例如连接字符串 我也喜欢 Mapper 注释 当我尝试将两者结合起来时 我得到这个例外 https stackoverflow com questions 4263832 type interfac
  • MyBatis 枚举的使用

    我知道以前有人问过这个问题 但我无法根据迄今为止找到的信息实施解决方案 所以也许有人可以向我解释一下 我有一个表 状态 它有两列 id 和 name id是PK 我不想使用 POJO Status 而是使用枚举 我创建了这样一个枚举 如下所

随机推荐

  • 基于Java设计和实现系统的自动化巡检

    系统巡检对于系统管理员并不陌生 日常工作是离不开它的 笔者记得进入运维岗位的第一天 学习的第一课就是如何系统巡检 首先远程登陆各服务器 然后通过执行命令或操作页面查看系统内存 CPU和磁盘利用率等情况 最后将相应的数值填写入系检表格 看似几
  • 新一代视频压缩编码标准-----H.264/AVC

    2 数字视频 2 1 2 数字电视PCM原理 将输入的模拟信号转化为输出的数字电视信号 经过取样 量化 编码三个步骤 由A D变换器完成 2 1 2 1 取样 在时间轴上将连续变化的模拟信号 转化为离散量 2 1 2 2 量化 因取样后的脉
  • 服务中不存在mysql 或者没有启动成功

    服务器中不存在mysql mysql admin V 查看mysql环境的配置是否成功 成功则执行services msc 去服务中查找mysql服务 如果有则设置自动启动 或者 执行net start mysql 黑窗口开启服务 如果没有
  • 【AI面试】RoI Pooling 和 RoI Align 辨析

    RoI Pooling和RoI Align是两种常用的目标检测中的RoI特征提取方法 它们的主要区别在于 如何将不同大小的RoI对齐到固定大小的特征图上 并在这个过程中保留更多的空间信息 如果你是做目标检测相关的项目 那么这个问题肯定是跑不
  • 嵌入式单元测试框架之Ceedling

    Ceedling Ceedling 是一个用 Ruby 语言编写的自动化测试框架 一个 C 项目构建系统 是对 Ruby Rake 的一个延申 Ceedling 主要目标是以测试为驱动的 C 语言开发 集成CMock Unity CExce
  • 【算法】中序与后序遍历序列构造二叉树(二叉树、递归)

    106 从中序与后序遍历序列构造二叉树 根据一棵树的中序遍历与后序遍历构造二叉树 注意 你可以假设树中没有重复的元素 例如 给出中序遍历 inorder 9 3 15 20 7 后序遍历 postorder 9 15 7 20 3 返回如下
  • impala高级设置set之BATCH_SIZE

    官网地址 https impala apache org docs build html topics impala batch size html Number of rows evaluated at a time by SQL ope
  • [Python]考试应用界面和简单logo-学习笔记

    试题部分 list1 1 下列词语中划线字的读音完全正确的一组是 2 下列词语解释有错误的一组是 3 四川话中 瓜娃子 指的是 4 四川话中形容一个人是 干豇豆儿 是指这个人 5 四川话中 咔咔过过 是 6 妖精十怪 是 7 四川话中 呱迷
  • Mongodb 设置密码

    第一步 开机先 mongod dbpath 存放数据库文件夹路径 第二步 打开命令行窗口输入mongo 进入mongo环境 第三步 切换到 admin 数据库 use admin 第四步 给admin设置用户密码 user 用户名 pwd
  • 智能水位检测系统proteus_基于单片机控制的智能检测系统Proteus仿真设计研究

    0引言近年来 单片机发展到了一个全新阶段 广泛应用于电子 机械控制 自动化生产设计等行业 并逐步延伸到智能控制的诸多领域 以单片机为控制核心的小型自动化生产检测系统 尤其在一些液体产品的检测等复杂工程中 控制人员通过微处理单元对产品进行质量
  • mysql安装出现让输入根密码_MYSQL安装时解决要输入current root password的解决方法...

    在装MYSQL的时候发现要输入current root password不记得以前在电脑里装过 你的系统曾经装过MYSQL在重装就会要求输入原来设定的密码 如果是第一次安装就不会出现 在网上苦苦搜寻解决方法 终归结出以下解决方法 1 清除M
  • 牛逼,玩转 ChatGPT!

    ChatGPT是一种由OpenAI开发的人工智能模型 它可以模拟人类的对话交流 对话可以涉及各种话题 使用ChatGPT可以进行各种操作 例如自然语言生成 文本摘要 语言翻译 文本分类 问答系统等 下面是ChatGPT网站的可用链接 由于网
  • MySQL中存储过程与函数总结

    目录 1 存储过程与函数的概念 2 创建存储过程与函数 2 1 参数列表 3 使用变量 4 定义条件与处理程序 1 定义条件 2 定义处理程序 3 六种定义处理程序的方法 方法一 捕获sqlstate value 方法二 捕获mysql e
  • 介绍一种门限SM2密码方案

    中科院信息工程研究所的科研人员林璟锵 马原 荆继武等设计了一种 SM2 门限密码算法实现方案 他们在 2014 年 8 月向国家知识产权局提交了专利申请 名称是 适用于云计算的基于SM2算法的签名及解密方法和系统 授权公告号是 CN 104
  • 一念天堂

    一念成佛 一念成魔 很多事情就发生在一念之间 很多误会也发生在想说没说出口的一瞬间 虽然误会可能解开 但再也回不回从前 心安在这里给大家讲个故事 也算是给自己提个醒 该说的话一定要说出来 你不说别人永远都不知道 不该说的尽量别说 别人会误会
  • lua协程

    coroution协程 定义协程函数 co coroutine create function a b end 启动协程函数和继续运行 coroutine resume co 10 20 co coroutine wrap function
  • C++&QT实现计算器图形界面交互

    一 实验目的和要求 要求 在实验 03 实验 05的作业内容基础上 1 增加图形交互功能 2 增加3个逻辑运算符 并能处理逻辑运算符和算术运算符的混合运算 3 增加容错功能 能进行异常处理 说明 1 其中牵涉到数据结构相关的可复用代码 可自
  • C++实现——杨辉三角

    打印杨辉三角 include
  • k8s健康检查配置yaml文件编写

    1 就绪检测 apiVersion v1 kind Pod metadata name readiness httpget pod namespace default 放在那个空间下 spec ontainers name readines
  • 如何模拟编写MyBatis之DataSource与Session呢?

    转自 如何模拟编写MyBatis之DataSource与Session呢 下文笔者讲述mybatis之模拟DateSource和Session的方法分享 如下所示 DataSource和Session简介 DataSource 实现标准的j