自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(73)
  • 收藏
  • 关注

原创 Mybatis 动态SQL(include 标签)

写代码的时候有可能出现下面这样的情况,这样代码重复度很高,看起来笨笨的,我们可以把重复的代码给抽出来,通过<sql>标签给封装起来,然后再通过<include>标签进行引用。回到 userInfo2Mapper 接口,右键 Generate,test,勾选 selectByCondition ,ok,补充 test 代码。很明显,这两个代码里面都有 select * from userinfo,我们把他封装起来,id 不一定是selectTable,你随意取名。文件,写下两个方法的XML代码。

2024-01-25 09:57:39 538

原创 Mybatis 动态SQL删除操作

新建了一个 userInfo2Mapper 接口,然后写下如下代码,声明 batchDelete 方法。再回到接口,然后Generate,test,勾选 batchDelete,ok,然后补充代码。在resources 中创建 Userinfo2XMLMapper.xml 文件。再打开数据库查看,没毛病,11~14的数据都删了。

2024-01-22 00:03:22 466

原创 Mybatis 动态SQL(set)

然后我们回到接口 UserInfo2Mapper,右键,Generate,test,勾选 updateByCondition,ok。Userinfo2XMLMapper.xml 里面的 trim 标签也可以化简,如下图,其他的跟上面一样,也是可以正常运行的。然后在resources 中创建 Userinfo2XMLMapper.xml 文件,然后输入如下代码。创建一个接口 UserInfo2Mapper ,然后在接口中声明该方法。打开数据库看,没毛病。

2024-01-21 23:21:41 438

原创 刷题第一天

SS很明显,这题如果死算肯定会超出最大数据类型的范围,n∈[1,202320232023],n越大,其中包含10,2,5,的数字(5,12,25,32......)也变多,这些数字相乘末尾为0,这些数字越多,末尾的0也就越多,我们要求最后九位数字,我们就先看看到什么程度的时候最后九位数字都为0,最后我们再求后九位不为0的数的阶乘之和,这样数字范围就不会超标了,所以我们先估计一下大概多少数的阶乘会有9个0,假设50。

2024-01-19 23:50:26 423

原创 Mybatis 动态SQL条件查询(注释和XML方式都有)

将 Userinfo2XMLMapper.xml 文件中的 namespace 进行修改,改为 userInfo2Mapper 接口中的第一行 package 的内容再加上接口名。但是 trim 标签有个问题就是,如果所有where条件都为null的时候,会报错,因为where后面没东西了。再回到接口,然后Generate,test,勾选selectByCondition,ok。然后补充如下代码,用户输入什么条件,什么条件就不为空,就可以根据该条件进行查询。我们看日志会发现,多了一个and。

2024-01-19 11:46:18 792

原创 Mybatis 动态SQL插入操作②

按理来说是上面这样写,但是插入数据的时候,假如有两个字段没插入数据,那就会因为逗号的问题报错.比如 gender 和 phone 都没插入数据,那么 age 就成了最后的数据,age 后面跟着逗号就不行。上篇博客我们说.用户在表中插入数据的时候,有的数据可能不想插入,我们就需要设置,当用户插入这个字段的数据的时候就显示,不插入的话就为null,比如性别不想插入,那么 XML 代码如下。具体错误的日志我这里就不展示了,接下来我们说怎么解决逗号的问题。所以我们需要引入 trim标签 帮我们解决逗号问题。

2023-12-18 02:17:07 397

原创 Mybatis 动态SQL的插入操作

将 Userinfo2XMLMapper.xml 文件中的 namespace 进行修改,改为 userInfo2Mapper 接口中的第一行 package 的内容再加上接口名。再回到接口,然后Generate,test,勾选insertByXML,ok,先测试每个数据都插入的情况。然后老样子,Generate,test,勾选 insert ,然后补充代码,我们先每个数据都插入内容。用户往表中插入数据,有的数据可能不想插入,比如不想让别人知道自己的性别,性别就为空。数据库中也能成功找到刚刚插入的数据。

2023-12-17 02:13:00 482

原创 数据库连接池

