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

一、使用的注解及其功能

  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环境中,你需要直接提供具体的值或使用其他形式的参数化查询(取决于你的数据库和编程环境)。

  • 27
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值