实训项目中用到的一些知识点(部分来自文心一言)

news/2024/7/8 1:35:32 标签: spring, java, 后端

一、使用的注解及其功能

  1. @Configuration:用于定义配置类,该类可以包含@Bean注解的方法,这些方法将被Spring容器在启动时自动调用,用于声明bean

  2. @EnableSwagger2启用Swagger 2.x,一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务。

  3. @Bean声明一个bean,由Spring IoC容器管理。通常用在配置类中,表示该方法将返回一个对象,该对象要注册为Spring应用上下文中的bean。(即@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中;)

  4. @RestController:是@Controller@ResponseBody的组合注解,用于创建RESTful web服务。它确保所有处理方法都默认通过@ResponseBody注解处理,即方法的返回值都会作为HTTP响应正文返回

  5. @RequestMapping用于将HTTP请求映射到特定的处理器类或处理器方法上。可以定义在类或方法上,提供路由信息。(根据增删改查,也有不同的定义方法,GetMapping查、PostMapping增、DeleteMapping删、PutMapping改)

  6. @Autowired自动装配Spring容器中管理的bean到被注解的字段上。可以用在字段、setter方法或构造器上,实现依赖注入。

  7. @ApiOperation:Swagger注解,用于给API增加操作(通常是HTTP方法)的额外信息,如操作描述、响应类型等。

  8. @Mapper:MyBatis注解,用于标记接口为Mapper接口,MyBatis会自动扫描这些接口并创建其实现类,用于操作数据库

  9. @Repository用于标注数据访问组件,即DAO组件,主要目的是进行数据的持久化操作。Spring会自动检测这些类,并在需要时创建代理实现,实现异常转换等功能。

  10. @Param可认为是用于传参。用在方法参数上,当使用@RequestMapping注解的方法需要多个参数时,可以将请求参数绑定到指定的方法参数上。通常与@RequestMapping一起使用在Spring MVC中。

  11. @Service:用于标注业务层组件,主要目的是进行业务逻辑处理。Spring同样会自动检测这些类,并在需要时创建代理实现,但主要关注于业务逻辑层面。

  12. @Override:表示该方法重写了父类中的方法。编译器会检查该方法是否确实重写了父类中的方法,确保重写的正确性。

  13. @Transactional:声明式事务管理注解,用于指定某个方法或类中的所有方法都运行在事务环境中。可以指定事务的传播行为、隔离级别等属性。(这个过程大致就是:如果方法执行成功,则事务会被提交,所做的更改将永久保存到数据库中。然而,如果在方法执行过程中发生了异常(通常是运行时异常),并且这个异常没有被捕获或处理(或者特别指定了某些异常不应该触发回滚),则事务会被回滚,即所做的更改将被撤销,数据库将恢复到事务开始之前的状态。)

二、配置文件注释

spring.application.name=××

#Java数据库连接(jdbc)

# 设置连接MySQL数据库所使用的JDBC驱动类
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver  

# 数据库连接的URL,包括数据库地址(localhost)、端口(3306)、数据库名(wuzi)以及连接参数(如字符集、SSL使用、时区等)
spring.datasource.url=jdbc:mysql://localhost:3306/wuzi?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC  

# 连接数据库时使用的用户名
spring.datasource.username=root  

# 连接数据库时使用的密码
spring.datasource.password=123456

## 设置Spring MVC的路径匹配策略为Ant风格的路径匹配器
## Ant风格的路径匹配器支持通配符(如?表示任意单个字符,*表示任意数量的字符)来匹配URL路径
spring.mvc.pathmatch.matching-strategy=ant_path_matcher

spring
datasource:
driver-class-name:×××
url:×××
username:×××
password:×××
mvc:
pathmatch:
matching-strategy:ant_path_matcher

