主 键生成
达梦数据库的自增列适合通过 JDBC generated keys 回填;sequence 适合在 INSERT 前取得主键。
说明
通用配置见主键生成与回填。
使用自增列
CREATE TABLE user_info (
id BIGINT IDENTITY(1, 1) PRIMARY KEY,
name VARCHAR(64)
);
- 构造器 API
- 方法注解
- Mapper 文件
达梦自增列映射
@Table("user_info")
public class UserInfo {
@Column(value = "id", primary = true, keyType = KeyType.Auto)
private Long id;
@Column("name")
private String name;
}
新增后属性自动回填
UserInfo user = new UserInfo();
user.setName("mali");
LambdaTemplate lambda = ...;
lambda.insert(UserInfo.class)
.applyEntity(user)
.executeSumResult();
Long id = user.getId();
@Insert(
value = "INSERT INTO user_info (name) VALUES (#{name})",
useGeneratedKeys = true,
keyProperty = "id",
keyColumn = "id"
)
int insertUser(UserInfo user);
达梦 generated keys
<insert id="insertUser"
useGeneratedKeys="true"
keyProperty="id"
keyColumn="id">
INSERT INTO user_info (name)
VALUES (#{name})
</insert>
建议显式写出 keyColumn,让回填列和业务主键列保持一致。
注意
需要回填主键时,多个实体逐条插入、分别回填。需要一起提交或回滚时,见多条写入一致性。
使用序列
下面使用普通主键列和序列,与上面的自增列示例独立:
CREATE TABLE user_info (
id BIGINT PRIMARY KEY,
name VARCHAR(64)
);
CREATE SEQUENCE user_info_seq START WITH 1 INCREMENT BY 1;
- 构造器 API
- 方法注解
- Mapper 文件
import net.hasor.dbvisitor.mapping.Column;
import net.hasor.dbvisitor.mapping.KeySeq;
import net.hasor.dbvisitor.mapping.KeyType;
import net.hasor.dbvisitor.mapping.Table;
@Table("user_info")
public class UserInfo {
@Column(primary = true, keyType = KeyType.Sequence)
@KeySeq("user_info_seq")
private Long id;
private String name;
// 省略 getter 和 setter
}
UserInfo user = new UserInfo();
user.setName("mali");
lambda.insert(UserInfo.class)
.applyEntity(user)
.executeSumResult();
Long id = user.getId();
每次插入前自动获取序列值,赋给 id 后再写入记录。
@SelectKeySql(
value = "SELECT user_info_seq.NEXTVAL AS id",
keyProperty = "id",
keyColumn = "id",
order = Order.Before
)
@Insert("INSERT INTO user_info (id, name) VALUES (#{id}, #{name})")
int insertUser(UserInfo user);
<insert id="insertUser">
<selectKey keyProperty="id" keyColumn="id" order="BEFORE">
SELECT user_info_seq.NEXTVAL AS id
</selectKey>
INSERT INTO user_info (id, name)
VALUES (#{id}, #{name})
</insert>