自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Thymeleaf模板引擎

Thymeleaf是一种现代化的服务器端Java模板引擎,用于构建Web应用程序的用户界面。与其他模板引擎不同,Thymeleaf在HTML文件中添加额外的属性(tag attributes)以帮助渲染数据,这使得Thymeleaf可以很好地与后端Java代码集成。1.标准语法:标准语法是HTML5文档所使用的语法,因此Thymeleaf可以用于任何HTML5文档。2.自定义语法:自定义语法根据XML命名空间进行声明,通过它们可以插入自定义标签或属性。

2023-05-29 10:23:26 1056

原创 认识yaml

选择哪种格式应根据具体情况而定,一般来说,YAML适合于复杂的配置文件,而properties适合于简单的配置场景。而properties是Java中一种常用的配置文件格式,它以键值对的方式表示数据,常用于存储程序中的配置信息。语法形式不同:YAML的语法采用缩进方式,更加紧凑、易读,而properties的语法则是通过键值对的形式来定义数据,较为简单明了。数据类型支持不同:YAML支持多种数据类型,包括数组、字典、布尔型等,而properties只支持字符串类型,需要额外转换。

2023-05-28 21:54:42 209

原创 第一个Vue程序

Vue中的VM与MVVM中的VM功能类似,都是作为桥梁角色,连接数据模型层和用户界面层,使得开发可以更容易地编写干净、可重用且易于测试的代码。Vue提供了一个响应式的数据绑定机制,当数据发生变化时,会自动更新相关的视图。因此,Vue可以被认为是一种实现了MVVM模式的JavaScript框架,它充分利用了MVVM中的VM的优势,使得开发者可以更轻松地构建复杂的Web应用程序。在Vue的生态系统中,还有大量的插件和第三方库可供选择,这些库可以帮助开发者扩展Vue的功能和性能,以及提高开发效率。

2023-05-27 12:18:43 1095

原创 SpringBoot自动装配原理

Spring Boot 中使用了大量的条件注解(Condition),通过判断当前应用的运行环境、类路径下是否有指定的依赖,以及配置文件中是否定义了相应的属性等条件,决定是否启用某个配置项或 Bean 的实例化。SpringBoot所有自动配置都是在启动的时候扫描并加载:所有的自动配置类都在spring.factories中,但是不一定生效,需要判断条件是否成立,只要导入了对应的start,就有对应的启动器了,有了启动器,我们自动装配就会生效,然后就配置成功。SpringBoot自动装配注解才是核心。

2023-05-24 10:00:21 1082

原创 第一个SpringBoot程序

从上面这个SpringBoot项目中创建了一个HelloController类,没有导入依赖,也没有做任何的配置,直接运行就可以返回结果显然,SpringBoot3.0版本需要JDK17支持,我的是JDK8,所以选择是3.0以下,配置好后,选择创建。进入spring官网,点击projects,点击SpringBoot,进到如下页面。点击Spring Initializr,进入如下页面,进行配置。我的JDK是1.8,参数配置好,选择下一步。将下载好的项目导入IDEA,运行结果。启动成功后,访问8080。

2023-05-23 15:16:50 535 2

原创 认识SpringBoot

它基于Spring框架,并使用约定大于配置的理念,从而避免了繁琐的配置和XML文件。单体应用架构是一种传统的应用程序架构,它将应用程序作为一个整体部署和管理,应用程序的所有功能都在同一个进程中运行。在单体应用架构中,所有模块和组件都紧密耦合在一起,随着应用程序的增长,代码通常变得越来越复杂和难以维护。其次,由于应用程序的所有组件都在同一个进程中运行,因此可以轻松地进行调试和测试,从而提高开发效率。微服务是一种架构风格,它要求我们在开发一个应用的时候,这个应用必须构建成一系列小服务的组合;

2023-05-23 12:36:36 369

原创 认识SpringMVC中的拦截器

