当前位置: 首页 > news >正文

项目代码涉及的知识点笔记整理

一、框架与技术栈

  1. Spring Boot:用于快速开发 Java Web 应用的框架

    • 提供自动配置、依赖管理等功能
    • 通过@RestController等注解简化控制器开发
  2. MyBatis:持久层框架,用于数据库操作

    • 支持 XML 配置和注解两种方式编写 SQL
    • 通过 Mapper 接口与 SQL 语句映射实现数据库操作
  3. MySQL:关系型数据库,作为数据存储介质

  4. RESTful API 设计:接口设计规范

    • 使用 HTTP 方法(GET/POST/PUT/DELETE)表示操作类型
    • 采用 URL 路径表示资源(如/teacher/{id}

二、核心注解使用

  1. Spring 相关注解

    • @RestController:标识控制器类,返回 JSON 数据
    • @Autowired:实现依赖注入
    • @GetMapping/@PostMapping/@PutMapping/@DeleteMapping:映射 HTTP 请求方法
    • @PathVariable:获取 URL 路径中的参数
    • @RequestBody:接收请求体中的 JSON 数据
  2. MyBatis 相关注解

    • @Mapper:标识数据访问接口
    • @Select/@Insert/@Update/@Delete:通过注解编写 SQL 语句
    • @Param:指定方法参数在 SQL 中的名称

三、MyBatis XML 映射文件

  1. 基本结构

    • 命名空间(namespace)与 Mapper 接口关联
    • CRUD 标签(<select>/<insert>/<update>/<delete>)对应数据库操作
  2. 动态 SQL

    • <if>:条件判断,满足条件才拼接 SQL 片段
    • <where>:自动处理 AND/OR 逻辑,智能去除多余连接词
    • <trim>:自定义前缀、后缀及需要去除的字符
    • <foreach>:遍历集合,常用于批量操作
    • <choose>/<when>/<otherwise>:多条件分支判断
    • <bind>:创建变量并绑定到上下文,用于模糊查询等场景
  3. 参数传递

    • #{}:预编译参数,自动处理转义,防止 SQL 注入
    • ${}:直接字符串替换,有 SQL 注入风险,谨慎使用
  4. 主键生成

    • useGeneratedKeys="true":启用自增主键
    • keyColumn:指定数据库中自增主键的列名
    • keyProperty:指定实体类中对应主键的属性名

四、数据库操作

  1. CRUD 操作

    • 单条记录添加、修改、删除
    • 批量添加(使用<foreach>遍历集合)
    • 单条件查询、多条件组合查询
    • 模糊查询(使用like关键字)
  2. SQL 注入防护

    • 使用#{}代替${}进行参数绑定
    • 模糊查询使用<bind>标签处理(如'%' + #{param} + '%'

五、配置文件

  1. application.yml 配置
    • 数据源配置:数据库 URL、用户名、密码、驱动类
    • MyBatis 配置:Mapper XML 文件位置、实体类别名包
    • 日志配置:设置日志级别(如 DEBUG 级别便于调试 SQL)
    • 自定义配置:通过@Value注解注入使用

六、接口设计与实现

  1. 控制器层

    • 按实体分类设计控制器(TeacherController、StudentController 等)
    • 统一路径前缀(如/teacher
    • 接口参数校验与处理
    • 调用 Mapper 接口完成业务逻辑
  2. 数据访问层

    • Mapper 接口定义数据库操作方法
    • 方法参数与返回值设计
    • 注解方式与 XML 方式结合使用

七、常见问题与注意事项

  1. 代码拼写错误:如techer应为teacher
  2. SQL 语法错误:如注解中 SQL 的括号和逗号使用不当
  3. SQL 注入风险:避免使用${}进行字符串拼接
  4. 方法实现不完整:如部分 edit 和 delete 方法未实现具体 SQL
  5. 参数校验缺失:接口未对输入参数进行合法性校验
  6. 逻辑错误:如批量添加时重复添加同一个对象

八、 SQL 注入

什么是sql注入

SQL 注入是一种常见的网络攻击手段,指攻击者通过在应用程序的输入参数中插入恶意 SQL 代码,从而操纵数据库执行非预期操作的攻击方式。当应用程序对用户输入的参数未进行严格过滤和转义就直接拼接进 SQL 语句时,就可能导致 SQL 注入漏洞。

sql注入的危害

  • 非法查看、修改或删除数据库中的敏感数据(如用户密码、个人信息等)
  • 绕过应用程序的身份验证和授权机制,非法登录系统
  • 甚至可能通过数据库权限提升,获取服务器控制权

九、controller,mapper接口,mapper.xml这三者之间是如何相互配合的

在基于 Spring Boot 和 MyBatis 的项目架构中,controller(控制器层)、mapper接口(数据访问层接口)和mapper.xml(MyBatis 映射文件) 三者之间通过分工协作,共同完成从接收客户端请求到操作数据库并返回结果的整个流程,具体配合方式如下:

1. controller 的角色及与 mapper 接口的交互

controller负责接收前端客户端发送的 HTTP 请求,进行初步的请求处理和参数校验,然后调用mapper接口中的方法来操作数据库,获取或修改数据,并将处理结果封装后返回给前端。

TeacherController为例:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;@RestController
@RequestMapping("/teacher")
public class TeacherController {@Autowiredprivate TeacherMapper teacherMapper;// 根据ID查询教师@GetMapping("/{id}")public Teacher getTeacherById(@PathVariable Integer id) {return teacherMapper.getTeacherByid(id);}// 查询教师列表@GetMapping("/list")public List<Teacher> getTeacherList() {return teacherMapper.getTeacherList();}
}

在上述代码中,TeacherController通过@Autowired注解将TeacherMapper接口实例注入到控制器中。当客户端发送查询教师详情或列表的请求时,TeacherController调用TeacherMapper接口对应的方法,将业务请求转发给数据访问层。

2. mapper 接口的作用及与 mapper.xml 的关联

mapper接口定义了一系列与数据库操作相关的抽象方法,这些方法的具体 SQL 实现则在对应的mapper.xml文件中编写。MyBatis 会通过动态代理机制,为mapper接口生成实现类实例,使得controller可以调用这些方法来执行数据库操作。

TeacherMapper接口为例:

import org.apache.ibatis.annotations.Mapper;
import java.util.List;@Mapper
public interface TeacherMapper {Teacher getTeacherByid(Integer id);List<Teacher> getTeacherList();
}

TeacherMapper接口中定义了获取单个教师和教师列表的方法,而这些方法的 SQL 语句具体实现是在teacher_mapper.xml文件中。

3. mapper.xml 的功能及与 mapper 接口的对应

mapper.xml文件用于编写具体的 SQL 语句,通过namespace属性与对应的mapper接口关联,id属性与mapper接口中的方法名对应。这样 MyBatis 就能将mapper接口的方法调用和mapper.xml中的 SQL 语句执行对应起来。

teacher_mapper.xml示例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.TeacherMapper"><select id="getTeacherByid" parameterType="int" resultType="Teacher">SELECT * FROM teacher WHERE id = #{id}</select><select id="getTeacherList" resultType="Teacher">SELECT * FROM teacher</select>
</mapper>

teacher_mapper.xml中,namespace指定为TeacherMapper接口的全限定名,idgetTeacherByidgetTeacherList<select>标签分别对应TeacherMapper接口中的同名方法,当TeacherMapper接口的方法被调用时,MyBatis 会根据映射关系执行teacher_mapper.xml中对应的 SQL 语句。

整体协作流程总结

  1. 前端发送 HTTP 请求到controller
  2. controller接收请求,进行参数校验等初步处理后,调用mapper接口中对应的方法。
  3. MyBatis 根据mapper接口与mapper.xml的映射关系,找到mapper.xml中与被调用方法对应的 SQL 语句,并执行该 SQL 语句,完成数据库操作。
  4. mapper接口将数据库操作结果返回给controller
  5. controller将结果进行封装处理,返回给前端客户端 。

通过这种分工协作的方式,实现了业务逻辑和数据访问的分离,使得代码结构更加清晰,便于维护和扩展。

http://www.dtcms.com/a/326493.html

相关文章:

  • C++高频知识点(二十一)
  • 嵌入式学习 day48 IMX6ULL裸机驱动 -按键、中断
  • 源码分析Eino框架工具调用--创建篇
  • Redis RDB和AOF 流程、优缺点详细介绍
  • python每日一题练习 有效的字母异位词 非常简单
  • Linux软件编程--IO
  • Linux 软件编程:IO——标准IO
  • 《录井管理与工程》书籍第一章要点及相应思考
  • 工业数采引擎-通信协议(Modbus/DTU/自定义协议)
  • FFmepg源码系列-avformat_open_input()
  • python之uv使用
  • [动态规划]最长公共子序列(LCS)
  • Nacos添加权限
  • uart通信中出现乱码,可能的原因是什么 ?
  • Linux软件编程:标准IO(ASCII文件)
  • Discuz论坛和java应用的架构部署
  • 视频剪辑的工作流程
  • 笔试——Day35
  • 用 Flink SQL 和 Paimon 打造实时数仓:深度解析与实践指南
  • GitHub的简单使用方法----(1)
  • 论文阅读 arxiv 2024 MemGPT: Towards LLMs as Operating Systems
  • 平衡二叉树(AVL)解析与实现
  • python每日一题 1的数量 非常简单
  • 松灵机器人 scout ros2 galactic 驱动 安装,并且跑巡线算法
  • 深入剖析 C++ STL 中的 std::list 容器
  • 一篇文章解决Unity没有添加模块选项的问题
  • Linux系统编程 | 线程池
  • Redis7 GEO功能介绍与电商场景案例解析
  • Static CXL Switch:静态CXL交换机相关内容
  • leecode875 爱吃香蕉的珂珂