flea-db使用之SQL模板接入

2023-10-27

引言

本篇将要演示 SQL 模板的使用,目前包含 INSERT 模板、SELECT 模板、UPDATE 模板、DELETE模板。

1. 准备工作

为了演示SQL模板接入(参考 JPA接入 中的准备工作),需要如下准备:

  1. MySQL数据库 (客户端可以使用 navicat for mysql)
  2. 新建测试数据库 fleajpatest
  3. 新建测试表 student

2. 使用讲解

2.1 SQL模板配置

SQL模板配置包含了SQL模板规则,SQL模板定义,SQL模板参数,SQL关系配置。具体配置可至GitHub,查看 flea-sql-template.xml

2.2 新增数据

相关配置可查看 :

	<param id="insert" name="SQL模板參數" desc="用于定义SQL模板中的替换参数">
		<!-- 表名 -->
		<property key="table" value="student" />
		<!-- 这两个不填,表示表的字段全部使用-->
        <property key="columns" value="stu_name, stu_age, stu_sex, stu_state" />
        <property key="values" value=":stuName:, :stuAge:, :stuSex:, :stuState:" />
	</param>

	<relation id="insert" templateId="insert" paramId="insert" name="SQL关系"/>

JPA方式接入SQL模板:

	@Test
    public void testInsertSqlTemplateFromJPA() throws Exception{
        IStudentSV studentSV = (IStudentSV) applicationContext.getBean("studentSV");

        Student student = new Student();
        student.setStuName("王老五");
        student.setStuAge(35);
        student.setStuSex(1);
        student.setStuState(1);

        int ret = studentSV.insert("insert", student);
        LOGGER.debug("result = {}", ret);
    }

运行结果:
在这里插入图片描述
新增数据:
在这里插入图片描述
JDBC方式接入SQL模板:

    @Test
    public void testInsertSqlTemplateFromJDBC() throws Exception {
        FleaJDBCConfig.init(DBSystemEnum.MySQL.getName(), "fleajpatest");

        Student student = new Student();
        student.setStuName("钱老六");
        student.setStuAge(30);
        student.setStuSex(1);
        student.setStuState(1);

        int ret = FleaJDBCHelper.insert("insert", student);
        LOGGER.debug("result = {}", ret);
    }

运行结果:
在这里插入图片描述
新增数据:
在这里插入图片描述

2.3 查询数据

相关配置可查看 :

	<param id="select" name="SQL模板參數" desc="用于定义SQL模板中的替换参数; 如需查询全部,则设置key=columns的属性值为 *,即可">
		<!-- 表名 -->
		<property key="table" value="student" />
		<!-- SELECT 显示列 -->
		<property key="columns" value="*" />
		<!-- WHERE 子句 , 出现 xml不能直接识别的需要转义,如 >, < 等-->
		<property key="conditions" value="stu_name LIKE :stuName: AND stu_sex = :stuSex: AND stu_age &gt;= :minAge: AND stu_age &lt;= :maxAge:" />
	</param>

	<relation id="select" templateId="select" paramId="select" name="SQL关系"/>

JPA方式接入SQL模板:

    @Test
    public void testQuerySqlTemplateFromJPA() throws Exception {
        IStudentSV studentSV = (IStudentSV) applicationContext.getBean("studentSV");

        Student student = new Student();
        student.setStuName("%老%");
        student.setStuSex(1);
        student.put("minAge", 20);
        student.put("maxAge", 40);

        LOGGER.debug("Student List = {}", studentSV.query("select", student));
    }

运行结果:
在这里插入图片描述
JDBC方式接入SQL模板:

	@Test
    public void testQuerySqlTemplateFromJDBC() throws Exception {
        FleaJDBCConfig.init(DBSystemEnum.MySQL.getName(), "fleajpatest");

        Student student = new Student();
        student.setStuName("%老%");
        student.setStuSex(1);
        student.put("minAge", 20);
        student.put("maxAge", 40);

        LOGGER.debug("Student List = {}", FleaJDBCHelper.query("select", student));
    }

运行结果:
在这里插入图片描述

2.4 更新数据

