返回主键
1.XML方式

<insert id="bb" parameterType="XX.XX.XXEntity包" useGeneratedKeys="true" keyProperty="id">
这里是insert语句
</insert>

2.注解方式,要在接口方法上加两个注解,一个是insert,一个是selectKey

@Insert("这里是insert语句")
@SelectKey(statement = "SELECT last_insert_id() as id", keyProperty = "id", before = false, resultType = String.class, statementType = StatementType.STATEMENT)
//entity里要有id这个属性并且有getset方法,上面的resultType要注意,你的entity里的id是什么属性,就写什么,我的id是String,所以我写String.class,如果你的是int,那么请写Integer.class
public int insert(实体类 entity);

循环
本文展示了这样一个业务:根据多个ID删除多条数据

public Integer 方法名AA(@Param("bb") String[] ids);

1.Mybatis接口方式,接口方式的循环通常很好些,因为@param可以指定名字

<delete id="方法名AA" resultMap="如果是查询记得写返回值类型">
delete from where id in
//如果是批量插入记得删掉open和close属性
<foreach collection="bb" item="item" index="index" open="("
separator="," close=")">
#{item}
</foreach>
</delete>

2.Mybatis映射方式,如果使用映射方式,bb如果不放到map中,那么mybatis会把他的名字变成list,所以如下写,不再用item属性了

<delete id="方法名AA" resultMap="如果是查询记得写返回值类型">
delete from where id in
//如果是批量插入记得删掉open和close属性
<foreach collection="list" index="index" item="aaa" open="("
separator="," close=")">
#{list[${index}]}
</foreach>
</delete>

注: 当mybatis以映射方式循环的时候,你们会发现循环语句中有个item=“aaa”,虽然我下面没有用到这个,但是item必须写,哪怕是item=“bbb”,item=“ccc”,必须要写,否则mybatis报错

加前缀后缀覆盖
下面的例子展示了如果传递用户名称,则将用户名称userName和年龄userAge作为条件进行或查询,但是由于前面有一个逻辑删除表示​​​is_deleted = 0​​​,这导致如果不进行特殊处理,后面name+age无法在一个括号里,但是如果在一个括号里(所以使用​​prefix+suffix​​​),并且name前面的OR要消失,所以使用​​prefixOverrides​

select * from  
where
is_deleted = 0
<trim prefix="(" suffix=")" prefixOverrides="OR">
<if test="userName=null and userName!=''">
OR t1.`name` = #{userName}
</if>
<if test="userAge=null and userAge!=''">
OR t1.`age` = #{userAge}
</if>
</trim>