数据库连接池负责分配,管理,释放数据库连接,和线程池很像,提前建好了一些连接放在池子里,有需要就自己拿,然后用完就放回去,可以避免频繁地创建连接和销毁连接。如果我们想换成 Druid ,引入依赖到 pom.xml 文件中就行。下面就是数据库连接池的日志,我们发现使用的是Hikari。这里有个连接是两者对比,可以进行了解。这样就能在日志中看见了。

2023-12-16 03:45:28 472

原创 # 和 $ 的区别②

(这样前面两个引号就会形成一对,后面两个引号形成一对,这就导致where后面的搜索条件变成username=0或者1=1,因为1=1肯定恒成立,这样运行出来的结果就是搜索到全部数据,这与我们的想法背道而驰)然后呢, # 是预编译SQL,将编译一次之后的SQL语句缓存起来了,后面再次执行的时候,省去了解析优化等过程,提高了效率,预编译SQL也可以说是一个模版,往里套数据就行.有的人可能会觉得那我们在排序和模糊查询的时候使用 $ ,其他有需要引号的情况只要拼接上引号也可以使用 $ ,那我们就不用 # 了吗?

2023-12-15 02:57:48 1179

原创 # 和 $ 的区别①

如果看不懂代码,就去看<<Mybatis 的操作(结合上文)续集>>,我这里为了简练一点就不多解释了。但是 $ 不会加上单引号, $ 是直接进行拼接,所以如果 $ 遇到 String 就要自己加上单引号。这是因为使用 # 的时候,如果参数为 String ,会自动加上单引号。然后我们使用"$" ,注意哦,这里的 ${} 外面加了单引号。然后我们再换一个案例,根据姓名查询数据。使用 # 查询 id 为 1 的内容。使用 $ 查询 id 为 1 的内容。# 和 $ 都是为了获取变量的值。

2023-12-14 02:48:51 419

原创 Mybatis XML 多表查询

但是因为 ArticleInfo 并没有 username 和 age ,所以返回对象为 ArticleInfo 的时候是无法返回 username 和 age 的。( ta 是表 articleInfo , tb 是表 userinfo )然后右键,Generate,test,勾选 selectArticleAndUserById ,ok,补充代码。先创建一个 java 类,写与 articleinfo 表的字段一一映射的java对象。这样就能拿到文章 id 为1的作者的相关信息了。

2023-12-08 18:58:21 832

原创 Mybatis XML改查操作(结合上文)

通常情况下数据库字段名为蛇形命名(delete_flag)和Java属性名称为驼峰命名(deleteFlag),所以我们如果能够自动转换,那就能成功查询了。resultMap 里面的 id 自己取名,里面 type 就是 : 你要映射的Java对象的类所在的packet+对象名。"查"操作(企业开发中尽量不使用*,需要哪些字段就写哪些字段,都需要就全写上)右键,Generate,test,勾选selectAll2,ok。然后右键,Generate,test,勾选update,ok。

2023-12-08 14:30:59 607

原创 Mybatis XML增删操作(结合上文)

然后在 UserInfoXMLMapper.xml 里面,每个字段前面都要加上 UserInfo2(@Param后面的内容)然后在 UserInfoXMLMapperTest 的log.info 里面加上插入的结果。在数据库中再次验证是否删除,上面是删除前,下面是删除后,删除成功了。然后右键,Generate,test,勾选insert2,ok。然后右键,generate,test,勾选insert,ok。然后右键,Generate,test,勾选delete,ok。插入数据如何进行重命名呢?

2023-12-06 20:44:14 1084

原创 Mybatis XML 配置文件

接下来就可以在这里面写代码了,写一个查询所有数据,resultType等号后面跟着的是UserInfoXMLMapper接口的第二行import 后面跟着的内容。然后在刚刚创建的 mapper 里面再创建一个 directory 名为 UserInfoXMLMapper.xml(跟上面接口名一样)这里面的namespace后面那一段,就是刚刚创建的接口的第一行package后面再加上接口名。这个跟注释的配置是一样的,username应该都是一样的,password记得写自己的。