相关配置可查看 :

	<param id="update" name="SQL模板參數" desc="用于定义SQL模板中的替换参数">
		<!-- 表名 -->
		<property key="table" value="student" />
		<!-- SET 子句 -->
		<property key="sets" value="stu_name = :stuName, stu_age = :stuAge" />
		<!-- WHERE 子句 , 出现 xml不能直接识别的需要转义,如 >, < 等-->
		<property key="conditions" value="stu_name LIKE :sName: AND stu_state = :stuState: AND stu_sex = :stuSex: AND stu_age &gt;= :minAge: AND stu_age &lt;= :maxAge:" />
	</param>
		
	<relation id="update" templateId="update" paramId="update" name="SQL关系"/>

JPA方式接入SQL模板:

    @Test
    public void testUpdateSqlTemplateFromJPA() throws Exception {
        IStudentSV studentSV = (IStudentSV) applicationContext.getBean("studentSV");

        Student student = new Student();
        student.setStuName("王老五1");
        student.setStuAge(40);
        student.setStuState(1);
        student.setStuSex(1);
        student.put("sName", "%王老五%");
        student.put("minAge", 20);
        student.put("maxAge", 40);

        LOGGER.debug("Result = {}", studentSV.update("update", student));
    }

运行结果:
在这里插入图片描述
在这里插入图片描述
JDBC方式接入SQL模板:

    @Test
    public void testUpdateSqlTemplateFromJDBC() throws Exception {
        FleaJDBCConfig.init(DBSystemEnum.MySQL.getName(), "fleajpatest");

        Student student = new Student();
        student.setStuName("钱老六1");
        student.setStuAge(35);
        student.setStuState(1);
        student.setStuSex(1);
        student.put("sName", "%钱老六%");
        student.put("minAge", 20);
        student.put("maxAge", 40);

        LOGGER.debug("Result = {}", FleaJDBCHelper.update("update", student));
    }

运行结果:
在这里插入图片描述
在这里插入图片描述

2.5 删除数据

相关配置可查看 :

	<param id="delete" name="SQL模板參數" desc="用于定义SQL模板中的替换参数">
		<!-- 表名 -->
		<property key="table" value="student" />
		<!-- WHERE 子句 -->
		<property key="conditions" value="stu_name LIKE :stuName: AND stu_state = :stuState: AND stu_sex = :stuSex: AND stu_age &gt;= :minAge: AND stu_age &lt;= :maxAge:" />
	</param>
		
	<relation id="delete" templateId="delete" paramId="delete" name="SQL关系"/>

JPA方式接入SQL模板:

    @Test
    public void testDeleteSqlTemplateFromJPA() throws Exception {
        IStudentSV studentSV = (IStudentSV) applicationContext.getBean("studentSV");

        Student student = new Student();
        student.setStuName("%王老五%");
        student.setStuState(1);
        student.setStuSex(1);
        student.put("minAge", 20);
        student.put("maxAge", 40);

        LOGGER.debug("Result = {}", studentSV.delete("delete", student));
    }

运行结果:
在这里插入图片描述
JDBC方式接入SQL模板:

    @Test
    public void testDeleteSqlTemplateFromJDBC() throws Exception {
        FleaJDBCConfig.init(DBSystemEnum.MySQL.getName(), "fleajpatest");

        Student student = new Student();
        student.setStuName("%钱老六%");
        student.setStuState(1);
        student.setStuSex(1);
        student.put("minAge", 20);
        student.put("maxAge", 40);

        LOGGER.debug("Result = {}", FleaJDBCHelper.delete("delete", student));
    }

运行结果:
在这里插入图片描述

2.6 分页查询

当前数据库数据如下:
在这里插入图片描述
相关配置可查看 :

	<param id="select_1" name="SQL模板參數" desc="用于定义SQL模板中的替换参数; 如需查询全部,则设置key=columns的属性值为 *,即可">
		<!-- 表名 -->
		<property key="table" value="student" />
		<!-- SELECT 显示列 -->
		<property key="columns" value="*" />
		<!-- WHERE 子句 , 出现 xml不能直接识别的需要转义,如 >, < 等-->
		<property key="conditions" value="stu_name LIKE :stuName: AND stu_sex = :stuSex: AND stu_age &gt;= :minAge: AND stu_age &lt;= :maxAge: ORDER BY stu_id DESC LIMIT :pageStart:, :pageCount:" />
	</param>
	
	<relation id="select_1" templateId="select" paramId="select_1" name="SQL关系"/>

