mybatis insert主键问题(xml映射配置六)

回填pojo属性 <- 数据库自动生成主键

useGeneratedKeys=“true” keyProperty=“id”

	<insert id="insertPerson" parameterType="priv.dengjl.ns.bean.Person"
		useGeneratedKeys="true" keyProperty="id">
		INSERT INTO PERSON(DISPLAY, NAME,
		PHONE, ADDRESS, BIRTHDATE, REMARK)
		VALUES(#{display}, #{name},
		#{phone}, #{address}, #{birthdate},
		#{remark})
	</insert>
	

插入数据库

			mapper.insertPerson(person);
			logger.debug("插入主键为:{}", person.getId());

自定义主键

selectKey 元素描述如下:

<selectKey
  keyProperty="id"
  resultType="int"
  order="BEFORE"
  statementType="PREPARED">
selectKey Attributes

字段描述

属性描述
keyPropertyselectKey 语句结果应该被设置的目标属性。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。
keyColumn匹配属性的返回结果集中的列名称。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。
resultType结果的类型。MyBatis 通常可以推算出来,但是为了更加确定写上也不会有什么问题。MyBatis 允许任何简单类型用作主键的类型,包括字符串。如果希望作用于多个生成的列,则可以使用一个包含期望属性的 Object 或一个 Map。
order这可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素 - 这和像 Oracle 的数据库相似,在插入语句内部可能有嵌入索引调用。
statementType与前面相同,MyBatis 支持 STATEMENT,PREPARED 和 CALLABLE 语句的映射类型,分别代表 PreparedStatement 和 CallableStatement 类型。

例子

	<insert id="insertPerson2" parameterType="priv.dengjl.ns.bean.Person">
		<selectKey keyProperty="id" resultType="int" order="BEFORE">
			select max(id) + 2 from person
		</selectKey>

		INSERT INTO PERSON(ID, DISPLAY, NAME,
		PHONE, ADDRESS, BIRTHDATE, REMARK)
		VALUES(#{id}, #{display}, #{name},
		#{phone}, #{address}, #{birthdate},
		#{remark})
	</insert>

插入数据库

			mapper.insertPerson2(person);
			logger.debug("插入主键为:{}", person.getId());
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个示例的MyBatis SQL映射XML文件: ```xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.dao.UserDao"> <resultMap id="userResultMap" type="com.example.entity.User"> <id column="id" property="id" /> <result column="name" property="name" /> <result column="age" property="age" /> </resultMap> <select id="getUserById" resultMap="userResultMap"> SELECT * FROM user WHERE id = #{id} </select> <insert id="insertUser" parameterType="com.example.entity.User"> INSERT INTO user (name, age) VALUES (#{name}, #{age}) </insert> <update id="updateUser" parameterType="com.example.entity.User"> UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id} </update> <delete id="deleteUserById" parameterType="int"> DELETE FROM user WHERE id = #{id} </delete> </mapper> ``` 其中,`<mapper>` 标签的 `namespace` 属性指定了该 SQL 映射文件对应的 DAO 接口的全限定名。 `<resultMap>` 标签定义了查询结果到实体类的映射关系。`<id>` 标签定义了主键列的映射关系,`<result>` 标签定义了其它列的映射关系。 `<select>`、`<insert>`、`<update>`、`<delete>` 标签分别对应 SQL 的查询、插入、更新和删除操作。其中,`id` 属性指定了该操作的唯一标识符,`parameterType` 属性指定了该操作的输入参数类型,`resultMap` 属性指定了该操作的输出结果映射关系。 在查询操作中,可以使用 `#{}` 占位符来表示输入参数,MyBatis 自动将其替换为对应的实际值。例如,`SELECT * FROM user WHERE id = #{id}` 中的 `#{id}` 将被替换为传入的 `id` 参数的实际值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值