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

动态SQL标签

 动态SQL标签

  • <if>:判断条件是否成立,如果条件为true,则拼接SQL。
  • <where>:根据查询条件,来生成where关键字,并会自动去除条件前面多余的and或or。
<!--定义Mapper映射文件的约束和基本结构-->
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mapper.EmpMapper"><select id="list" resultType="com.itheima.pojo.Emp">select e.*, d.name deptName from emp as e left join dept as d on e.dept_id = d.id<where><if test="name != null and name != ''">e.name like concat('%',#{name},'%')</if><if test="gender != null">and e.gender = #{gender}</if><if test="begin != null and end != null">and e.entry_date between #{begin} and #{end}</if></where></select>
</mapper>
  • <foreach> :是用来遍历循环,常见的属性说明:
  1. collection:集合名称
  2. item:集合遍历出来的元素/项
  3. separator:每一次遍历使用的分隔符
  4. open:遍历开始前拼接的片段
  5. close:遍历结束后拼接的片段

上述的属性,是可选的,并不是所有的都是必须的。 可以自己根据实际需求,来指定对应的属性。

<?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.itheima.mapper.EmpExprMapper"><!--批量插入员工工作经历信息--><insert id="insertBatch">insert into emp_expr (emp_id, begin, end, company, job) values<foreach collection="exprList" item="expr" separator=",">(#{expr.empId}, #{expr.begin}, #{expr.end}, #{expr.company}, #{expr.job})</foreach></insert></mapper>

在插入数据后,如何获取到主键值:

主键返回:@Options(useGeneratedKeys = true, keyProperty = "id")

由于稍后,我们在保存工作经历信息的时候,需要记录是哪位员工的工作经历。 所以,保存完员工信息之后,是需要获取到员工的ID的,那这里就需要通过Mybatis中提供的主键返回功能来获取。

事务管理--Transactional注解

注解:@Transactional(默认出现运行时异常RuntimeException才会回滚)

作用:就是在当前这个方法执行开始之前来开启事务,方法执行完毕之后提交事务。如果在这个方法执行的过程当中出现了异常,就会进行事务的回滚操作。

位置:业务层的方法上、类上、接口上

  • 方法上:当前方法交给spring进行事务管理

  • 类上:当前类中所有的方法都交由spring进行事务管理

  • 接口上:接口下所有的实现类当中所有的方法都交给spring 进行事务管理

@Transactional注解当中的两个常见的属性:

  • 异常回滚的属性:rollbackFor

在Spring的事务管理中,默认只有运行时异常 RuntimeException才会回滚。

如果还需要回滚指定类型的异常,可以通过rollbackFor属性来指定。

@Transactional(rollbackFor = Exception.class)
  • 事务传播行为:propagation

常见传播行为及应用场景:

REQUIRED:大部门场景

REQUIRES_NEW:希望两个方法在独立的事务中运行,互不影响

    @Transactional(propagation = Propagation.REQUIRES_NEW)

http://www.lryc.cn/news/600413.html

相关文章:

  • 【动态规划-斐波那契数列模型】理解动态规划:斐波那契数列的递推模型
  • 【深度之眼机器学习笔记】04-01-决策树简介、熵,04-02-条件熵及计算举例,04-03-信息增益、ID3算法
  • 深分页性能问题分析与优化实践
  • [硬件电路-94]:模拟器件 - 信号耦合,让被放大信号与静态工作点的直流偏置信号完美的融合
  • 算子推理是什么
  • Linux进程:系统运行的核心机制
  • 网安-中间件-Redis未授权访问漏洞
  • Datawhale AI 夏令营—科大讯飞AI大赛(大模型技术)—让大模型理解表格数据(列车信息表)
  • 中文语音识别与偏误检测系统开发
  • Spring boot Grafana优秀的监控模板
  • 【自动化运维神器Ansible】Ansible常用模块之File模块详解
  • flutter环境安装
  • 单片机中的三极管
  • Flutter开发实战之Widget体系与布局原理
  • 力扣 hot100 Day56
  • LeetCode 刷题【15. 三数之和】
  • 新手向:Git下载全攻略
  • 统计与大数据分析与数学金融课程解析
  • C++查询mysql数据
  • RabbitMQ--Springboot解决消息丢失
  • JavaWeb01——基础标签及样式(黑马视频笔记)
  • Android WorkManager 详解:高效管理后台任务
  • InstructBLIP:通过指令微调迈向通用视觉-语言模型
  • Android Data Binding 深度解析与实践指南
  • 像素、视野、光源,都有哪些因素影响测量精度?
  • 数据中心-时序数据库InfluxDB
  • 【影刀RPA_初级课程_我的第一个机器人】
  • jxORM--查询数据
  • 前端模块化开发实战指南
  • 【机器学习深度学习】模型私有化部署与微调训练:赋能特定问题处理能力