JPA方式接入SQL模板:

	@Test
    public void testQueryPageSqlTemplateFromJPA() throws Exception {
        IStudentSV studentSV = (IStudentSV) applicationContext.getBean("studentSV");

        Student student = new Student();
        student.setStuName("%张三%");
        student.setStuSex(1);
        student.put("minAge", 18);
        student.put("maxAge", 20);
        int pageNum = 1;   // 第一页
        int pageCount = 5; // 每页5条记录
        student.put("pageStart", (pageNum - 1) * pageCount);
        student.put("pageCount", pageCount);

        List<Student> studentList = studentSV.query("select_1", student);
        LOGGER.debug("Student List = {}", studentList);
        LOGGER.debug("Student Count = {}", studentList.size());
    }

运行结果:
在这里插入图片描述
JDBC方式接入SQL模板:

 	@Test
    public void testQueryPageSqlTemplateFromJDBC() throws Exception {
        FleaJDBCConfig.init(DBSystemEnum.MySQL.getName(), "fleajpatest");

        Student student = new Student();
        student.setStuName("%李四%");
        student.setStuSex(1);
        student.put("minAge", 18);
        student.put("maxAge", 20);
        int pageNum = 1;   // 第一页
        int pageCount = 5; // 每页5条记录
        student.put("pageStart", (pageNum - 1) * pageCount);
        student.put("pageCount", pageCount);

        List<Map<String, Object>> studentList = FleaJDBCHelper.query("select_1", student);
        LOGGER.debug("Student List = {}", studentList);
        LOGGER.debug("Student Count = {}", studentList.size());
    }

运行结果:
在这里插入图片描述

2.7 单个结果查询–计数

相关配置可查看 :

	<param id="select_2" name="SQL模板參數" desc="用于定义SQL模板中的替换参数; 如需查询全部,则设置key=columns的属性值为 *,即可">
		<!-- 表名 -->
		<property key="table" value="student" />
		<!-- SELECT 显示列 -->
		<property key="columns" value="count(*)" />
		<!-- WHERE 子句 , 出现 xml不能直接识别的需要转义,如 >, < 等-->
		<property key="conditions" value="stu_name LIKE :stuName: AND stu_sex = :stuSex: AND stu_age &gt;= :minAge: AND stu_age &lt;= :maxAge:" />
	</param>
		
	<relation id="select_2" templateId="select" paramId="select_2" name="SQL关系"/>

JPA方式接入SQL模板:

    @Test
    public void testQueryCountSqlTemplateFromJPA() throws Exception {
        IStudentSV studentSV = (IStudentSV) applicationContext.getBean("studentSV");

        Student student = new Student();
        student.setStuName("%张三%");
        student.setStuSex(1);
        student.put("minAge", 18);
        student.put("maxAge", 20);

        LOGGER.debug("Student Count = {}", studentSV.querySingle("select_2", student));
    }

运行结果:
在这里插入图片描述
JDBC方式接入SQL模板:

    @Test
    public void testQueryCountSqlTemplateFromJDBC() throws Exception {
        FleaJDBCConfig.init(DBSystemEnum.MySQL.getName(), "fleajpatest");

        Student student = new Student();
        student.setStuName("%李四%");
        student.setStuSex(1);
        student.put("minAge", 18);
        student.put("maxAge", 20);

        LOGGER.debug("Student Count = {}", FleaJDBCHelper.querySingle("select_2", student));
    }

运行结果:
在这里插入图片描述

2.8 单个结果查询–总和

相关配置可查看 :

	<param id="select_3" name="SQL模板參數" desc="用于定义SQL模板中的替换参数; 如需查询全部,则设置key=columns的属性值为 *,即可">
		<!-- 表名 -->
		<property key="table" value="student" />
		<!-- SELECT 显示列 -->
		<property key="columns" value="sum(stu_age)" />
		<!-- WHERE 子句 , 出现 xml不能直接识别的需要转义,如 >, < 等-->
		<property key="conditions" value="1=1" />
	</param>
		
	<relation id="select_3" templateId="select" paramId="select_3" name="SQL关系"/>

JPA方式接入SQL模板:

	@Test
    public void testQuerySumSqlTemplateFromJPA() throws Exception {
        IStudentSV studentSV = (IStudentSV) applicationContext.getBean("studentSV");
        LOGGER.debug("Student Age = {}", studentSV.querySingle("select_3", new Student()));
    }

运行结果:
在这里插入图片描述
JDBC方式接入SQL模板:

    @Test
    public void testQuerySumSqlTemplateFromJDBC() throws Exception {
        FleaJDBCConfig.init(DBSystemEnum.MySQL.getName(), "fleajpatest");
        LOGGER.debug("Student Age = {}", FleaJDBCHelper.querySingle("select_3", new Student()));
    }

