- 博客(46)
- 收藏
- 关注
原创 Spring事务的隔离级别
当前事务中,可以保证每次执行同一个SQL得到的结果都是相同的,即使另一个事务已经添加了某一组数据并提交,在当前事务中是不会显示的。如果被另一个事务添加的数据是不可重复的,当前事务想要添加相同的数据时,就会显示添加失败。因为Spring中的隔离级别和MySQL中的基本一致,我们可以放到一起去记忆。当前事务中,可以看到其他事务修改但未提交的数据,如果替他的事务修改之后进行回滚,那么当前事务就读到了一条不存在的数据,称之为脏读。将事务排队进行,脏读幻读不可重复读都不存在,但是效率很低。(存在不可重复读问题)
2023-03-17 16:01:40
205
原创 统一功能处理
2.将自定义拦截器配置到当前的项目中,将自定义拦截器加入到WebMvcConfigurer的addInterceptors。1.先自定义一个拦截器,需要实现HandlerInterceptor接口,并重写preHandle方法。步骤二、(可定义多个错误类型):实现异常的封装方法,给方法添加@ExceptionHandler注解。步骤二、实现继承WebMvcConfigurer的类,重写addInterceptors方法。可以注入多个拦截器,拦截多种方法,排除多种方法。2.重写里面的类,封装统一放回的方法。
2023-03-17 11:34:22
425
原创 SpringAOP的语法
execution ( <修饰符> < 返回类型 >< 包、类、方法(参数)>< 异常 >SpringAOP实现原理:建立在动态代理的基础上,他能代理的最小单位是 方法。这里是一个完整的环绕方法。
2023-03-16 13:16:49
111
原创 SpringAOP
1.切面(Aspect):定义AOP业务类型(要干嘛:要验证登录?3.切点:提供一组规则,用来匹配连接点。1.添加SpringAOP的框架支持。2.连接点:AOP中的所有方法。4.通知:提供AOP 方法实现。二、SpringAOP实现步骤。3.定义通知(很多种)
2023-03-16 12:30:10
52
原创 根据不同的环境搭配不通过的配置文件(多个配置文件)
命名需要符合规范:application-环境名 . yml(properites)2.在主配置文件(application.yml)中配置项目的运行平台。3.配置连接的数据库和MyBatis存储的xml的路径。1.先创建不同平台的配置文件。
2023-03-15 14:14:26
82
原创 动态SQL
set标签使用在修改数据时,配合if实现动态sql,set可以去掉多余的' , ',不论引号的位置的前后,都可以去掉,《使用trim》同样可以实现。where 去掉了前面的and,所以sql分开写时,尽量将and 放在前面。suffix:添加后缀, suffixOverridex: 去掉后缀。当前端传回来的sql中,有一些是非必填的选项时我们使用动态sql。②当所有参数都为空的时候,where自动省略。可以设置前后缀,以及去掉前后缀。情况一、不传递任何参数。情况二、传递一个参数。
2023-03-15 12:31:53
140
原创 ResultMap的使用:结果集(映射)字典
ArticleMapper.xml中的resultMap。UserMapper.xml中的resultMap。数据库名title,实体类属性name。
2023-03-13 18:13:53
212
原创 MyBatis的使用3
所以,平时尽量用#{ }的形式,只用在SQL语句(数量有限的)需要拼接时,使用${ }当需要传递的参数是一个SQL语句(不是某个参数的值)的时候,只能以${ }的形式。比如需要传递的是desc或者asc的时候,他们是SQL语句,不是参数的值。简单说,#{ }会给中间的内容加' ',而${ }什么都不加。我们发现,username和password的判断被绕过了。进行直接替换之后,我们得到了这样的语句。#{ }会进行预处理,不存在安全隐患。${ }会进行拼接处理,存在安全隐患。以此来避免SQL注入的风险。
2023-03-08 12:46:03
151
原创 MyBatis2
2.添加了mybatis的xml文件(实现了增删改查的功能->SQL语句)2.在对应的mapper.xml文件中使用标签来插入属性。1.被标识了@Mapper的interface接口。方法二、返回被添加对象的自增id(和方法一的主要区别在XML文件)a.设置要连接的mysql服务器的地址和相关信息。注意:方法名称以及参数要和insert标签中的信息一一对应。b.mybatis的xml文件存放目录。1.在interface接口的mapper类中声明方法。方法一、返回受影响的行数。
2023-03-06 15:00:18
44
原创 MyBatis
经过这些操作,我们可以说,创建了一个SSM项目,但是我们还没有配置要连接的数据库服务器地址,这个时候启动项目还是会报错。MyBatis模式是两个文件:@Mapper文件(只定义方法,不实现方法),方法的实现在XML文件中。2.2配置MyBatis中的XML保存路径(使用xml操作MyBatis)①搭建一个MyBatis开发环境(建立在SpringBoot和SpringMVC的基础上)MyBatis是一个用来更简单的操作和读取数据库的工具(框架)MyBatis定义:是一个优秀的持久层的框架(OMR框架)
2023-03-03 14:09:22
104
原创 SpringMVC 的使用2
1.servlet方法 @SessionAttribute(required = false\true,name="XX")String data。2.SpringMVC中每个方法都有两个隐藏对象;1.因为SpringMVC是基于servlet api实现的,所以使用servlet中方法同样可以进行参数获取。2.注解方式 @CookieValue("XX")访问fw的url会显示hello.thml中的内容。2.springmvc的方法。使用时直接在参数中添加即可。1.servlet中的方法。
2023-03-02 18:41:22
46
原创 SpringMVC的使用
Requestparam("XXX") String YYY-------->将前端传递过来的XXX变为YYY。使用说明:当上传文件时,使用POST 方式,将文件放进body中传输,不适用GET类型,URL中有一定的限制。使用required参数,可以控制username,name两个参数的使用情况。注意:对于参数的传递,基本数据类型的传递要使用包装类,原因在与,当参数为Null时,不用包装类会出现报错,其中,URL的参数名称需要与方法中的参数名称一致。spring会自动将对象的所有属性填充一个默认值。
2023-03-01 19:07:00
92
原创 SpringMVC项目的创建
SpringMVC(Spring Web MVC):基于MVC设计模式并在Servlet API基础上实现的一个web框架。通常所说SpringBoot项目就是SpringMVC项目,SpringWeb项目也是SpringMVC项目。2.实现idea的热部署:当SpirngBoot项目中的代码发生变化,idea会自动重启项目,更新代码。②设置RequestMapping支持Get,Post方法中的一种。方法三:@PostMapping,只支持Post方法。方法二:@GetMapping,只支持Get方法。
2023-02-28 23:35:57
266
原创 Springboot日志的使用
具体实现:在类中提供日志对象(每个类传递当前类(自己的)类型,他的好处在于可以更加直挂弄点定位到日志的输出类)1.在配置文件中设置日志保存的目录(windows系统的目录使用\\或者/)error只针对controller目录之下的日志级别设置。四、日志级别的精确化设置(给某个目录设置日志级别)由于提前设置的信息,可以直接看出日志出自哪个类。五、日志持久化(保存到磁盘内)---->二选一。2.使用日志对象通过方法打印日志信息。warn是整个项目的默认日志级别。2.在配置文件中设置日志的保存文件名。
2023-02-27 12:50:41
491
原创 SpringBoot的配置文件
①properties: key=value “=”的前后都不要有空格,key的前面,value的后面不要有空格,导致的报错很难发现。( idea社区版默认支持yml格式的配置文件的代码提示,properties想要有代码提示需要安装“Spring Tools”插件。前言:使用配置文件让我们拜托了代码的固定和死板,通过修改配置文件的内容,让我们做到了不修改代码也可以做到程序的变更,实现了耦合的下降。4.在进行集合存储时,与对象类似,需要注意名称之间的对应,很容易出错。
2023-02-23 13:14:32
241
原创 SpringBoot的使用和一些规范
在spring项目中,需要设置扫描路径,springboot项目不需要设置。一、创建一个springboot项目。
2023-02-23 12:19:59
168
原创 spring结尾
二、一个类型被多次注入spring之后(user1,user2),从spring中拿出时(user),程序出现异常,Autowired和Resource在进行注入时找到了两个user对象,报错。c.执行初始化方法【两种实现方法:注解方式 @PostConstruct 和XML
2023-02-22 22:41:22
51
原创 类注解和方法注解
一般的,Bean会有一个默认的命名,在重命名之后,新的命名会覆盖掉默认命名。--setter注入:是Spring早期版本推荐的注入方式,通用性不如构造方法注入。--构造方法注入:优点是通用性好,保证在调用对象之前,这个对象是一点过存在的。1.通过注解将bean存储到Spring中,这样的注解有类注解和方法注解两种。(4)类注解之间的关系:Component是其他注解的父类。(2) 添加了注解的类,必须放到扫描路径下才能被扫描到。--属性注入的写法最简单,缺点是不通用,只适用于Ioc框架。
2023-02-21 17:03:24
266
原创 SpringBoot的回忆
一、Spring是一个拥有众多工具的loc容器,有两个核心功能。举例:loc表示今晚想吃点好吃的,DI表示今晚吃海底捞。二、loc(控制反转)和Di(依赖注入的区别是什么?loc是一种指导思想,Di是指导思想的具体实现。三、Spring获取(上下文)对象的方式以及区别。2. 将Spring中的Bean对象取出来。1. 将Bean放进Spring容器中。
2023-02-17 23:57:59
43
原创 scnner.next()和scammer.nextLine()进行数据读取
在使用scnner.next()和scammer.nextLine()进行数据读取,将他们放进数组,两个方法出校的读取不一样的情况。区别在于next()遇到空格和回车读取一次,而nextLine()可以读取空格。显然,使用nextLine()方法,把数组的第一个元素读为空,使用nextLine方法,数组是{“”,“aa”,“bb”}使用next方法,数组是{“aa”,“bb”,“cc”}这里出现另一个问题,String数组中,不允许存在空格。next()方法读取的完整。通过debug发现,
2023-02-17 23:35:20
137
原创 多线程整理4
可以避免没有锁却执行释放锁的操作,以及释放锁的错误信息会覆盖业务报错信息,增加调试程序修复程序的复杂度。1.unlock一定要放在finally里面,如果没有反到finally中,可能导致锁资源不释放,永久占用的问题。创建锁的时候可以指定参数 ,默认情况下创建性能更高的非公平锁,使用参数true创建公平锁。3.synchronized是JVM层面提供的锁,自动加锁和释放锁,对于开发者无感。2.锁的类型不同,Lock默认是非公平锁,但是可以指定为公平锁。3.释放锁lock.unlock();
2022-12-29 22:47:09
37
原创 多线程整理3
从操作系统层面来看,synchronized是基于操作系统的 互斥锁(Mutex)实现的。对于同一个业务的多个线程来说,使用synchronized 进行加锁时,要使用同一个对象。1.守护线程是为了守护用户线程而存在的,当用户线程结束后,守护线程就没必要存在了。synchronized修饰 静态代码块时,用静态类(XXX.class)来修饰锁。②RUNNABLE:运行状态(可细化为运行和就绪两种,区别于是否得到时间片)⑥TERMINATED:销毁状态,线程执行完毕。c.可重入:锁中可以再来一个锁。
2022-12-26 23:33:06
34
原创 OR59 读入一个字符串str,输出字符串str中的连续最长的数字串
这里说下为什么if else 中的 else 包含了 新旧数字串的更新和清空 临时串的代码以及 判断最后一个数是数字的特殊情况
2022-11-22 22:10:05
80
原创 线程的安全问题--同步代码块\同步方法
1.问题:卖票过程中,出现重票、错票–>出现了线程的安全问题2.问题出现的原因:当某个线程操作车票的过程中,尚未操作完成时,其他线程参与进来操作车票3.如何解决:当一个线程A在操作共享数据ticket时,其他线程不能参与进来,直到线程A操作完之后,其他线程才可以操作共享数据ticket, 这种情况,即使线程A出现阻塞,也不能被改变4.在Java中,我们通过同步机制,来改变线程的安全问题声明:1.操作共享数据的代码就是需要被同步的代码2.共享数据:多个线程共同操作的变量,比如:ticket就是3
2022-06-13 21:25:42
81
原创 Runnable接口创建多线程
1.创建一个实现Runnable接口的类2.实现类去实现Runnable中的抽象方法;run()3.创建实现类的对象4.将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象5.通过Thread类的对象调用start()
2022-06-12 17:07:09
287
原创 Thread中常用的方法
1.start():启动当前线程,调用当前线程的run()2.run():通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中3.currentThread():静态方法,返回执行当前代码的线程4.getName():获取当前线程的名字5.setName():设置当前线程的名字6.yield():释放当前cpu的执行7.join():在线程A中调用线程B的join(),此时,线程A进入阻塞状态,知道线程B完全执行线程A才会结束阻塞状态。8.stop(): 过时的方法
2022-06-11 22:56:29
1002
原创 多线程的创建 方式一,继承Thread类
1.创建一个继承于Thread 类的子类2.重写Thread类的run()->将此线程执行的操作声明在run()中3.创建Thread类的子类对象4.通过此对象调用start()例子:遍历100内的所有偶数
2022-06-10 14:20:30
463
原创 尚硅谷项目三 TSUtility和Data
尚硅谷项目三 TSUtility和DataTSUtilitypackage com.atguigu.team.view;import java.util.*;/** * * @Description 项目中提供了TSUtility.java类,可用来方便地实现键盘访问。 * @author * @version * @date * */public class TSUtility { private static Scanner scanner = new Scan
2022-05-30 22:30:15
654
1
原创 try-catch-finally
一、异常的处理抓抛模型过程一 :抛:程序在正常执行的过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象,并将此对象抛出一旦抛出对象以后,其后的代码就不再执行过程二:抓可以理解为异常处理的方式①try - catch-finally②throws二、try - catch-finally的使用try{可能出现异常的代码}catch(异常类型1 变量名1){处理异常的方法1}catch(异常类型2 变量名2){处理异常的方法2}catch(异常类型3 变量名3){处
2022-05-29 10:54:29
134
原创 【无标题】
abstract:抽象的1.可以用来修饰:类、方法2.具体的:abstract修饰类:抽象类>此类不能实例化>抽象类中一定有构造器,便于子类实例化时调用(涉及:子类对象实例化的全过程)>开发中,都会提供抽象类的子类,让子类对象实例化,完成相关的操作--->抽象的使用前提:继承性abstract修饰方法:抽象方法>抽象方法只方法的声明,没方法体>包含抽象方法的类,一定是一个抽象类。 反之,抽象类中可以没有抽象方法的。 若子类重写了父类中的所的抽
2022-05-28 14:49:42
41
原创 尚硅谷每日一考
abstract能修饰哪些结构?修饰以后,有什么特点?类、方法。|.接口是否能继承接口?抽象类是否能实现(implements)接口?抽象类是否能继承非抽象的类?声明抽象类,并包含抽象方法。测试类中创建一个继承抽象类的匿名子类的对象抽象类和接口有哪些共同点和区别?5.如何创建静态成员内部类和非静态成员内部类的对象?...
2022-05-28 11:56:22
156
原创 接口 非匿名与匿名 类与对象
接口的使用1.接口的使用上同样满足多态2.接口:实际上定义了一种规范3.开发中,体会面向接口编程1.创建了接口的非匿名实现类的非匿名对象2.创建了接口的非匿名实现类的匿名对象3.创建了接口的匿名实现类的非匿名对象4.创建了接口的匿名实现类非匿名对象public class USBTest {public static void main(String[] args) { Computer com = new Computer();// Flash flash = new Fla
2022-05-27 20:31:09
227
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人