当前位置: 首页 > news >正文

案例27-单表从9个更新语句调整为2个

目录

一:背景介绍

二:思路&方案

三:过程

       

1.项目结构

        2.准备一个普通的maven项目,部署好mysql数据库

        3.在项目中引入pom依赖

        5.编写MyBitis配置文件

        6.编写Mysql配置类

        7.编写通用Update语句

        8.项目启动类

四:总结


一:背景介绍

        在项目开发的过程中,我们编写sql语句的时候通常不会考虑到我要编写的sql语句之前是不是有人写过或者是不是可以复用别人的sql语句。而是直接我用了什么业务就直接写一个对应的sql语句。甚至有的时候我们自己写了之后都不清楚了。这样就没有使代码进行复用,也会带来代码带以维护的问题。

二:思路&方案

        1.编写通用的sql语句,使其满足百分之九十的sql语句。

        2.让代码的复用性更高。减少后期代码的维护成本。

三:过程

       

1.项目结构

                

                

        2.准备一个普通的maven项目,部署好mysql数据库

        3.在项目中引入pom依赖

    <dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><!--mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.2</version></dependency><!--junit--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency></dependencies>

        4.在db.properties配置文件中添加连接数据库的语句

driver=com.mysql.jdbc.Driver
url=jdbc:mysql:服务器IP:3306/wzill?useSSL=false&;useUnicode=true;CharacterEncoding=UTF-8
username=数据库账号
password=数据库密码

        5.编写MyBitis配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""https://mybatis.org/dtd/mybatis-3-config.dtd">
<!--configuration mybatis的核心配置文件-->
<configuration>
<!--引入外部配置文件--><properties resource="db.properties"/><!--配置--><settings><!--标准日志工厂设置--><setting name="logImpl" value="STDOUT_LOGGING"/>
<!--显示的开启全局缓存--><setting name="cacheEnabled" value="true"/></settings><!--可以给实体类取别名--><typeAliases><!--<typeAlias type="com.kuang.pojo.User" alias="User"/>--><!--可以指定一个包名,MyBatis会在包名下面搜索需要的Java Bean--><package name="com.wzl.CommonUse.pojo"/></typeAliases><!--environments 后面的s表示这是一个复数,可以编写多套环境  default表示默认的环境为development--><environments default="development"><!--编写一套环境 名称为configuration--><environment id="development"><!--jdbc的事务管理--><transactionManager type="JDBC"/><!--配置数据库相关数据--><dataSource type="POOLED"><property name="driver" value="${driver}"/><!--userSSL是一个按权连接 &amp是一个转移符 等同于and  CharacterEncoding=utf-8可以保证输入数据库的数据不乱码--><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments><!--绑定接口--><mappers><mapper class="com.wzl.CommonUse.dao.UserMapper"/></mappers>
</configuration>

        6.编写Mysql配置类

public class MybatisUtils {private  static SqlSessionFactory sqlSessionFactory;//静态代码块:一旦初始化就加载static{try {//使用Mybatis第一步:获取sqlSessionFactory对象//获取资源,直接读到mybatis-config.xmlString resource = "mybatis-config.xml";//需要用到输入流(InputStream) 把resource类加载进来InputStream inputStream = Resources.getResourceAsStream(resource);//通过build把输入流加载进来sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);} catch (IOException e) {e.printStackTrace();}}public static SqlSession getSqlSession() {//openSession中有自动commit(提交)事务的方法,加上true就能实现return sqlSessionFactory.openSession(true);}
}

        7.编写通用Update语句

   <update id="updateUser">update user<trim prefix="SET" suffixOverrides=","><if test="userPojo.uid != null">uid = #{userPojo.uid}</if><if test="userPojo.id != null">id = #{userPojo.id}</if><if test="userPojo.name != null">name = #{userPojo.name}</if><if test="userPojo.age != null">age = #{userPojo.age}</if><if test="userPojo.username != null">username = #{userPojo.username}</if><if test="userPojo.password != null">password = #{userPojo.password}</if><if test="userPojo.email != null">email = #{userPojo.email}</if><if test="userPojo.phone != null">phone = #{userPojo.phone}</if><if test="userPojo.addr != null">addr = #{userPojo.addr}</if><if test="userPojo.state != null">state = #{userPojo.state}</if></trim>where state = 2<if test="conditionParam.addr != null"> and addr = #{conditionParam.addr}</if><if test="conditionParam.phone != null">and phone = #{conditionParam.phone}</if><if test="conditionParam.name != null">and name = #{conditionParam.name}</if><if test="conditionParam.age != null">and age = #{conditionParam.age}</if><if test="conditionParam.username != null">and username = #{conditionParam.username}</if><if test="conditionParam.password != null">and password = #{conditionParam.password}</if></update>

        这样我们在编写对于 user表中的数据进行更新的时候只需要这一个通用的语句就可以了。涉及到批量更新的话,还是需要新的sql语句的。相信通过不断的学习,我们也可以把批量的和单独的进行一个代码的复用。

        8.项目启动类

