
你编辑一条新闻,同时需要给该新闻打上标签(可以一个或者多个:比如:女性,爱,钱等等),然后存储到数据库中。
怎么存,肯定涉及到三张表,新闻表,标签表,新闻标签id关联表。
新闻表插入数据简单,标签表插入数据简单。
那新闻标签表呢,如何关联,那是不是需要新闻表和标签表插入数据的时候,返回它们的主键Id然后再存储到新闻标签表中。
一、mysql
1.xml配置文件
<!-- 主要讲新添加的两个属性:useGeneratedKeys和keyProperty-->
<!--useGeneratedKeys="true" 默认值是:false。 含义:设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中-->
<!--keyProperty="bindInfo.id" 就很好理解了,就是把主键值赋值给BindInfo实体的id属性中-->
<insert id="insertBindInfo" parameterType="com.unicom.portal.bestcenter.entity.BindInfo" useGeneratedKeys="true" keyProperty="bindInfo.id" >
</insert>
2.mapper接口
@Mapper
public interface BindInfoMapper {
int insertBindInfo(@Param("bindInfo") BindInfo bindInfo);
}
3.实体
@Data
public class BindInfo {
/**
* 主键id
*/
private Long id;
}
4.实际效果

5.查看数据库该条记录

对于像Oracle这样的没有提供主键自增的功能的数据库而言,通常使用序列的方式获取自增主键。可以使用<selectKey>标签来获取主键的值,这种方式不仅适用于不提供主键自增功能的数据库,也适用于提供主键自增功能的数据库。
<insert id="insertBindInfo" parameterType="com.unicom.portal.bestcenter.entity.BindInfo">
<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
insert into ...
</insert>
Oracle 数据库中的值要设置为 BEFORE ,这是因为 Oracle中需要先从序列获取值,然后将值作为主键插入到数据库中。
如果Mysql 使用selectKey的方式获取主键,order :AFTER
| 属性 | 描述 |
| keyProperty | selectKey 语句结果应该被设置的目标属性。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。 |
| keyColumn | 匹配属性的返回结果集中的列名称。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。 |
| resultType | 结果的类型,MyBatis 通常可以推算出来。MyBatis 允许任何简单类型用作主键的类型,包括字符串。如果希望作用于多个生成的列,则可以使用一个包含期望属性的 Object 或一个 Map。 |
| order | 值可为BEFORE 或 AFTER。如果是 BEFORE,那么它会先执行selectKey设置 keyProperty 然后执行插入语句。如果为AFTER则相反。 |
喜欢就加个关注吧,

往期精选
文章转载自码酱,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




