自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 匿名内部类的概念和使用详解

顾名思义,内部类就是在一个类里再定义类。内部类是类的五大成员之一,五大成员包括:属性、方法、构造方法、代码块、内部类。内部类的访问特点:内部类可以直接访问外部类的成员,包括私有。而外部类要访问内部类的成员必须要创建对象

2022-11-26 15:59:46 1902 1

原创 Centos7安装Redis

安装完成Redis,我们就可以操作Redis,实现数据的CRUD了。如果要让Redis以后台方式启动,则必须修改Redis配置文件,就在我们之前解压的redis安装包下(其他的常见配置可以选择配置,比如监听的端口、工作目录、指定日志文件名开启日志的保存功能,不必要。redis的启动方式有很多种,例如默认启动,指定配置启动,开机自启。可以下载各种redis的客户端,这里使用的是RESP。可以在centos进入redis进行数据库的操作。

2022-10-28 10:06:58 17082

原创 AutoGenerator代码生成器的使用

首先,我们需要创建maven项目,在MyBatisPlus工程的基础上再导入,代码生成器和velocity模板引擎的依赖。对于代码生成器中的代码内容,我们可以直接从官方文档中获取代码进行修改,

2022-10-24 21:13:14 813

原创 乐观锁在Mybatis修改中的应用

当线程 A 要更新数据时,在读取数据的同时也会读取 version 值,在提交更新时,若刚才读取到的 version 值与当前数据库中的 version 值相等时才更新,否则重试更新操作,直到更新成功。乐观锁假设数据一般情况不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果冲突,则返回给用户异常信息,让用户决定如何去做。注意:我们使用的这种方式针对于小型企业的解决方案,因为数据库本身的性能就是个瓶颈,如果对其并发量超过2000以上的就需要考虑其他的解决方案了。

2022-10-24 20:39:28 1226

原创 MyBatisPlus条件查询的三种格式

在进行查询的时候,我们的入口是在Wrapper这个类上,因为它是一个接口,所以我们需要去找它对应的实现类,关于实现类也有很多,说明我们有多种构建查询条件对象的方式。此时我们再次编写条件的时候,就不会存在写错名称的情况,但是qw后面多了一层lambda()调用。首先,我们了解到MyBatisPlus将书写复杂的SQL查询条件进行了封装,使用编程的形式完成查询条件的组合。Wrapper类就是用来构建查询条件的。这种方式实现简单,但有个小问题就是在写条件也就是实体类中的属性的时候容易出错,就会导致查询不成功。

2022-10-23 16:16:45 719

原创 SpringMVC配置异常处理

HandlerExceptionResolver接口的实现类有:DefaultHandlerExceptionResolver和SimpleMappingExceptionResolver。SpringMVC提供了一个处理控制器方法执行过程中所出现的异常的接口:HandlerExceptionResolver。SpringMVC提供了自定义的异常处理器SimpleMappingExceptionResolver。

2022-10-04 09:37:37 354

原创 SpringMVC拦截器的配置及其细节

preHandle()按照配置的顺序执行,而postHandle()和afterCompletion()按照配置的反序执行。preHandle():在控制器方法执行之前执行,其返回值表示对控制器方法的拦截(false)或放行(true)拦截器的preHandle()返回false之前的拦截器的afterCompletion()会执行。拦截器的preHandle()返回false和它之前的拦截器的preHandle()都会执行。所有的拦截器的postHandle()都不执行。

2022-10-03 22:44:29 547

原创 SpringMVC的文件上传与下载的实现

在SpringMVC的文件上传与下载的实现要比在原生的servlet中实现更加容易,配置文件做一些配置就能解决一些功能。

2022-10-02 22:06:11 314

原创 解决:Java source1.5不支持diamond运算符

diamond运算符,指的是JDK1.7的一个新特性而Maven默认用的是JDK1.5去编译。

2022-10-02 13:10:33 1540

原创 解决:HTTP Status 500 - null\1.jpg (系统找不到指定的路径。)

如果是在@Controller中是C:\Users\dengxuelong\Desktop\,这个路径不会是在webapp下,要获得webapp在磁盘上的位置要使用request.getSession().getServletContext().getRealPath("/")。 而在其它的普通类中就是当前项目在磁盘上的位置

2022-10-02 12:38:29 762

原创 SpringMVC处理Ajax请求及处理和响应json格式的数据

首先在maven工程里创建新的module(其他方式均可),然后在pom文件中导入依赖,在其中包括我们上文所写到的jackson的依赖,然后配置web里的web.xml编码过滤器、处理请求方式过滤器以及SpringMVC的前端控制器。c>在处理请求的控制器方法的形参位置,直接设置json格式的请求参数要转换的Java类型的形参,使用@RequestBody注解标识即可。method:"", //请求方式(以name=value&name=value的方式发送的请求参数,a>导入Jackson的依赖。

2022-10-01 08:53:55 1615

原创 解决:XML 解析错误:语法错误 位置:http://localhost:8080/...

XML 解析错误:未找到元素位置:http://localhost:8080/ …由于我的idea默认打开的浏览器是Firefox,于是我尝试使用Edge发现可以得到测试结果。但检查到controller与axios的代码没有问题。在方法里设置request和resopnse的编码格式。

2022-09-30 17:10:18 1878 2

原创 RESTful的介绍和简单实现

资源:资源是一种看待服务器的方式,即,将服务器看作是由很多离散的资源组成。每个资源是服务器上一个可命名的抽象概念。因为资源是一个抽象的概念,所以它不仅仅能代表服务器文件系统中的一个文件、数据库中的一张表等等具体的东西,可以将资源设计的要多抽象有多抽象,只要想象力允许而且客户端应用开发者能够理解。与面向对象设计类似,资源是以名词为核心来组织的,首先关注的是名词。一个资源可以由一个或多个URI来标识。URI既是资源的名称,也是资源在Web上的地址。

2022-09-28 19:50:25 215

原创 SpringMVC中的视图

当控制器方法中所设置的视图名称以"forward:"为前缀时,创建InternalResourceView视图,此时的视图名称不会被SpringMVC配置文件中所配置的视图解析器解析,而是会将前缀"forward:"去掉,剩余部分作为最终路径通过转发的方式实现跳转。若使用的视图技术为Thymeleaf,在SpringMVC的配置文件中配置了Thymeleaf的视图解析器,由此视图解析器解析之后所得到的是ThymeleafView。SpringMVC视图的种类很多,默认有转发视图和重定向视图。

2022-09-28 14:30:10 568

原创 向会话域和应用域共享数据

向session域和application域中共享数据使用ServletAPI的方式。原因是步骤简单,而对于request域共享数据是不推荐。

2022-09-28 12:12:01 207

原创 使用ModelAndView向request域对象共享数据

在SpringMVC中向域对象共享数据的方法有多种2.使用Model向请求域共享数据3.使用ModelMap向请求域共享数据4.使用Map向请求域共享数据其中2、3、4的方式底层也都是BindingAwareModelMap实现代码如下:

2022-09-27 20:34:30 621

原创 解决获取请求参数乱码的问题

SpringMVC中处理编码的过滤器一定要配置到其他过滤器之前,否则无效。

2022-09-27 16:44:43 95

原创 SpringMVC通过pojo获取请求参数

要在控制器方法的形参位置设置实体类类型的形参,要保证实体类中的属性的属性名和请求参以通过实体类类型的形参获取请求参数。这里我们先创建一个User实体类。

2022-09-27 10:51:52 250

原创 SpringMVC通过控制器方法的形参获取请求参数

在使用SpringMVC框架后,在控制器方法的形参位置,设置和请求参数同名的形参,当浏览器发送请求,匹配到请求映射时,在DispatcherServlet中就会将请求参数赋值给相应的形参。-defaultValue:设置当没有传输value所对应的请求参数时,为形参设置默认值,此时和required属性值无关。若设置为false,则表示value所对应的请求参数不是必须传输,若未传输则形参值为null。只需要在控制器方法的形参位置,设置一个形参,形参的名字和请求参数的名字一致即可。

2022-09-27 10:06:46 433

原创 @RequestMapping注解的属性的使用及具体细节详解

需要在@RequestMapping注解的value属性所设置的路径中,使用{xxx}的方式表示路径中的数据再通过@PathVariable注解将占位符所标识的值和控制器方法的形参进行绑定。作用:通过请求的请求头信息匹配请求,即浏览器发送的请求的请求头信息满足headers属性的设置 (用法与params属性的用法一样)作用:通过请求的请求参数匹配请求,即浏览器发送的请求的请求参数必须满@params属性的设置。@RequestMapping标识一个类:设置映射请求的请求路径的初始信息。

2022-09-26 17:36:27 3292

原创 SpringMVC的初步使用

MVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分M:Model,模型层,指工程中的JavaBean,作用是处理数据JavaBean分为两类:一类称为实体类Bean:专门存储业务数据的,如 Student、User 等;一类称为业务处理 Bean:指 Service 或 Dao 对象,专门用于处理业务逻辑和数据访问。V:View,视图层,指工程中的html或jsp等页面,作用是与用户进行交互,展示数据。

2022-09-24 11:15:59 112

原创 基于注解的声明式事务实现事务功能

存在的缺陷:细节没有被屏蔽:具体操作过程中,所有细节都需要程序员自己来完成,比较繁琐;代码复用性不高:如果没有有效抽取出来,每次实现功能都需要自己编写代码,代码就没有得到复用。既然事务控制的代码有规律可循,代码的结构基本是确定的,所以框架就可以将固定模式的代码抽取出来,进行相关的封装。在没有使用Spring框架之前,通过编程式事务实现事务的管理即自己写代码实现功能。在需要被事务管理的方法上添加@Transactional注解,该方法就会被事务管理。2、标识在类上,该类中所有的方法都会被事务管理。

2022-09-21 21:04:33 201

原创 Spring整合Junit4和JdbcTemplate实现查询添加

要做的准备工作有加入依赖、创建jdbc.properties、配置Spring的配置文件。Spring框架对JDBC进行封装,使用JdbcTemplate方便实现对数据库操作。最后基于User表创建User类可以实现测试。

2022-09-20 09:46:52 249

原创 基于XML的AOP实现

基于xml的AOP的实现与基于注解的实现原理一致,只需要了解。参考基于注解的AOP环境。

2022-09-15 16:33:22 163

原创 基于注解的AOP环绕通知

环绕通知本质上就是环绕通知的这一个方法实现了包括前置通知、返回通知、异常通知、后置通知所有的方法的实现。与动态代理实现的方式一样(方法的内容)这里前面的方法类不再给出,可以参照上一篇文章。

2022-09-15 11:05:58 873

原创 基于注解的AOP各种通知的使用

在通知方法的参数位置,设置joinPoint类型的参数,就可以获取连接点所对应的方法的信息。@AfterReturning:返回通知,在目标对象方法返回之后执行。@After:后置通知,在目标对象方法的Finnally字句中执行。第一行的写法是写死的,只针对add方法 第二行是用于所有方法。@Before:前置通知,在目标对象方法执行之前执行。//@Pointcut:声明一个公共的切入点表达式。//获取连接点对应方法的签名信息。表示任意的访问修饰符和返回类型。//获取连接点所对应方法的参数。

2022-09-15 10:58:11 242

原创 代理模式之动态代理

动态代理的实现主要是通过newProxyInstance():创建一个代理实例,通过newProxyInstance里的三个参数配置实现。在以后的AOP面向切面编程的底层就是动态代理。要求必须有接口,最终生成的代理类和目标类实现相同的接口在com.sun.proxy包下,类名为¥proxy2。最终生成的代理类会继承目标类,并且和目标类在相同的包下。

2022-09-13 21:29:41 199

原创 代理模式之静态代理

它的作用就是通过提供一个代理类,让我们在调用目标方法的时候,不再是直接对目标方法进行调用,而是通过代理类间接调用。让不属于目标方法核心逻辑的代码从目标方法中剥离出来——解耦。调用目标方法时先调用代理对象的方法,减少对目标方法的调用和打扰,同时让附加功能能够集中在一起也有利于统一维护。个人理解:就是在一些方法实现中一些功能比如带日志的实现类,需要在类中实现日志输出的代码。它对核心业务功能有干扰,分散在各个业务功能方法中,不利于统一的封装和维护。使用代理模式通过代理类来实现这些分散的方法并调用目标方法。

2022-09-13 15:49:35 156

原创 Spring基于注解的自动装配

基于XML的自动装配是在配置文件的bean里设置autowire属性,有byType,byName的方式。c>若byType、byName的方式都无法实现自动装配,即IOC容器中有多个类型匹配的bean。b>若有多个类型匹配的bean,此时会自动转换为byName的方式实现自动装配的效果。通过该注解的value属性值,指定某个bean的id,将这个bean为属性赋值。且这些bean的id和要赋值的属性的属性名都不一致,此时会抛出异常。c>标识在为当前成员变量赋值的有参构造上。b>标识在set方法上。

2022-09-12 19:55:37 717

原创 Spring基于注解管理bean

使用注解的方式需要在配置文件中配置扫描,通过注解+扫描所配置的bean的id,默认值为类的小驼峰,即类名的首字母为小写的结果(可以通过标识组件注解的value属性值自定义id)和 XML 配置文件一样,注解本身并不能执行,注解本身仅仅只是做一个标记,具体的功能是框架检测到注解标记的位置,然后针对这个位置按照注解标记的功能来执行具体操作。本质上:所有的一切操作都是由Java代码完成的,XML和注解只是告诉框架中的Java代码如何执行。以下为具体的代码实现。

2022-09-12 19:39:05 116

原创 Spring基于XML的自动装配

1.no,default:表示不装配,即bean中的属性不会自动匹配某个bean为属性赋值,此时属性使用默认值。根据指定的策略,在IOC容器中匹配某一个bean,自动为指定的bean中所依赖的类类型或接口类型属性赋值。3.byName:将要赋值的属性的属性名作为bean的id在IOC容器中匹配某个bean,为属性赋值。总结:当使用byType实现自动装配时,IOC容器有且只有一个类型匹配的bean能够为属性赋值。2.byType:根据要赋值的属性类型,在IOC容器中匹配某个bean为属性赋值。

2022-09-12 19:19:52 245

原创 Spring中FactoryBean

FactoryBean是Spring提供的一种整合第三方框架常用的机制。和普通的bean不同,配置一个FactoryBean类型的bean,在获取bean的时候得到的并不是class属性中配置的这个类的对象,而是getObject()方法的返回值。通过这种机制,Spring可以帮我们把复杂组件的创建的详细过程和繁琐细节都屏蔽起来,只把最简介的使用界面展示出来。将来我们整合mybatis时,Spring就是通过FactoryBean机制来帮助我们创建SqlSession Factory对象的。

2022-09-12 18:40:20 231

原创 Spring中Bean的生命周期

bean的后置处理器会在生命周期的初始化前后添加额外的操作,需要实现BeanPostProcessor接口,且配置到IOC容器中,需要注意的是,bean后置处理器不是单独针对某一个bean生效,而是针对IOC容器中所有bean都会执行。最后在测试文件中创建ioc容器,获取bean。若bean的作用域为单例时,生命周期的前三个步骤会在获取IOC容器时执行。若bean的作用域为多例时,生命周期的前三个步骤会在获取bean时执行。

2022-09-11 12:22:01 86

原创 Spring中Bean的作用域

另外,在WebApplicationContext环境下还会有另外两个作用域(不常用),一个是request,一个是session。singleton(默认):在IOC容器中,这个bean的对象始终为单实例。也就是表示获取该bean所对应的对象都是同一个。prototype:这个bean在IOC容器中有多个实例。也就是表示获取该bean所对应的对象都不是同一个。可以得到结果获取到的bean所对应的对象是同一个。在Spring中可以通过配置bean标签的。来指定bean的作用域范围。

2022-09-11 12:00:05 138

原创 Spring依赖注入之为数组和集合类型赋值

创建一个teacher类,在里面定义tid,tname两个属性。之后再student类中设置一个Map集合类型的teacherMap。这里我们在创建的学生类里定义一个string类型的数组hobby。在clazz中添加list集合属性。

2022-09-11 11:45:54 236

原创 Spring依赖注入为类属性赋值的方式

级联的方式保证提前为clazz属性赋值或实例化,所以还需要定义如下的clazzOne类来先给这个类的属性赋值,场景为在Student类中定义一个类类型的属性Clazz,我们去给这个类类型的属性赋值。只能在当前的内部使用,不能直接通过ioc容器获取。只能在当前的内部使用,不能直接通过ioc容器获取。要保证提前为clazz属性赋值或实例化。引用IOC容器中的某个bean的id。1.使用外部bean。3.使用内部bean。

2022-09-08 17:55:41 288

原创 Spring依赖注入为字面量类型赋值的方式

这里由于构造器注入可以直接利用构造方法实现赋值,不过由此产生了当在Student类中由多个构造类可以匹配时无法匹配我们想要的属性,解决方式就是在constructor-arg标签中加上name属性。和构造器注入(不常用),另外字面量中涉及到特殊字符的赋值,有两种解决方式:用其对应的标识和XML中的一个特殊的标签CDATA节。这里两种方式实现""给sname的赋值。为字面量赋值一般用两种方式处理。下面是具体的代码解释。

2022-09-08 11:44:15 244

原创 Spring获取bean的三种方式

根据id获取的bean一定是唯一的,但是一般需要强转对象来获取到。根据类型获取是用到最多的,一般在配置文件种一个类对应一个id。如果组件类实现了接口,根据接口类型可以获取 bean 吗?答:可以,前提是bean唯一。

2022-09-07 18:13:12 2793

原创 分页插件的使用

主要有两点,在查询功能之前要开启分页功能;hasPreviousPage/hasNextPage:是否存在上一页/下一页。navigatepageNums:导航分页的页码,[1,2,3,4,5]isFirstPage/isLastPage:是否为第一页/最后一页。navigatePages:导航分页的页码数。这里附上pageInfo里的分页相关数据。pageSize:每页显示的条数。size:当前页显示的真实条数。nextPage:下一页的页码。pageNum:当前页的页码。prePage:上一页的页码。

2022-09-07 16:32:44 546

原创 MyBatis的逆向工程

逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源:Java实体类、Mapper接口、Mapper映射文件。正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。核心配置文件mybtis-config.xml在创建项目是就可以创建,可以把它写进idea的模板里。运行完成后,查看目录就会发现,自动生成了Java实体类、Mapper接口、Mapper映射文件。在context标签中的targetRuntime属性中的两个参数。这里配置的数据库连接与生成包的名字需要根据情况配置。

2022-09-06 14:34:52 230

空空如也

空空如也

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

TA关注的人

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