public class Client{@Testpublic void test(){//获取数据库连接SqlSession sqlSession = MybatisUtils.getSqlSession();UserMapper userMapper = sqlSession.getMapper(UserMapper.class);//进行更新操作UserPojo UserPojo1 = new UserPojo();UserPojo UserPojo2 = new UserPojo();//假删除某个课的某个班的所有信息UserPojo1.setUsername("223667994");UserPojo2.setUsername("bbb");//进行调用userMapper.updateUser(UserPojo1,UserPojo2);}
}

四:总结

        在写代码之前先去看一下项目中是否有类似的业务逻辑,是否有可以复用的代码。来减少我们做无用功。代码的复用对于我们后期对于项目维护的成本非常低。

相关文章:

案例27-单表从9个更新语句调整为2个

目录 一&#xff1a;背景介绍 二&#xff1a;思路&方案 三&#xff1a;过程 1.项目结构 2.准备一个普通的maven项目&#xff0c;部署好mysql数据库 3.在项目中引入pom依赖 5.编写MyBitis配置文件 6.编写Mysql配置类 7.编写通用Update语句 8.项目启动类 四&#xff1a;总…...

Wordpress paid-memberships-pro plugins CVE-2023-23488未授权SQLi漏洞分析

目录 1.漏洞概述 2.漏洞等级 3.调试环境 4.漏洞代码 5 POC 1.漏洞概述 WordPress插件paid-memberships-pro版本<2.9.8中,容易受到REST路由“/pmpro/v1/order”的“code”参数中未验证的SQL注入漏洞的影响。攻击者可进行SQLi盲注,从而获取数据库权限。 CVE:...

【JavaWeb篇】JSTL相关知识点总结

目录 为什么会有JSTL&#xff1f; 什么是JSTL&#xff1f; 如何理解JSTL标准标签库呢&#xff1f; 如何使用JSTL&#xff1f; 第一步&#xff1a;引入JSTL标签库对应的jar包。 第二步&#xff1a;在JSP中引入要使用标签库。&#xff08;使用taglib指令引入标签库。&#x…...

【蓝桥杯刷题】坑爹的负进制转换

【蓝桥杯刷题】——坑爹的负进制转换&#x1f60e;&#x1f60e;&#x1f60e; 目录 &#x1f4a1;前言&#x1f31e;&#xff1a; &#x1f49b;坑爹的负进制转换题目&#x1f49b; &#x1f4aa; 解题思路的分享&#x1f4aa; &#x1f60a;题目源码的分享&#x1f6…...

react+antdpro+ts实现企业级项目二:Strapi及认证登陆模块

在上一章节中&#xff0c;我们已经成功创建并登陆了系统&#xff0c;现在需要为系统添加权限和登录认证&#xff0c;以提高系统的安全性、数据保护、个性化服务和用户体验。此外&#xff0c;添加权限和登录认证还可以方便管理员进行用户和授权管理。为了快速开发前端&#xff0…...

Android ANR trace日志如何导出

什么是ANR &#xff1f;上网搜索&#xff0c;一搜一大片&#xff0c;我就说个很容易识别的字眼&#xff0c;XXXAPP无响应 ANR trace日志如何导出&#xff1f;使用ADB命令&#xff1a; adb pull data/anr/trace.txt 你要存放的路径。查看ANR报错位置全局搜索你APP的包名&#x…...

Windows SSH 配置和SCP的使用

使用用户界面安装 ssh 功能 要在 Windows 10/11 上启用 SSH 服务器&#xff0c;请按照以下步骤操作&#xff1a; 按“Windows 键 I”打开“设置”菜单&#xff0c;然后选择“应用程序”。在左侧菜单栏中选择“应用和功能”。从列表中选择“可选功能”。 点击“添加功能”按钮…...

liunx 安装redsi和连接

liunx 安装redsi和连接 下载 &#xff08;https://download.redis.io/releases/&#xff09; 上传到 /usr/local目录 解压 tar -xvf redis-5.0.14.tar.gz 切换到 cd ./redis-5.0.14 编译 make 安装 make install 默认安装目录 /usr/local/bin/ 修改 ./redis-5.0.14/reds…...

接口里面可以写实现方法吗【可以】 、接口可以多继承吗【可以】

比如下面这道题&#xff1a; 问: 接口里面可以写方法吗&#xff1f; 答: 当然可以啊&#xff0c;默认就是抽象方法。 . 问&#xff1a; 那接口里面可以写实现方法吗&#xff1f; 答&#xff1a; 不可以&#xff0c;所有方法必须是抽象的。 . 问&#xff1a; 你确定吗&#xff1…...

【YOLOv8/YOLOv7/YOLOv5/YOLOv4/Faster-rcnn系列算法改进NO.57】引入可形变卷积

文章目录前言一、解决问题二、基本原理三、​添加方法四、总结前言 作为当前先进的深度学习目标检测算法YOLOv8&#xff0c;已经集合了大量的trick&#xff0c;但是还是有提高和改进的空间&#xff0c;针对具体应用场景下的检测难点&#xff0c;可以不同的改进方法。此后的系列…...

统计学习--三种常见的相关系数

1&#xff09;Pearson积差相关系数&#xff1a;用于量度两个变量X和Y之间的线性相关。它具有1和-1之间的值&#xff0c;其中1是总正线性相关性&#xff0c;0是非线性相关性&#xff0c;并且-1是总负线性相关性。Pearson相关系数的一个关键数学特性是它在两个变量的位置和尺度的…...

基于Django4.1.4的入门学习记录

基于Django4.1.4的入门学习记录Django创建Django项目创建工程工程目录说明运行开发服务器settings.py配置文件应用的创建创建应用模块应用模块文件说明App应用配置注册安装子应用数据模型ORM概述定义模型类生成数据库表查看数据库文件Admin管理工具管理界面本地化创建管理员注册…...

C++ Butterworth N阶滤波器设计

介绍一个 Butterworth Nth 滤波器设计系数的函数&#xff0c;像 Matlab 函数一样的&#xff1a; [bl,al]butter(but_order,Ws); 和 [bh,ah]butter(but_order,2*bandwidth(1)/fs,high);rtfilter 在 Ububtu 中&#xff0c;容易找到&#xff1a; $ aptitude search ~dbutterwo…...

UXP下不用任何框架创建自己的插件并试运行

在上一篇文章中《Windows下vue框架下的UXP插件开发环境搭建及程序试运行》&#xff0c;搭建的是利用vue框架进行开发的UXP开发环境&#xff0c;而且是把官方的案例插件直接添加进UDT&#xff0c;下面要说的是不利用任何js的框架创建和试运行自己的UXP插件程序&#xff0c;这样来…...

mac修改国内源快速安装brew

我是参考了清华源官网&#xff0c;有任何困惑直接访问该网址即可。这里给出精简版。 1. 更改镜像到~/.zshrc 终端添加方式 echo export HOMEBREW_API_DOMAIN"https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles/api" >> ~/.zshrcecho export HOMEBREW_…...

Me-and-My-Girlfriend-1靶场通关

Me-and-My-Girlfriend-1靶场通关 靶机ip:192.168.112.135 信息收集 端口&#xff1a;22、80 还是从80WEB服务器端口入手 对服务器目录进行扫描&#xff0c;扫出以下目录 访问80端口WEB服务&#xff0c;显示一段文字只允许本地用户访问。 一眼伪造ip&#xff0c;查看页面…...

2.6 棋盘覆盖

在一个2*x2‘个方格组成的棋盘中&#xff0c;若怡有一个方格与其他方格不同&#xff0c;则称该方格为特殊方格&#xff0c;且称该棋盘为一特殊棋盘。显然&#xff0c;特殊方格在棋盘上出现的位置有 4种情形因而对任何k0&#xff0c;有4‘种特殊棋盘。图2-4 申的特殊棋益是12时 …...

JMU软件20 大数据技术复习(只写了对比18提纲的变动部分)

原博主 博客主页&#xff1a;https://xiaojujiang.blog.csdn.net/ 原博客链接&#xff1a;https://blog.csdn.net/qq_43058685/article/details/117883940 本复习提纲只适用于JMU软件工程大数据课程&#xff08;ckm授课&#xff09; 具体内容参考老师提纲的考纲&#xff0c;18和…...

MySQL底层存储B-Tree和B+Tree原理分析

1.B-Tree的原理分析 &#xff08;1&#xff09;什么是B-Tree B-树&#xff0c;全称是 Balanced Tree&#xff0c;是一种多路平衡查找树。 一个节点包括多个key (数量看业务)&#xff0c;具有M阶的B树&#xff0c;每个节点最多有M-1个Key。 节点的key元素个数就是指这个节点能…...

基于Vue+Vue-cli+webpack搭建渐进式高可维护性前端实战项目

本文是专栏《手把手带你做一套毕业设计毕业设计》的实战第一篇&#xff0c;将从Vue脚手架安装开始&#xff0c;逐步带你搭建起一套管理系统所需的架构。当然&#xff0c;在默认安装完成之后&#xff0c;会对文件目录进行初步的细化拆分&#xff0c;以便后续功能迭代和维护所用。…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时&#xff0c;需要使用外部低速晶振...