在Spring MVC中,拦截器是一种拦截和处理HTTP请求的机制,类似于过滤器(Filter)但是更加灵活和可控。它是Spring MVC框架提供的一种扩展,在请求被处理之前或之后进行预处理或后处理,对请求进行拦截、修改或增强等操作。拦截所需要拦截的页面,在配置路径中拦截哪些页面;如果需要拦截,在拦截类中,return false即可,它就不会走下面的流程;通过拦截器,可以在请求被处理之前或之后对请求进行处理,对服务的功能和性能进行定制和增强,从而提高应用程序的质量和可维护性。

2023-05-21 21:35:59 142

原创 认识RestFul

RESTful架构风格的基本思想是将资源和操作分离,通过HTTP协议的GET、POST、PUT、DELETE等方法对资源进行操作,使得系统更加简单、灵活、可扩展、可维护。RESTful架构风格的优点包括:可读性强、可缓存、可扩展、可靠性高、易于测试、易于开发和维护。@RequestMapping的源码中,加路径,可以在类上,也可以在方法上,如果请求的话路径需要按照顺序,如果在类上写会有父子关系。可以通过不同的请求方式来实现不同的效果!请求地址一样,但是方法不一样。通过不同的参数实现不同的效果!

2023-05-21 20:06:09 77

原创 使用注解开发SpringMVC

springmvc-servlet.xml,这里只需要配置一个视图解析器,然后扫描包,并支持注解。

2023-05-21 17:14:17 59

原创 SpringMVC执行原理

用户请求,先走DispacherServlet,然后去找映射器,然后去处理执行,执行完返回到DispacherServlet,然后去找处理器适配器,然后去找Controller,然后返回给处理器适配器,再返回给DispacherServlet,然后去找视图解析器,并返回,最后返回视图给用户。总而言之,SpringMVC的架构模式采用前端控制器模式,核心思想是在所有请求的入口统一进行处理,并由一个中央控制器负责将请求转发给不同的控制器进行具体业务的处理。这样就完成了整个Spring MVC的请求处理过程。

2023-05-21 12:54:28 524

原创 什么是依赖注入

在上述配置中,我们定义了两个Bean:car和engine,其中,car对象通过property元素的name属性指定engine属性,并使用ref属性指定对engine对象的引用。这样,在初始化car对象时,Spring容器会自动将engine对象注入到car对象中的engine属性中。需要注意的是,Spring还提供了其他几种注入方式,例如通过构造函数注入、通过注解注入等,ref属性虽然是较为常用的一种依赖注入方式,但在实际开发中,我们应该根据具体情况选择最合适的注入方式。

2023-05-20 12:33:01 52

原创 Spring整合MyBatis

applicationContext.xml配置文件。UserMapperImpl实现类。UserMapper接口。

2023-05-19 22:14:07 59

原创 Spring注解开发

在applicationContext.xml中配置了扫描com.qing下面所有的包,在User类中放入注解,他就会被自动装配到bean中,但是我测试的时候,他getBean的那个user只能是user,如果是别的值,会报错。applicationContext.xml,导入约束。

2023-05-19 14:58:19 55

原创 Bean的自动装配

byName:会自动在容器上下文查找,和自己这个对象的set方法后面值对应的bean中的id。byType:会自动在容器上下文中查找,和自己对象属性相同的bean,可以省略id。如果id不满足对象的名字,则会报错;例如:dog222不满足对象的id名字。不能有两个一样的id,属性名可以不同。People类,人可以有多个宠物。导入pom.xml依赖包。

2023-05-19 11:48:51 690

原创 依赖注入(DI)

自动注入(Autowiring):该方式是一种特殊类型的依赖注入,使用者无需手动进行注入,Spring框架会根据类型自动装配相应的依赖,通常使用@Component、@Service等注解定义组件实例的时候使用。构造函数注入(Constructor Injection):该方式通过组件的构造函数参数进行注入,使得每个组件都已经注入了它所依赖的其他组件。以上是Spring中常用的依赖注入方式,根据不同的业务场景和需求,可以选择合适的方式进行注入。注入:bean对象中的所有属性,由容器注入。