运行结果:
在这里插入图片描述

上述单个结果查询,展示了count和sum,其他avg,max,min等相关内容可以移步 GitHub, 查看 StudentSqlTemplateTest

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

flea-db使用之SQL模板接入 的相关文章

  • AesEncryptHelper帮助类,实现C#版Aes加解密

  • Spring Boot 2.x使用篇(一)—— 初识Spring Boot

    文章目录 1 Spring Boot 2 x概述 1 1 Spring Boot与Spring 1 2 Spring Boot与Spring MVC 1 3 Spring Boot的优点 2 IntelliJ IDEA中搭建Spring B
  • virtio 与vhost_net介绍

    1 virtio基本构建模块 virtio是一种I O半虚拟化解决方案 是一套通用I O设备虚拟化的程序 是对半虚拟化Hypervisior中的一组通用I O设备的抽象 是标准化的的开放接口 以使得VM能够访问简化的设备 如块设备和网络设备
  • jAVA编写员工类Employee

    public class Employee private int id private byte sex private String name private String duty private float salary priva
  • 爬虫怎么解决IP限制问题?

    爬虫时 我们不可避免地会遇到网页的反爬封锁 所以有了爬虫的攻防 两股力量在攻防之间不断的对抗 接下来 我们将介绍六种爬虫时ip限制的方法 方法一 1 IP是必须的 如果条件允许 建议使用代理IP 2 在具有外部网络IP的机器上部署代理服务器
  • 良许Linux

    密码的重要性 相信大家都不言而喻 而密码泄漏或信息泄漏 经常是层出不穷地出现 令人防不胜防 所以 一个强大而复杂的密码是保证自己账户安全的第一步 为了防止信息泄漏 我们可以做些什么呢 密码足够复杂 每个平台密码都不一样 比如QQ 微信 邮箱
  • spring-security--基础--4.1--案例:简单登陆登出

    spring security 基础 4 1 案例 简单登陆登出 代码位置 https gitee com DanShenGuiZu learnDemo tree master spring security learn 1 介绍 通过Sp

