@Query 注解
用来标记在接口方法上,执行一个可以返回结果集的查询语句。
信息
如果传入的是一个字符串数组,它们会被连接起来,中间用一个空格隔开。
通过字符串数组可以更清晰地管理多行 SQL。
示例:查询用户列表
@SimpleMapper
public interface UserMapper {
@Query("select * from users where id > #{id}") // 1. 定义 SQL 语句
List<User> listUsers(@Param("id") long searchId); // 2. id 为参数名,User 为返回类型
}
分页查询
方法参数中增加 Page 分页参数即可支持分页查询(Page 可以出现在参数的任意位置)。
返回 List
@SimpleMapper
public interface UserMapper {
@Query("select * from users where id > #{id}")
List<User> listUsers(@Param("id") long searchId, Page page);
}
返回 PageResult(含总记录数和总页数)
@SimpleMapper
public interface UserMapper {
@Query("select * from users where id > #{id}")
PageResult<User> listUsers(@Param("id") long searchId, Page page);
}
PageResult除包含数据列表外,还提供 原始分页信息、总记录数、总页数。
属性清单
| 属性名 | 描 述 |
|---|---|
| value | 必选 将要被执行的查询语句。 |
| statementType | 可选 JDBC 查询使用何种方式。默认值为 Prepared- Statement 对应 java.sql.Statement- Prepared 对应 java.sql.PreparedStatement- Callable 对应 java.sql.CallableStatement |
| timeout | 可选 设置查询超时时间(秒),会调用 Statement.setQueryTimeout(int)。默认值 -1 表示不设置 |
| fetchSize | 可选 设置每次从数据库获取的行数,会调用 Statement.setFetchSize(int)。默认值为 256 |
| resultSetType | 可选 结果集类型,用于创建 Statement 时设置 resultSetType 参数。- 可选值: FORWARD_ONLY、SCROLL_INSENSITIVE、SCROLL_SENSITIVE 和 DEFAULT(默认,相当于未设置) |
| resultSetExtractor | 可选 配置一个 ResultSetExtractor 类用于结果集处理(配置了 bindOut 时失效) |
| resultRowCallback | 可选 配置一个 RowCallbackHandler 类用于结果集处理(配置了 bindOut 时失效) |
| resultRowMapper | 可选 配置一个 RowMapper 类用于结果集处理(配置了 bindOut 时失效) |
| resultTypeHandler | 可选 配置一个 TypeHandler 类用于结果集处理(配置了 bindOut 时失效) |
| bindOut | 可选 当 Query 中使用了 多值 或 存储过程调用 时,绑定其中的输出参数。 使用该参数时返回值类型必须为 Map<String,Object> |