2023-05-18 15:44:52 52

原创 Spring配置

这个import,一般用于团队开发使用,他可以将多个配置文件,导入合并为一个。class:bean对象所对应的全限定名:包名+类名。name:也是别名,而且name可以同时取多个别名。id:bean的唯一标识符,也就是我们的对象名。如果获取了别名,我们也可以用别名获取这个对象。获取test这个别名,测试。

2023-05-18 14:34:24 51

原创 IOC创建对象的方式

测试,这里getBean只得到了hello对象,而User的无参构造也执行了,所以IOC容器创建对象默认是使用无参构造创建。不知道大家有没有想过,为什么没有去拿User对象,他的无参构造会调用。Hello类中添加一个有参构造。测试,只执行了hello。给下标为0的参数赋值。

2023-05-18 13:58:30 209

原创 Java中的toString方法

返回的对象实际上已经是字符串类型了,而不是其他类型。方法只是将这个字符串进行了一次显式的转化。返回的不是 String 类型,则在调用。方法需要参入一个String类型的参数。方法并没有被覆盖,是因为。的目的是方便我们观察。

2023-05-18 13:53:15 112

原创 第一个IOC程序

只需要修改xml配置文件中的ref,就可以调用不同的方法,结果如下。如果ref=oracle,则结果如下。UserService接口。

2023-05-18 10:44:43 59

原创 Spring中的property属性

的 bean 对象,或者该对象依赖的其他对象未能正确初始化,则也可能导致注入失败。因此,在进行属性注入时,应该仔细检查依赖关系,确保依赖的对象已经正确初始化,并且检测是否存在潜在的类型转换等问题。标签进行属性注入时,被注入的属性类型必须与依赖的 bean 类型兼容,否则可能会出现类型转换异常等问题。属性在 JavaBean 中定义为一个引用类型的变量,那么 Spring 在初始化当前 bean 时会自动查找名为。的属性注入到当前 bean 中,并且该属性依赖于名为。属性表示要注入的 bean 属性名称,

2023-05-18 10:28:18 1968

原创 彻底弄懂Java中的toString方法

需要注意的是,Object类的toString()方法的返回值并不总是对于对象的描述,它只是一个简单的用于标识该对象的字符串。如果你的类没有重写该方法,那么它就会默认继承父类Object的toString()方法。因此,当你调用一个未重写toString()方法的对象的toString()方法时,实际上就是调用了Object类中默认的toString()方法,将对象转换为字符串返回。而Object类本身有一个toString()方法,用于返回一个表示该对象的字符串,该方法返回的是一个字符串类型的值。

2023-05-18 10:02:45 2674

原创 第一个Spring程序

bean.xml配置文件,id就是对象名,就是new一个对象时的对象名,class是完全限定类名(类名+包名),bean是指任何受Spring IoC容器管理的对象;bean标签中可以放入property(属性),property 属性有name和value属性,name的属性值就是这个类定义属性,value可以给它赋值。测试,上下文(Context)是指当前程序执行的环境,getBean是获取对象,对象可以调用方法,所以test()和setName()就不用多解释了;

2023-05-17 21:35:06 42

原创 IOC理论推导

对比这两个实现类的代码,可以看出没有实现set接口的实现类new的对象是固定的,控制权在程序员手上,如果用户需要调用UserDaoSqlImpl,还得在业务层实现类中new UserDaoSqlImpl();想想看,如果需要实现UserDao接口的实现类很多,那不得修改多次;只要在UserServiceImpl实现类实现一个set方法,程序控制权就由用户决定;在我们之前的业务中,用户的需求可能会影响我们原来的代码,我们需要根据用户的需求去修改原来的代码!系统的耦合性大大降低,可以更加专注的在业务的实现上!

2023-05-17 16:58:20 367

原创 Spring整合MyBatis

MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和。

2023-05-17 15:07:43 371