# 设置MyBatis的mapper文件位置,这些XML文件包含SQL语句和映射信息
# classpath: 表示从类路径下查找,mappers/ 是资源文件夹路径,*.xml 表示匹配该文件夹下所有XML文件
mybatis.mapper-locations=classpath:mappers/*.xml  

# 设置MyBatis的类型别名包,MyBatis会自动扫描这个包下的类,并为其设置别名(默认为类名的首字母小写,除非在别名注解中指定了其他名称)
# 这有助于在XML映射文件中使用简短的别名来引用Java类型
mybatis.type-aliases-package=com.example.××.mybatis.entity

server.port=8080

三、SQL中使用到的

1、COALESCE:用于从一组参数中返回第一个非NULL值

2、select 1:子查询中的 “1” 被用作占位符。“1” 的实际值并不重要,它可以是任何常量值,甚至是列名,写成 “1” 是为了方便。具体的分析可以看这篇博客:

SQL中的select 1到底是什么意思?_select 1的作用-CSDN博客

3、LEFT JOIN:从左表 那里返回所有的行,即使右表为空也可以。具体的看下面:

SQL LEFT JOIN 关键字 (w3school.com.cn)

4、#{}的作用是什么(答案来自文心一言)

#{} 通常用于表示参数占位符。这些占位符在查询执行之前会被实际的参数值所替换。这种机制有助于防止SQL注入攻击,因为框架会负责适当地转义或处理这些参数值,以确保它们被安全地嵌入到SQL语句中。

5、使用的一条sql语句解释:(来自文心一言)

        update wuzi
        set wznums = wznums + COALESCE
        ((
            select sum(ruku.rknums)
            from ruku
            where ruku.wzname = wuzi.wzname
        ), 0)
        where exists
        (
            select 1
            from ruku
            where ruku.wzname = wuzi.wzname
        )
        and wuzi.wzname = #{wuzi.wzname};

这条SQL语句是一个UPDATE语句,用于更新wuzi表中的wznums字段。具体来说,它根据与ruku表的相关联数据来增加wuzi表中某个特定wzname对应的wznums值。下面是对这条语句的详细解释:

  1. 目标表UPDATE wuzi 表明这条语句将更新wuzi表中的数据。

  2. 设置新值set wznums = wznums + COALESCE(..., 0) 这部分指定了wznums字段的新值。这里使用了COALESCE函数来确保如果子查询(select sum(ruku.rknums) ...)返回NULL(即没有找到匹配的wzname),则使用0作为默认值。这样,如果ruku表中没有与wuzi表中某个wzname相匹配的记录,wznums将不会增加。

  3. 子查询COALESCE函数中的子查询是select sum(ruku.rknums) from ruku where ruku.wzname = wuzi.wzname。这个子查询计算ruku表中所有与wuzi表中当前正在更新的wzname相匹配的记录的rknums字段的总和。

  4. 存在性检查WHERE EXISTS (...)子句是一个存在性检查,用于确保只有在ruku表中存在至少一条与wuzi表中当前wzname相匹配的记录时,才执行更新操作。然而,这个存在性检查实际上是多余的,因为COALESCE已经处理了子查询返回NULL的情况。但如果更新逻辑中有其他依赖于存在性的逻辑(尽管在这个特定语句中没有),这个检查仍然是有用的。

  5. 更新条件and wuzi.wzname = #{wuzi.wzname} 是更新操作的条件之一,它指定了只有当wuzi表中的wzname字段等于某个特定的值时(这个值通过#{wuzi.wzname}占位符提供,通常是在执行这条SQL语句时由外部参数提供的),才会执行更新操作。

综上所述,这条SQL语句的目的是更新wuzi表中某个特定wzname对应的wznums字段,将其增加ruku表中所有具有相同wzname的记录的rknums字段的总和(如果ruku表中没有匹配的记录,则不增加)。然而,由于EXISTS子句的存在性检查是多余的(在这个特定情况下),它可能只是代码中的遗留部分或用于其他潜在的逻辑目的。

请注意,#{wuzi.wzname}是参数化查询的一部分,通常在使用某些数据库访问框架(如MyBatis)时使用,它表示在执行查询之前将由外部提供的参数值替换该占位符。在纯SQL环境中,你需要直接提供具体的值或使用其他形式的参数化查询(取决于你的数据库和编程环境)。


http://www.niftyadmin.cn/n/5535925.html

相关文章

短视频电商源码的优势及软件架构解析

短视频电商源码是目前电商行业中非常火热的一个新兴领域,它通过短视频内容和电商商品的结合,为用户提供了一种新的购物体验。下面将介绍短视频电商源码的优势以及软件架构。 首先,短视频电商源码具有以下几个优势: 1、创新的购物体…

vue3 websocket连接上了,会自动断开的处理的二种方式

上了服务器以后,发现websocket会自动断开,那么我们可以有二种方法: 1)一般我们会发送心跳包 function sendMessagePing() {if (websocket && websocket.readyState WebSocket.OPEN) {websocket.send(ping);} else {con…

rpc超时时间的设置对句柄和内存的影响

今天实验验证:四台拷机,配置修改入下 (1)断网 拷机时间均加快 (2)通网 拷机时间均加快 (3)断网 拷机时间均加快 另外配置超时时间为0 (4) 通网 拷机时间均加快 另外配置超时时间为0 结果分析对比: 11:30到13:36拷机分析: RPC超时时间设置为60时: 断网:…

使用Spock框架进行行为驱动开发(BDD)

行为驱动开发(BDD)是一种软件开发方法,它鼓励开发团队、业务参与者和QA之间的协作。Spock框架是一个强大的测试和规范框架,它结合了JUnit和Groovy的优点,使得编写清晰、可读性强的测试代码变得非常容易。本文将详细介绍…

【数学建模】生产企业原材料的订购与运输

2021 年高教社杯全国大学生数学建模竞赛题目 C 题 生产企业原材料的订购与运输 问题一问题二问题二.1问题二.2 问题三问题三.1 问题四 简单写写模型和思路 某建筑和装饰板材的生产企业所用原材料主要是木质纤维和其他植物素纤维材料, 总体可分为A,B,C三…

javax.net.ssl.SSLHandshakeException: 解决方式

请求第三方接口的时候报javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 网站与…

2024年07月03日 Redis部署方式和持久化

Redis持久化方式:RDB和AOF,和混合式 RDB:周期备份模式,每隔一段时间备份一份快照文件,从主线程Fork一个备份线程出来备份,缺点是会造成数据的丢失。 AOF:日志模式,每条命令都以操作…

CSS动画keyframes简单样例

一、代码部分 1.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><link rel"stylesheet" href…