2023-12-06 02:34:59 779

原创 Mybatis 操作续集(连着上文一起看)

当我们别的时候也需要查找 delete_flag 和 create_time 和 update_time,就也需要写这一段语句。Mybatis 会自动地根据数据库的字段名和Java对象的属性名进行映射,如果名称一样就进行赋值。"查"操作(企业开发中尽量不使用*,需要哪些字段就写哪些字段,都需要就全写上)但是那些名称不一样的,我们想要拿到,该怎么拿呢?右键,generate,test.勾选.ok。右键,generate,test,勾选,OK。右键,generate,test,勾选,OK。

2023-12-05 00:32:58 608

原创 Mybatis 操作续集(结合上文)

(就是username和password这些属性前面都加上重命名之后的名字,比如重命名为userinfo,就写为userinfo.username,还有@Param()括号里面写下要改的名字)当我们增加一个数据之后,如果我们想要获取它的 Id 进行别的操作,我们该如何获取 Id 呢?上面的 select 是 delete之前查找的,下面的是 delete 之后查找的。右键,generate,test,勾选,ok。右键,generate,test,勾选,OK。我们就会发现Id为 9 的数据被删除了。

2023-12-04 01:43:47 435

原创 Mybatis 操作续集2(结合上文)

Mybatis 是一个持久层框架,用于简化数据库的操作,和Spring 没有任何关系,我们现在能使用它是因为 Spring Boot 把Mybatis 的依赖给引入进来了,在 pom.xml 里面。依旧是右键,generate ,test,勾选,OK。然后在Mysql查查看有没有插入成功。Mybatis 如何进行重命名?看最后两行代码,这样就能重命名了。Mybatis 的增操作。

2023-12-03 02:43:49 500

原创 Mybatis 的操作(结合上文)续集

这里有个小提醒 : 开发规范中,使用 Mybatis 对数据库进行操作的操作类,也叫XXXXMapper。逻辑删除 : 比如一个数据中有一个变量为是否删除,想要删除就把这个变量设为0,没删除就设为1。持久层 : 指的就是持久化操作的层,通常指数据访问层(dao),是用来操作数据库的。Mybatis 是一款优秀的 持久性 框架,用于简化 JDBC 的开发。1.引入 Mybatis 依赖,还有对应数据库的依赖,比如 Mysql。企业中比较推荐逻辑删除,因为物理删除很难挽回,删错了就麻烦了。

2023-12-02 03:13:51 400

原创 Mybatis 的入门简单运用介绍

别忘了在application.yml 中配置url。再创建一个类实现 select * from。2.数据库对象和 java 对象的映射。接下来我们看看怎么使用 Mybatis。然后将其这些内容和Java对象进行映射。然后我们在浏览器中进行访问,成功拿到。再写一个类证明上述代码是否可以实现。Mybatis 的运用就是这么简单。Mybatis 用于操作数据库。我们先搞一些数据库内容。

2023-12-01 02:21:56 374

原创 Spring 日志

门面模式(Facade Pattern) 又称为外观模式,提供了一个统一的接口,用来访问子系统中的一群接口,其主要特征是定义了一个高层接口,让子系统更容易使用(解耦)举个例子就是家里有各种灯,有的人想要全部打开,一个一个开有点麻烦,想要一键就能打开所有灯,就可以把所有灯的开灯这一步封装起来。Spring 帮我们集成了日志框架,我们直接使用即可。我们就会发现打印的结果跟Spring打印格式一样。默认日志级别是Info,级别一下的就不打印了。我们测试一下用日志框架打印日志是如何。先写一段打印日志的代码。

2023-11-30 02:43:10 407

原创 Spring 配置

单引号会对特殊字符进行转义,因为\n 本身表示的意思是换行,但是使用单引号的时候,内容变成了 \n 而不是换行,所以认为是转义。properties 的代码格式一般为键值对的样式,以 = 分割,单词小写,单词之间用 . 分割。那些可能会发生改变的信息,与我的程序运行没有太大关系的,我们就把它放在配置文件中。但是我们稍作修改,把9090 前面的空格删掉,再次运行程序,发现修改端口失败了。yml 的格式有严格要求,我们要在值前面的冒号的后面加空格,空格不可省略。yaml 和 yml 是一样的,学会一个就行。