原创 一级缓存和二级缓存问题

上述示例,使用useCache="true"声明需要使用二级缓存,在每次调用getUserById查询时,先从缓存中获取数据,如果没有命中再去查询数据库,查到数据之后会将其放入缓存。flushCache是Mybatis提供的一个属性,当为true时,它会把该条SQL语句所在的缓存清除,这样可以在下次查询时不从缓存中读取,直接重新执行SQL语句查询数据库。如缓存的数据和数据库中的数据不一致等问题,因此在使用二级缓存时,需要谨慎处理缓存与数据库之间的数据同步问题。当分别执行查询和插入,执行两次,此时缓存失效。

2023-05-17 12:18:15 391

原创 一步解决日志问题

把下面一行配置放到configuration标签中,如果配置了其他的,需要注意放的顺序,如果放错位置,错误信息中有提示。当然如果需要配置log4j,那就需要导入依赖包,还需要引入配置和log4j.properties。log4j.properties可以指定打印的日志打印什么。value后面不能有空格,不然会报错,错误如下。

2023-05-17 10:10:14 101

原创 MyBatis的配置案例

SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。map中还可以自定义键的名字,当然如果键的名字改变,需要修改插入语句中值,要一一对应。解释一下,在每个值面前加前缀(jdbc.url)的目的,如果直接使用的话,会有报错,所以我就全部换了。理解我们之前讨论过的不同作用域和生命周期类别是至关重要的,因为错误的使用会导致非常严重的并发问题。有注解,使用注解值作为它的别名,也需要扫描包,要需要配注解值,在实体类上,只是可以任意指定别名。配置类型别名的三种方式。

2023-05-14 18:38:48 424

原创 MyBatis操作数据库实现增删改查

如果需要查询一条语句,给点一个条件即可,参数传入主键id,并在UserMapper.xml中的select语句中加上where id=#{id}3、在resources资源下面创建一个mybatis-config.xml文件,并绑定UserMapper.xml或UserMapper接口。4、在dao包下创建UserMapper接口和创建UserMapper.xml文件。UserMapper接口,查询所有数据。UserMapper接口。UserMapper接口。UserMapper接口。

2023-05-14 14:12:45 663

原创 Spring介绍

传统J2EE应用的开发效率低,应用服务器厂商对各种技术的支持并没有真正统一,导致J2EE的应用没有真正实现Write Once及Run Anywhere的承诺。Spring作为开源的中间件,独立于各种应用服务器,甚至无须应用服务器的支持,也能提供应用服务器的功能,如声明式事务、事务处理等。在我们以前的业务中,用户的需求可能会影响我们原来的代码,我们需要根据用户的需求去修改原来的代码。控制:谁来控制对象的创建,传统应用程序的对象是由程序本身控制创建的,使用spring后,对象是spring来创建。

2023-05-14 11:35:49 275

原创 MyBatis日志

配置日志功能非常简单:添加一个或多个配置文件(如 log4j.properties),有时还需要添加 jar 包(如 log4j.jar)。下面的例子将使用 Log4J 来配置完整的日志服务。对于独立应用,可以将它添加到 JVM 的 -classpath 启动参数中。由于我们使用的是 Log4J,我们要确保它的 jar 包可以被应用使用。为此,需要将 jar 包添加到应用的类路径中。Log4J 的 jar 包可以在上面的链接中下载。步骤 1:添加 Log4J 的 jar 包,也可配置pom依赖。

2023-05-13 19:01:27 239

原创 MyBatis中XML映射器

MyBatis 的真正强大在于它的语句映射,这是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 致力于减少使用成本,让用户能更专注于 SQL 代码。下一部分将从语句本身开始来描述每个元素的细节。

2023-05-13 18:41:46 496

原创 MyBatis配置

