当前位置: 首页 > 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;以便后续功能迭代和维护所用。…...

第十三章:Java反射机制

第十三章&#xff1a;Java反射机制 13.1&#xff1a;Java反射机制概述 Java Reflection ​ Reflection(反射)是被视为动态语言的关键&#xff0c;反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息&#xff0c;并能直接操作任意对象的内部属性及方法。 ​ 加…...

iLok USB不识别怎么办?

我的iLok USB坏了吗&#xff1f; 我的iLok USB没有被系统或软件识别。 如果您的iLok USB未被识别&#xff0c;问题可能出在iLok USB、iLok软件或受保护的软件。 提示如果您使用USB集线器&#xff0c;请确保您使用正确的集线器电源适配器。排除硬件&#xff1a;将iLok USB直接插…...

【LeetCode与《代码随想录》】二叉树篇:做题笔记与总结-JavaScript版

文章目录代码随想录144. 二叉树的前序遍历94. 二叉树的中序遍历145. 二叉树的后序遍历102.二叉树的层序遍历226.翻转二叉树101. 对称二叉树104.二叉树的最大深度111.二叉树的最小深度222.完全二叉树的节点个数110.平衡二叉树257. 二叉树的所有路径404.左叶子之和513.找树左下角…...

机器人运动|浅谈Time Elastic Band算法

前言在自主移动机器人路径规划的学习与开发过程中&#xff0c;我接触到Time Elastic Band算法&#xff0c;并将该算法应用于实际机器人&#xff0c;用于机器人的局部路径规划。在此期间&#xff0c;我也阅读了部分论文、官方文档以及多位大佬的文章&#xff0c;在此对各位大佬的…...

【Linux】网络基础(1)

前言 相信没有网络就没有现在丰富的世界。本篇笔记记录我在Linux系统下学习网络基础部分知识&#xff0c;从关于网络的各种概念和关系开始讲起&#xff0c;逐步架构起对网络的认识&#xff0c;对网络编程相关的认知。 我的上一篇Linux文章呀~ 【Linux】网络套接字编程_柒海啦的…...

限流算法详解

限流是我们经常会碰到的东西&#xff0c;顾名思义就是限制流量。它能保证我们的系统不会被突然的流量打爆&#xff0c;保证系统的稳定运行。像我们生活中&#xff0c;地铁就会有很多护栏&#xff0c;弯弯绕绕的&#xff0c;这个就是一种限流。像我们抢茅台&#xff0c;肯定大部…...

Spark/Hive

Spark/HiveHive 原理Spark with HiveSparkSession Hive Metastorespark-sql CLI Hive MetastoreBeeline Spark Thrift ServerHive on SparkHive 擅长元数据管理Spark 擅长高效的分布式计算 Spark Hive 集成 : Hive on Spark : Hive 用 Spark 作为底层的计算引擎时Spark w…...

HashMap底层的实现原理(JDK8)

目录一、知识点回顾二、HashMap 的 put() 和 get() 的实现2.1 map.put(k, v) 实现原理2.2 map.get(k) 实现原理三、HashMap 的常见面试题3.1 为何随机增删、查询效率都很高&#xff1f;3.2 为什么放在 HashMap 集合 key 部分的元素需要重写 equals 方法?3.3 HashMap 的 key 为…...

操作系统-整理

进程 介绍 进程是系统进行资源分配和调度的一个独立单位。每个进程都有自己的独立内存空间&#xff0c;不同进程通过进程间通信来通信。由于进程占据独立的内存&#xff0c;所以上下文进程间的切换开销&#xff08;栈、寄存器、虚拟内存、文件句柄等&#xff09;比较大&#…...

系统换行符的思考

各系统换行符 换行符&#xff0c;也即是回车换行&#xff0c;因为表示为Carriage-Return和Line-Feed。 回车用Return-Carrige表示&#xff0c;简写为CR&#xff0c;字符表示为\r。 换行用Line-Feed表示&#xff0c;简写为LF&#xff0c;字符表示为\n。 由于历史原因&#xf…...

海外b2b平台有哪些/seo关键词快速排名前三位

很早以前就一直关注像GoogleMap这样的地图系统&#xff0c;提前把地图图片生成好并按一定的规则进行存储&#xff0c;显示的时候&#xff0c;可以根据查看的范围再计算出对应的图片地址&#xff0c;获取这些图片&#xff0c;进行显示&#xff0c;所以速度会比传统的GIS实时渲染…...

网站 建设标准/网站seo文章

在Oracle,SQL Srever ,Mysql等主流数据库中最常用的字符串函数&#xff1a; 一.substr函数&#xff1a; 取得字符串中指定起始位置和长度的字符串默认是从起始位置到结束的子串。 substr( string&#xff0c;start_position,[length]) substr(目标字符串,开始位置,长度) …...

重庆如何快速制作一个网站/武汉十大技能培训机构

直接上代码 几个参数和函数: CSS absolute: 绝对定位&#xff0c;他是参照浏览器的左上角&#xff0c;配合TOP、RIGHT、BOTTOM、LEFT(下面简称TRBL)进行定位&#xff0c;在没有设定TRBL&#xff0c;默认依据父级的做标原始点为原始点。可脱离文档流。要激活对象的绝对(absolute…...

wordpress app上传/网站排名怎么优化

推广自己 如何做自媒体(先让自己在小部分人群中出名起来) 为啥你总是不能拿到满意的薪资 从能力的角度上来说&#xff0c;算不上差&#xff0c;也有很多项目经验&#xff0c;但是却无法找到一个满意的工作。一方面是多年的工作经验为他带来了过高的溢价&#xff0c;让他无法接…...

二级域名做城市分网站/企业在线培训平台

在c中&#xff0c;io操作都是有io对象来实现的&#xff0c;每个io对象又管理一个缓冲区&#xff0c;用于存储程序读写的数据。 只有缓冲区被刷新的时候缓冲区中的内容才会写入真实的文件或输出设备上。 那么&#xff0c;什么情况下会刷新输出缓冲区呢&#xff0c;有如下五种情…...

会昌县城乡规划建设局网站/中国网络优化公司排名

查看MYSQL数据库中所有用户及拥有权限查看MYSQL数据库中所有用户mysql>SELECT DISTINCT CONCAT(User: ,user,,host,;) AS query FROM mysql.user;---------------------------------------| query |--------------------------------------…...