随机推荐

  • 前端单页面(SPA)和多页面(MPA)

    了解单页面和多页面应用程序 单页面和多页面 SPA Single Page Application 单页面应用程序 例如 后台管理系统 整个应用中只有一个页面 index html MPA Multiple Page Application
  • C#网页设计 - Web控件

    1 服务器控件 ASP NET控件分为服务器控件和HTML标记 服务器控件是在服务器端运行的执行程序逻辑的组件 服务器端的程序可以访问这类控件 而HTML标记是在客户端运行的 服务器端程序不能访问这类控件 服务器控件编程的关键是runat属
  • 软件测试简历项目经验该怎么写?【两年经验】

    在写简历之前 我们先来看看失败者的简历和成功者的简历之间有什么区别 为什么成功者的简历可以在求职中起到 四两拨千斤 的作用 而失败者的简历却被丢进了垃圾桶 这两者到底有什么不同 成功的简历与失败的简历 我们发现 成功的简历尽管每一份都不同
  • i.MX 6ULL 驱动开发 一:搭建开发环境

    一 搭建编译环境 1 工具 工具 版本 开发板 正点原子 imx6ull 开发板 gcc gcc linaro 4 9 4 2017 01 x86 64 arm linux gnueabihf uboot uboot imx 2016 03
  • x64环境下_findnext()函数报错——0xC0000005: 写入位置 0xFFFFFFFFDF47C5A0 时发生访问冲突

    最近在搞单目相机位姿估计 相机标定参考了 OpenCV3学习笔记 相机标定函数 calibrateCamera 使用详解 附相机标定程序和数据 提供的代码 param File Directory 为文件夹目录 param FileType
  • 直链文件服务器,山寨云直链 服务器拒绝

    山寨云直链 服务器拒绝 内容精选 换一换 在您申请了云耀云服务器后 可以通过管理控制台查看和管理您的云耀云服务器 本节介绍如何查看云耀云服务器的详细配置 包括云耀云服务器名称 镜像信息 系统盘 数据盘 安全组 弹性公网IP等信息 登录管理控
  • React 跳转路由传参, 页面请求两次

    问题 路由跳转时 页面发出了两次一模一样的网络请求 但是当前页刷新时 仅发出一次请求 问题条件说明 在跳转路由上带参数 且参数中包含中文 问题分析 浏览器对中文参数进行转码导致组件加载两次 解决方案 在传递参数时 对参数用encodeURI
  • Mysql中的redo log和undo log

    redo log 日志 gt 持久性 重做日志 记录的是事务提交时数据页的物理修改 是用来实现事务的持久性 主要有重做日志缓冲 redo log buffer 以及重做日志文件 redo log file 组成 前者在内存 后者在磁盘 当事
  • Flutter的AspectRatio控件实现视频播放、图片播放按照长宽比缩放

    AspectRatio控件的作用 AspectRatio小部件用于调整其子级小部件的宽高比 它将其子级小部件的宽度调整为给定的宽度 并根据宽度计算出相应的高度 以保持指定的宽高比 使用场景 调整容器的宽高比 当您希望在布局中使用容器或小部件
  • TCP/IP协议思维导图

    期末考试时候自己用Xmind写的 我们的教材是谢希仁 计算机网络 第六版
  • PHP使用curl抓取网站数据,包括IP伪造和来源伪装等实现方法

    1 伪造客户端IP地址 伪造访问referer 一般情况下这就可以访问到数据了 curl setopt curl CURLOPT HTTPHEADER X FORWARDED FOR 110 85 108 185 CLIENT IP 110
  • js 文字超出长度用省略号代替,鼠标悬停并以悬浮框显示

    题目中问题一拆为二 文字在超出长度时 如何实现用省略号代替 超长长度的文字在省略显示后 如何在鼠标悬停时 以悬浮框的形式显示出全部信息 文字在超出长度时 如何实现用省略号代替 用CSS实现超长字段用省略号表示的方法 所有浏览器兼容 html
  • 环境配置:Win10 - VSCode - MinGW64 - OpenCV 4.5.0 - ZBar 0.23.92

    环境配置 Win10 VSCode MinGW64 OpenCV 4 5 0 ZBar 0 23 92 前言 1 VSCode 下载VSCode 安装 C C 插件 项目配置 2 MinGW 选择MinGW的原因 MinGW下载 开始安装
  • 删除了文件,磁盘空间没有释放,怎么办

    find home type f size 1024M 先找出大于1G的文件 再lsof grep file看文件被哪个进程占用 再kill掉进程 再删除文件
  • 【论文导读】Causal Machine Learning:A Survey and Open Problems

    最新的arXiv上的综述 迅速过一遍 2022 7 13 历史 C1已看完 三页 ML面临挑战 1 当数据分布发生变化时 泛化性能大幅下降 2 缺乏对生成模型样本的精细控制 3 有偏见的预测加强了对某些子群体的不公平歧视 4 过度抽象和与问
  • 怎么往服务器里拷贝文件,怎么往云服务器上拷贝文件

    怎么往云服务器上拷贝文件 内容精选 换一换 无法直接从云备份控制台查看备份中的数据 您可以通过以下几种方式进行查看 云服务器备份使用云服务器备份创建镜像后 再使用镜像创建云服务器 登录云服务器 查看服务器中的数据 云硬盘备份使用云硬盘备份创
  • mysql5.7递归查询

    MySQL 5 7支持递归查询 这种查询方式可以在一个表中查找具有父子关系的数据 递归查询通常使用WITH RECURSIVE语句进行构造 这个语句使用两个部分 递归部分和终止部分 递归部分定义了递归查询的开始条件和递归关系 而终止部分定义
  • LVGL使用记 - 数据更新显示

    介绍一下界面数据显示方法 关键API Set a an event handler function for an object Used by the user to react on event which happens with t
  • 数字藏品源码APP商城开发团队

    数字藏品源码APP商城开发团队 数字藏品商城软件开发 数字藏品分销模式开发 数字藏品交易平台开发 数字藏品现成源码软件定制 微信分销返利制度开发 NFT数字藏品平台开发定制 数字藏品系统多少钱 在全世界范围来看 数字藏品的外延更大 通常被称
  • flea-db使用之SQL模板接入

    SQL模板接入 引言 1 准备工作 2 使用讲解 2 1 SQL模板配置 2 2 新增数据 2 3 查询数据 2 4 更新数据 2 5 删除数据 2 6 分页查询 2 7 单个结果查询 计数 2 8 单个结果查询 总和 引言 本篇将要演示