在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。你可以使用相对于类路径的资源引用,或完全限定资源定位符(包括 file:/// 形式的 URL),或类名和包名等。这里需要注意的是,JDBC连接数据库的事务提交和回滚,查询数据,不需要提交数据;type是包名,alias是别名,当设置了别名,在命名空间(namespace)上放入别名即可,这样就简便了,属性不仅可以在内部直接修改,还可以在外部引入,外部引入需要在配置文件引入属性的文件,

2023-05-13 18:08:19 652

原创 MyBatis入门

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

2023-05-12 19:33:15 483

原创 解决数据库查出来的数据是一个对象

如果我们没有重写toString()方法,那么在打印该对象时就会输出默认的toString()方法所返回的字符串,其中包含了该对象的类名、@符号和哈希值等信息,如您所提到的[com.qing.pojo.User@51b279c9]。如果想要输出自定义的信息,可以通过重写该对象所在类的toString()方法来实现。例如,在User类中重写toString()方法,让它返回我们所需要的格式,如用户的姓名、ID等信息,这样在查询数据时返回的结果就会更加直观易懂。

2023-05-12 17:40:42 161

原创 多线程案例

因为是流,所以需要下载jar包。

2023-05-08 19:15:58 38

原创 认识Thread

实现Callable接口,重写call()方法,然后创建FutureTask类的实例,将实现了Callable接口的类的实例作为参数传递给FutureTask类的构造方法,再创建Thread类的实例,将FutureTask类的实例作为参数传递给Thread类的构造方法,调用start()方法启动线程。实现Runnable接口,重写run()方法,然后创建Thread类的实例,将实现了Runnable接口的类的实例作为参数传递给Thread类的构造方法,调用start()方法启动线程。

2023-05-08 19:05:34 528

原创 Java中的lamda表达式

其中,参数列表(parameters)指的是Lambda表达式要接受的参数列表;Lambda表达式的主体可以是一个表达式(expression)或一个代码块(block),后者需要使用一对花括号将代码块括起来,并且需要使用“return”关键字指定返回值。Lambda表达式是Java 8引入的一种新的语法结构,用于表示函数式接口(Functional Interface)的实例。Lambda表达式常用于函数式编程中,可以在不创建接口实现类的情况下,直接创建函数式接口的实例,使代码更加简洁高效。

2023-05-08 18:47:11 111

原创 一个类继承抽象类

这个案例说明,抽象类中可以写静态方法或者非静态方法,并且方法中可以有代码块;而定义的抽象方法不可以有代码块,不可以被static修饰;一个类继承抽象类之后,需要重写父类的抽象方法;

2023-05-08 17:40:42 46

原创 使用MyBatis查询数据库--->超级详细

总结:mapper.xml绑定UserDao接口,就相当于UserDaoImpl的实现类,pojo类是和数据库的字段做映射,至于utils工具类可以参考官网,目的就是获取资源,相当于获取输入流,然后创建SqlSessionFactory对象,然后就可以创建SqlSession对象;Maven可能存在资源过滤的问题,可以在pom.xml文件中完善以下配置来防止资源无法导出的问题,资源过滤问题的出现,是因为maven中约定大于配置,所以还要导入配置,避免出现下面的问题。往下翻,可以看到pom依赖。

2023-05-07 22:11:28 972

原创 认识MyBatis

对象映射:在持久层中,需要对数据进行转换,将数据库内的数据转换为对应的Java对象,也称为对象映射(ORM)。综上所述,MyBatis相对于JDBC,具有更为便捷的SQL语句编写方式、参数与结果集的映射、以及内置的缓存机制等优势,这些特点可以为开发者提供更高效的数据存取能力和更优秀的代码质量。因此,持久化技术的出现(比如数据库技术、文件系统等)使得我们可以将这些临时数据保存到外部介质中,以便在系统意外挂掉或者下次启动时可以重新加载,从而保证数据的可靠性和应用的稳定性。JDBC中没有缓存的支持。

2023-05-06 17:38:17 694

java的gui编程-贪吃蛇

java的gui编程-贪吃蛇

2023-05-08

空空如也

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

TA关注的人

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