跳到主要内容

调用构造器 API

Mapper 接口继承 BaseMapper<T> 后,可以在默认方法或业务代码中调用 query()update()delete()insert() 等构造器能力。

适合场景

  • 条件由 Java 代码组合,比写动态 SQL 更自然。
  • 需要复用实体映射,避免手写表名和列名。
  • 希望把复杂查询封装成 Mapper 接口上的默认方法。

不适合场景

  • SQL 已经很稳定且较短,使用 方法注解 更直观。
  • SQL 很长或需要复杂 XML 映射,使用 Mapper 文件 更合适。
  • 只是常规单表 CRUD,直接使用 BaseMapper 的 CRUD 方法即可。

Mapper 中的模式

UserMapper.java
@SimpleMapper
public interface UserMapper extends BaseMapper<User> {
default List<User> listActiveUsers(String name, int minAge) {
return query()
.eq(User::getStatus, "ACTIVE")
.like(name != null, User::getName, name)
.ge(User::getAge, minAge)
.orderByDesc(User::getCreateTime)
.queryForList();
}
}

调用方仍然只面对 Mapper 接口:

调用 Mapper
UserMapper mapper = session.createMapper(UserMapper.class);
List<User> users = mapper.listActiveUsers("alice", 18);

常见实例

新增
mapper.insert()
.applyEntity(user)
.executeSumResult();
修改
mapper.update()
.eq(User::getId, 1)
.updateTo(User::getName, "Mary")
.updateTo(User::getStatus, 2)
.doUpdate();
删除
mapper.delete()
.eq(User::getId, 1)
.doDelete();
查询
List<User> result = mapper.query()
.le(User::getId, 100)
.queryForList();
提示

Session 的获取方式取决于项目架构,详见 框架整合

深入阅读