常用的增删改

郭胜凯2026/08/17

在使用 Smart Mybatis 进行项目开发时, 我们通常需要进行各种增删改操作。Smart Mybatis 提供了丰富的内置方法来简化这些操作, 使得我们可以更高效地与数据库进行交互。

说明

本章节介绍的方法均为 Smart Mybatis 在SmartMapper基类中提供的内置方法, 继承该类后, 无需额外编写 SQL 语句即可使用。

插入数据

使用 insert 方法可以将一个实体对象插入到数据库中。该方法会根据实体类的字段映射关系生成相应的 SQL 语句。

/**
 * 插入记录
 * @param record
 *      记录
 * @return 受影响的行数
 */
int insert(T record);

示例

User user = new User();
user.setUsername("john_doe");
user.setEmail("example@example.com");
mapper.insert(user);

批量插入数据

使用 insertBatch 方法可以插入多个实体对象。具体执行方式由数据库方言决定,AUTO 主键会回填到集合中的对象。

/**
 * 批量插入记录
 * @param records
 *      记录列表
 * @return 受影响的行数
 */
int insertBatch(Collection<T> records);

示例

List<User> users = Arrays.asList(
    new User("alice", "1@example.com"),
    new User("bob", "2@example.com")
);
mapper.insertBatch(users);

records 不能是 null 或空集合。业务只调用 insertBatch,不要直接调用内部的 insertBatchSql。

更新数据

使用 updateById 方法可以根据主键更新实体对象的字段值。

全字段更新

3.0.2 的 updateById 会更新所有映射的非主键字段,不会跳过 null 或 Java 基础类型默认值。建议先查询完整实体再修改;局部更新使用明确的 MyBatis SQL 或参数化 executeSql。

/**
 * 根据主键更新记录
 * @param record
 *      记录
 * @return 受影响的行数
 */
int updateById(T record);

示例

User user = mapper.selectById(1);
user.setEmail("new@example.com");
mapper.updateById(user);

删除数据

使用 deleteById 方法可以根据主键删除对应的记录。

/**
 * 根据主键删除记录
 * @param id
 *      主键
 * @return 受影响的行数
 */
int deleteById(Serializable id);

示例

mapper.deleteById(1);

批量删除数据

使用 deleteByIds 方法可以根据多个主键批量删除对应的记录。

/**
 * 根据主键列表批量删除记录
 * @param ids
 *      主键列表
 * @return 受影响的行数
 */
int deleteByIds(List<? extends Serializable> ids);

示例

List<Integer> ids = Arrays.asList(1, 2, 3);
mapper.deleteByIds(ids);

调用前应检查集合非空。删除操作不要依赖空集合的条件退化行为。

根据条件删除数据

使用 delete 方法可以根据指定的条件删除记录。

/**
 * 根据条件删除记录
 * @param where
 *      条件构造器
 * @return 受影响的行数
 */
int delete(Where where);

示例

Where where = Where.where(User::getEmail).like("%example.com");
mapper.delete(where);

防止全表删除

delete(Where.where()) 会生成无条件删除。动态条件可能全部被 ifAnd/ifOr 忽略时,必须在 Service 边界先验证至少存在一个有效限制条件。

总结

通过以上方法, 你可以方便地使用 Smart Mybatis 进行各种增删改操作。利用这些内置方法, 可以大大简化数据库交互的代码量, 提高开发效率。接下来, 你可以结合查询操作, 实现更复杂的业务逻辑。

说明

完整方法清单见 SmartMapper API,查询条件见 DSL 条件查询,自定义语句见 原始 SQL 与脚本。

Last Updated 12/4/2025, 9:56:49 AM