2023-11-20 01:15:14 323

原创 IoC & DI

如果存只有一个构造函数,@Autowired 可以省略,当有多个构造函数的时候,默认使用无参的构造函数,如果没有无参的构造函数,我们要告诉 Spring 我们用哪个构造函数,在那个构造函数上面添加 @Autowired 就行。五大注解只能加在类上,并且只能加在自己的代码上,如果我引入了一个 jar包,也希望交给Spring 管理,这是没有办法加五大注解的,这时候就要使用 @Bean。因为当我们用别的注解的时候,拿到的是同一个数据,地址都一样,我们拿 @Configuration 举例。

2023-11-18 21:37:14 129

原创 IoC和DI

1.类注解 : @Controller(控制器存储) , @Service(服务存储) , @Repository(仓库存储) , @Component(组件存储) , @Configuration(配置存储)控制权进行了反转,比如对某一个东西的控制权在 A 手上,结果变成了 B ,Spring 管理的是 bean ,所以这里的控制权指的是 bean 的控制权,也就是对象的控制权进行了反转。Spring 是包含众多工具的 IoC 容器,存的是对象,对象这个词在 Spring 的范围内,称之为 bean。

2023-11-17 02:13:34 248

原创 Spring IoC

Spring 是 IoC 容器,也就是控制反转的容器,创建对象的控制权交给了 Spring ,由Spring 来帮我们创建管理这些对象。IoC 是一种思想,DI(依赖注入)是一种实现方式,比如我们对上一篇图书管理系统的代码进行修改。IoC 控制反转=>控制权反转=>创建对象的控制权交给了Spring。现在我们写一个案例,一辆车的生产,这是方法1,分成五个类。Tomcat 是装web的容器。容器 : List/map 是装数据的容器。方法二的耦合度更低,相互之间的影响更小。Spring 容器装的是对象。

2023-11-16 00:06:09 240

原创 前后端交互案例,图书管理系统

然后我们在postman 先进行测试看看有没有问题,返回 true 那就是没问题了。参数 : userName=?&password=?响应 : List<BookInfo>然后对前端的代码进行补充,这样就做完了。先引入前端代码运行看看是否有问题。响应 : true/false。

2023-11-13 17:21:50 106

原创 案例续集留言板

我们将其复制到 idea 的 static 里面,然后运行代码,再用浏览器进行访问看看会不会出错,如下图没毛病。前端没有保存数据的功能,后端把数据保存下来(内存,数据库等等......)我们不要选太新的工具包,选使用的次数多的工具包,放进 pom.xml 里面。这样我们就不需要也一串 get和set方法了,这样我们的代码就更加清晰了。参数:MessageInfo (from,to,message)用 postman 测试后端代码,结果为true,没问题。但是上面这种引入包的方式太麻烦了,我们还有别的方法。

2023-11-13 02:34:19 394

原创 javaEE案例,前后端交互,计算机和用户登录

如果我们觉得前端也没有问题,请求也没有到达后端,实在不知道是哪里的问题,这时候还有一个办法,测试接口,用 Http 进行测试,因为我们后端提供的这个接口和前端没有任何关系。如果测试结果是没问题的,我们就排除了后端的问题,问题一定是在前端,如果前端也没错,我们就要考虑环境,大多数时候环境是没问题的。举个例子: 如果出现了错误,我们就在后端随便打印一段东西,这一串打印通常放在方法的第一行,然后运行代码。这时候我们要去查前端,按 F12 看控制台有没有报错,我们发现控制台没有报错。接下来我们补充前端的代码。

2023-11-11 23:49:47 1083

原创 【无标题】

在开始的时候,前后端没有分开的时候,我们需要返回 视图view,所以我们用 @Controller 来返回视图,随着前后端分离,后端不处理页面,就返回页面所需要的数据,就用 @ResponseBody 返回数据,然后 @RestController 是 @Controller 和 @ResponseBody 的合体,可以只写 @RestController,也可以写 @Controller 和 @ResponseBody。如果一个类中的所有方法返回的都是数据,我们就把这个注解加在类上。

