Insert
Hint
This article is generated by AI translation.
You can insert data using an entity bean or a Map as the container.
Use a bean as the data container
User user = new User();
user.setId(20);
user.setName("new name");
user.setAge(88);
user.setCreateTime(new Date());
LambdaTemplate lambda = ...;
int result = lambda.insert(User.class)
.applyEntity(user)
.executeSumResult();
// result is 1
Use a Map as the data container
Map<String, Object> user = new HashMap<>();
user.put("id", 20);
user.put("name", "new name");
user.put("age", 88);
user.put("create_time", new Date());
LambdaTemplate lambda = ...;
int result = lambda.insert(User.class)
.applyMap(user)
.executeSumResult();
// result is 1
Batching
Use batch insert when inserting many records.
User user1 = new User();
...
User user2 = new User();
...
User user3 = new User();
...
LambdaTemplate lambda = ...
int result = lambda.insert(User.class)
.applyEntity(user1, user2, user3); // 不定参方式
//.applyEntity(new User[]{user1, user2, user3}); // 使用数组
//.applyEntity(Arrays.asList(user1, user2, user3));// 使用 List
.executeSumResult();
// result is 3
- For Map data, use
applyMapinstead ofapplyEntity. - You can call
applyEntity/applyMapmultiple times beforeexecuteSumResultto stage batches.
Write conflicts
Unintentionally inserting duplicates can cause primary-key conflicts. A common approach is “check then update/insert,” e.g.:
常规方法
if (adapter.queryByEntity(User.class)
.eq(User::getId,user.getId())
.queryForCount() > 0) {
// update
} else {
// insert
}
Databases often provide more efficient conflict handling, for example:
- MySQL:
ON DUPLICATE KEY UPDATEon INSERT. - Oracle:
MERGE INTO ... WHEN MATCHED THEN ... WHEN NOT MATCHED THEN ....
Using these dialect features requires:
- dbVisitor dialect support; see dialect support.
- Setting a conflict strategy via
onDuplicateStrategy.
dbVisitor provides three conflict strategies to avoid extra code:
- Into: plain
INSERT INTO(throws on conflict). - Update: use dialect-specific MERGE/ON CONFLICT to update on conflict.
- Ignore: use IGNORE or dialect-specific syntax to skip conflicting rows.
Default (INTO)
Uses plain insert into; conflicts error out.
默认策略可以不指定,也可以明确设置
LambdaTemplate lambda = ...
int result = lambda.insert(User.class)
.applyEntity(user);
.onDuplicateStrategy(DuplicateKeyStrategy.Into) // explicit
.executeSumResult();
Replace (UPDATE)
Implementation depends on dialect, for example:
- MySQL:
ON DUPLICATE KEY UPDATEclause on INSERT. - Oracle:
MERGE INTO ... WHEN MATCHED THEN ... WHEN NOT MATCHED THEN .... - PostgreSQL:
ON CONFLICT (...) DO UPDATE SET ....
提示
Dialect determines availability; forcing it without support will raise errors.
使用方式
LambdaTemplate lambda = ...
int result = lambda.insert(User.class)
.applyEntity(user);
.onDuplicateStrategy(DuplicateKeyStrategy.Update) // update on conflict
.executeSumResult();
Ignore (IGNORE)
Implementation depends on dialect, for example:
- MySQL:
INSERT IGNORE. - Oracle:
MERGE INTO ... WHEN NOT MATCHED THEN .... - DM: hint
IGNORE_ROW_ON_DUPKEY_INDEXto ignore by PK.
使用方式
LambdaTemplate lambda = ...
int result = lambda.insert(User.class)
.applyEntity(user);
.onDuplicateStrategy(DuplicateKeyStrategy.Ignore) // ignore on conflict
.executeSumResult();