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

MyBatis增删改、RESTful API 风格、SpringAOP

增删改操作

  • 使用 <insert>, <update>, <delete> 标签编写 SQL。
  • 示例 (更新操作,包含关联对象属性):
    <update id="update">UPDATE t_studentSET stu_id      = #{stuId},`name`      = #{name},pinyin      = #{pinyin},  <!-- 通常属性名与参数名一致 -->sex         = #{sex},birthday    = #{birthday},phone       = #{phone},email       = #{email},wechat      = #{wechat},description = #{description},class_id    = #{classEntity.id}  <!-- 引用关联对象属性 -->WHERE id = #{id}
    </update>
    

RESTful API 风格 (补充说明)

  • REST (Representational State Transfer) 是一种架构风格。
  • 常见 HTTP 方法语义:
    • GET /students:获取学生列表
    • POST /students:创建新学生
    • PUT /students/{id}:更新指定 ID 的学生
    • DELETE /students/{id}:删除指定 ID 的学生
  • @RestController 注解表明该类所有方法返回值默认@ResponseBody 处理 (直接写入响应体,如 JSON/XML)。

Spring AOP (面向切面编程)

  • 核心思想:方法执行的特定点(切点)横向插入通用逻辑(通知),实现关注点分离(如日志、事务、安全)。
  • 实现原理: 动态代理
    • JDK 动态代理: JDK 自带,要求目标类实现接口
    • CGLIB 动态代理: 基于继承,生成目标类的子类代理。要求目标类和方法不能是 final 的。
  • 使用步骤 (Spring AOP):
    1. 引入 spring-boot-starter-aop 依赖。
    2. 定义切面 (Aspect) 类 (@Aspect)。
    3. 定义切点 (Pointcut) (@Pointcut),指定哪些方法需要被切入。
    4. 定义通知 (Advice) (@Before, @After, @Around, @AfterReturning, @AfterThrowing),包含切入的代码逻辑及执行时机(方法前、后、环绕等)。

事务管理 (基于 Spring AOP)

  • 事务 (Transaction) 特性 (ACID):
    • Atomicity (原子性):操作要么全部成功,要么全部失败回滚。
    • Consistency (一致性):事务使数据库从一个一致状态转变到另一个一致状态。
    • Isolation (隔离性):并发事务之间相互隔离,防止数据干扰。
    • Durability (持久性):事务一旦提交,其结果永久保存。
  • 编程式事务 (底层):
    Connection conn = DriverManager.getConnection(...);
    conn.setAutoCommit(false); // 关闭自动提交
    try {// ... 执行业务逻辑 (多个SQL) ...conn.commit(); // 手动提交
    } catch (Exception e) {conn.rollback(); // 回滚
    }
    
  • 声明式事务 (Spring 推荐):
    1. 引入 spring-boot-starter-aop (通常已包含在 spring-boot-starter-jdbc...-data-jpa 中)。
    2. (可选但推荐) 在主配置类添加 @EnableTransactionManagement 注解 (Spring Boot 通常自动配置)。
    3. 业务方法上添加 @Transactional 注解。
  • @Transactional 关键属性:
    • isolation: 事务隔离级别 (依赖于数据库支持):
      • READ_UNCOMMITTED (读未提交):可能脏读。
      • READ_COMMITTED (读已提交):解决脏读,可能不可重复读。
      • REPEATABLE_READ (可重复读):解决不可重复读,可能幻读 (MySQL InnoDB 默认)。
      • SERIALIZABLE (串行化):最高隔离级别,解决幻读,性能最低。
    • propagation: 事务传播行为 (Spring 特有机制,解决事务方法相互调用时的事务边界问题),例如:
      • REQUIRED (默认):当前有事务则加入,没有则新建。
      • REQUIRES_NEW:总是新建事务,挂起当前事务(如果存在)。
      • SUPPORTS:当前有事务则加入,没有则以非事务方式运行。
      • NOT_SUPPORTED:以非事务方式运行,挂起当前事务(如果存在)。
      • MANDATORY:必须在事务中运行,否则抛异常。
      • NEVER:必须在非事务中运行,否则抛异常。
      • NESTED:在嵌套事务中运行(如果当前存在事务)。
http://www.dtcms.com/a/317688.html

相关文章:

  • 启动模块服务时报错:docker: Error response from daemon: Conflict.
  • 状态模式及优化
  • 使用阿里云服务器部署dify实战
  • 深入理解 Maven POM 文件:核心配置详解
  • 【编号457】新疆高寒山区冰湖矢量数据
  • DSP的CLA调试技巧
  • Webpack核心技能:Webpack安装配置与模块化
  • 芯片分享【昆泰】——CH7305A -display controller device.
  • 基于Mojo与Mechanize的Perl高效爬虫实现
  • C++进阶—C++的IO流
  • JavaScript DOM 元素节点操作详解
  • 前端UI组件库
  • 15.Linux systemd和守护进程
  • AVDTP Media Packet 传输全流程解析:从 SDP 到连接终止
  • Zustand
  • 从代码学习深度强化学习 - 模仿学习 PyTorch版
  • 【数据库】MySQL详解:关系型数据库的王者
  • MySQL和Navicat Premium的安装
  • stm32项目(22)——基于stm32的智能病房监护系统
  • Python面试题及详细答案150道(01-15) -- 基础语法篇
  • 代数——第6章——对称性(Michael Artin)
  • vue3 find 数组查找方法
  • CPP网络编程-异步sever
  • FPGA学习笔记——VGA彩条显示
  • python:非常流行和重要的Python机器学习库scikit-learn 介绍
  • STM32学习笔记3-GPIO输入部分
  • WMS及UI渲染底层原理学习
  • 【STM32 LWIP配置】STM32H723ZG + Ethernet +LWIP 配置 cubemx
  • 无人机图传的得力助手:5G 便携式多卡高清视频融合终端的协同应用
  • 中宇联5G云宽带+4G路由器:解锁企业办公高效协同与门店体验升级