常用的增删改
在使用 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 与脚本。
