2.2 插入、更新、删除
插入操作
Pojo 插入(推荐)
User user = new User();
user.setName("张三");
user.setAge(25);
DB.Pojo.insert(user); // 自动回填主键到 user 对象
Long id = user.getId();
注意:只有 DB.Pojo.insert() 会自动回填主键。DB.Table、DB.Jdbc 等方法不会。
指定表名插入
DB.Table.insert("user")
.value("name", "张三")
.value("age", 25)
.value("create_time", new Date())
.execute();
// 返回自增主键
Long id = DB.Table.insert("user")
.value("name", "张三")
.insertWithAutoKey();
批量插入
List<User> users = Arrays.asList(
new User("张三", 25),
new User("李四", 30)
);
DB.Batch.insert(users);
DB.Batch.insert(users, 100); // 每批 100 条
插入或更新
User user = new User();
user.setId(1L);
user.setName("张三");
DB.Pojo.insertOrUpdate(user);
// id=1 存在 → UPDATE,不存在 → INSERT
更新操作
Pojo 更新(推荐)
// 根据 ID 更新非空字段
DB.Pojo.updateById(user);
// 更新指定字段
DB.Pojo.update(User.class)
.set(User::getName, "李四")
.set(User::getUpdateTime, new Date())
.eq(User::getId, 1)
.execute();
// 条件更新
DB.Pojo.update(User.class)
.set(User::getStatus, 0)
.lt(User::getLastLoginTime, DateUtil.addDays(new Date(), -30))
.execute();
指定表名更新
DB.Table.update("user")
.set("name", "李四")
.set("update_time", new Date())
.where(Condition.where().eq("id", 1))
.execute();
表达式更新
DB.Table.update("user")
.setSql("score = score + 10")
.setSql("login_count = login_count + 1")
.eq("id", 1)
.execute();
安全机制
无条件更新会被保护:
// 不会更新全表
DB.Pojo.update(User.class).set(User::getStatus, 0).execute();
// → UPDATE user SET status = 0 WHERE is_deleted = 0
删除操作
条件删除
DB.Pojo.delete(User.class).eq(User::getId, 1).execute();
// 复杂条件
DB.Pojo.delete(User.class)
.eq(User::getStatus, 0)
.lt(User::getCreateTime, DateUtil.addDays(new Date(), -365))
.execute();
指定表名删除
DB.Table.delete("user").eq("id", 1).execute();
逻辑删除
当 Bean 中存在 isDeleted 字段时,DLZ-DB 自动将 DELETE 转换为 UPDATE:
DB.Pojo.delete(User.class).eq(User::getId, 1).execute();
// 实际执行:UPDATE user SET is_deleted = 1 WHERE id = 1 AND is_deleted = 0
物理删除
如需执行真正的 DELETE(绕过逻辑删除),可以使用 Table 方式:
DB.Pojo.delete(User.class).eq(User::getId, 1).ignoreLogicDelete(true).execute();
// 执行真正的 DELETE
安全机制
无条件删除会被保护:
DB.Pojo.delete(User.class).execute();
// → DELETE FROM user WHERE is_deleted = 0(不会删全表)