2023-11-11 01:12:57 210

原创 javaEE进阶

用 fiddler 抓包就能发现这行数据是怎么来的,服务器告诉客户端要帮我们设置一个cookie,设置的cookie 内容如下,然后客户端接收到之后就会在 cookie 中加入这行内容,这就是 cookie 和 Session的关系,sessionId 可以看做他们俩之间的桥梁。我们发现 Servlet 的方式可以拿到所有 cookie ,但是 Spring 的方式只能一个一个地拿 cookie。Session 是不可以伪造的,这是学校系统记录在册的。Cookie 是可以伪造的,比如说学生证是可以伪造的。

2023-11-09 01:24:29 746

原创 JavaEE进阶3

在计算机领域,会话是一个客户和服务器之间的不中断的请求响应,对于客户的每个请求,服务器能够识别出请求来自于同一个用户,当一个未知的客户向 web 应用程序发送了第一个请求时就开始了一个会话,当客户明确表示结束会话或者服务器在一个时限内没有接收到客户的任何请求时,会话就结束了。举个例子,假如保安没有记忆功能,看到的每一个学生都是一样的,但是我们需要保安知道我们是这个学校的学生,这个时候学校给我们发了学生证,保安就会放我们进校,学生证是学生拿着的,学生证就可以认为是 Cookie。

2023-11-07 01:00:36 595

原创 Java EE进阶2

3)删除本地仓库的 jar 包,重新下载(可能由于网络的原因,上次下载的时候,只下载了一半),哪个包下不下来就删了重新下,因为如果只下载了一半,中央仓库就会以为已经有了这个包了,重新再下就会从中央仓库重新引进。当前阶段,MVC 的概念又发生了一些变化,后端开发人员不涉及前端页面的开发,所以也就没有 view 层,所以 view 又多了一层解释,之前返回的是视图,现在返回的是视图所需要的数据。这里的 Integer 不能换成 int,因为如果不给 age 赋值就会报错,int 类型不能为 null 值。

2023-11-05 01:24:52 490

原创 java EE 进阶

2)本地仓库:中央仓库地址在国外,会比较慢,本地仓库就相当于缓存,如果我们项目有依赖的话,先去本地仓库找,本地仓库如果没有就去中央仓库找,把项目从中央仓库下载到本地仓库,再从本地仓库依赖到项目里面,所以我们要用的依赖一定可以再本地仓库找到。依赖排除 : Maven 默认会把依赖的依赖也给引进去,但是如果我们不需要,就可以手动排除。框架可以说是实现了部分功能的半成品,还没装修的毛坯房,然后我们再自己打造成自己喜欢的成品。下图就是坐标,它的位置在仓库里,我们可以根据坐标然后在仓库找到它的位置。

2023-11-04 17:01:44 401

原创 Java 的 JDBC 编程

如果数据库和 java 代码都在一台主机上运行,这个 IP 就写作环回 IP 即可,但是如果 java 代码和数据库服务器在不同的主机上,就需要写对应数据库服务器的 IP 地址了,这个地址可以在 cmd 中查看,敲下 ipconfig 就行,冒号后面的就是这台设备的地址。interface 也是接口,特指 java 语法中的一种特殊语法格式(狭义的概念),Java 中的 interface 也是一种提供 api 的方式。插入删除修改,返回值都是一个简单的整数,但是对于查询来说,返回值是一个简单的"临时表"

2023-11-02 01:51:14 68

原创 mysql:B+树/事务

数据库是一个客户端服务器结构的程序,既然是服务器,服务器就可以同一时刻给多个客户端提供服务,这多个客户端就都能给服务器提交事务,如果提交的两个事务,是修改不同的数据库,修改不同的表,相互之间就没啥影响,但是修改的是同一个表的话,这个时候就可能存在麻烦。因为一个节点可以存多个 key,但是也不能无限存,当存储的 key 的数量达到一定程度的时候,就需要把这个节点给拆分,把这个节点中的一部分 key 以树的子节点的方式来进重新组织,这样就会衍生出新的叶子结点,当父节点被删了几个,叶子结点就会填补上。

