动态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>
:是用来遍历循环,常见的属性说明:
- collection:集合名称
- item:集合遍历出来的元素/项
- separator:每一次遍历使用的分隔符
- open:遍历开始前拼接的片段
- 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)