2023-11-01 01:56:31 250

原创 Linux续集

要想能够完成部署,把博客系统给部署上去,需要先把 Java web 项目的环境给搭建好(博客系统运行过程中,依赖一些程序,就需要把依赖的程序给安装上)删除目录,不仅需要删除目录本身,也要删除目录内部包含的内容,往往需要递归删除,先进入目录,把目录内部的内容删除掉,在删除目录本体(类似于后序遍历)接下来就可以进行安装了,先确保在"管理员"身份下(root),centos已经是使用 root 登陆了,就可以安装了。这里的"|"叫做管道,能够把多个命令链接在一起,把前一个命令的输出作为另一个命令的输入。

2023-10-30 00:57:04 53

原创 Linux续集

vim 为了加快操作效率,引入了海量的快捷键,为了能够区分"快捷键"还是"输入的内容",给 vim 引入了不同的模式(mode),默认情况下,vim 处于普通模式(normal mode),此时键盘上按下的键,都是快捷键,不是真正的输入.(此时的冒号就相当于开启命令模式的快捷键)vim 提供了插入模式,此时键盘按键才是真正进行编辑,进入插入模式的方式有很多种,其中最简单的方式,就是在 normal mode 下,按小写字母 i 然后界面的左下角就会出现这个。敲个cd ,后面什么都不写就行。

2023-10-29 01:36:23 38

原创 Linux的基本介绍和三个常用命令

很多服务器产商.阿里云,腾讯云,华为云,金山云......自建了一些机房,养了一堆服务器,可以按需租给别人使用,这个可以完美解决外网IP的问题.就相当于租了一个电脑,虽然配置很低.而且不贵,学生可以一折购买。云服务器的操作系统都是 Linux 系统,这个系统和 Windows 差异很大,Windows 系统的特点就是图形化操作 ,Linux 一般在服务器上都是通过命令行来进行操作的.有很多不同的组织和个人,基于Linux内核,搭配上不同的程序(换了个皮),就构成了不同的"发行版",本质上都是一家人。

2023-10-28 01:52:03 46

原创 session生成登录页面

session 这个东西,在一个服务器上是存在很多份的,每个用户都应该有一个自己的 session,一个服务器同时会有多个用户,服务器就会使用Map的方式来组织多个 session。Servlet 也提供了 Session 相关的支持,实现登录功能不需要直接使用 Cookie api,直接使用 session 的 api 就可以了。多个客户端对应到多个键值对,键是sessionId,值是 session 对象,每个session 对象里头又可以保存这个用户其他的自定义的键值对。

2023-10-27 01:06:00 53

原创 cookie和session

总结Cookie 的工作流程,Cookie 从服务器中来,服务器调用一些相关的 api 就可以往响应里面添加 setcookie 字段,setcookie 里面就会包含一些程序员自定义的键值对,然后浏览器收到这样的键值对就会把它保存到浏览器本地,后续我们再给网站发送请求,就会把这样的键值对自动地带到 header 里面去,这就是 Cookie 的基本工作过程(很关键哦~)答:cookie中是键值对结构的数据,并且这里的键值对都是程序员自定义的(脱离源代码的情况下,外人是看不懂的)

2023-10-25 23:59:39 29

原创 HTTP协议2

body里的格式其实是可以有很多种,此处这个body的格式,和刚才说过的 query string 非常相似,是一个一个的键值对,中间用&进行连接,在登录场景中,这里就会包含这次登录的用户名和密码(密码是加密的,一般密码不会明文传输)实际上,URL来说,上述的几个部分,都是可以省略的,不是哪个部分都是必须得有的,IP地址/域名如果省略,此时相当于是访问房钱服务器的地址.header 中的键值对是由标准规定的(有哪些键,对应的取值有哪些,都是有规定的),也有可以自定义的部分,我们上面的都是标准规定的。

2023-09-24 21:49:48 62

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除