mybatis中select标签
时间: 2025-05-28 16:41:46 浏览: 31
### MyBatis 中 `select` 标签的使用方法
#### 基本语法结构
`<select>` 是 MyBatis 映射文件中的一个重要标签,用于定义查询操作。其基本语法如下:
```xml
<select id="statementId" resultType="resultTypeOrResultMap" parameterType="paramType">
SQL 查询语句
</select>
```
- **id**: 表示命名空间下的唯一标识符,供外部调用。
- **resultType**: 返回的结果集映射到 Java 对象的具体类路径或别名[^1]。
- **parameterType**: 输入参数的数据类型,可以是简单类型、POJO 或 Map 等[^3]。
---
#### 示例 1:单条件查询
假设有一个用户表 `UserInfo`,需要根据用户名模糊查询用户信息。
##### Mapper 文件配置
```xml
<select id="selectUserInfoByName" resultType="com.java265.po.UserInfo" parameterType="string">
SELECT id, name, notes
FROM UserInfo
WHERE name LIKE CONCAT('%', #{name}, '%')
</select>
```
##### Mapper 接口方法
```java
public List<UserInfo> selectUserInfoByName(String name);
```
此示例中,`#{name}` 被替换为传入的实际参数值,并自动处理 SQL 注入风险。
---
#### 示例 2:多条件查询
如果需要基于多个字段进行联合查询,则可以在 `<select>` 标签下加入更多条件。
##### Mapper 文件配置
```xml
<select id="selectUserInfoByConditions" resultType="com.java265.po.UserInfo" parameterType="map">
SELECT id, name, notes
FROM UserInfo
WHERE name LIKE CONCAT('%', #{name}, '%')
AND notes LIKE CONCAT('%', #{notes}, '%')
</select>
```
##### Mapper 接口方法
```java
public List<UserInfo> selectUserInfoByConditions(
@Param("name") String name,
@Param("notes") String notes);
```
这里通过 `@Param()` 将方法参数绑定到 SQL 占位符上,便于动态传递参数。
---
#### 示例 3:复杂查询与分页支持
当涉及复杂的查询逻辑时,可以通过嵌套子查询或其他高级功能来增强灵活性。
##### Mapper 文件配置
```xml
<select id="selectUsersWithPagination" resultType="com.java265.po.User" parameterType="map">
SELECT *
FROM (
SELECT u.*, ROW_NUMBER() OVER (ORDER BY u.id ASC) AS rowNum
FROM User u
WHERE u.name LIKE CONCAT('%', #{name}, '%')
AND u.sex = #{sex}
) tempTable
WHERE rowNum BETWEEN #{startRow} AND #{endRow}
</select>
```
##### Mapper 接口方法
```java
public List<User> selectUsersWithPagination(
@Param("name") String name,
@Param("sex") String sex,
@Param("startRow") int startRow,
@Param("endRow") int endRow);
```
这种写法适用于大数据量场景下实现分页查询[^4]。
---
#### 特殊情况:返回自增主键
在某些情况下,可能需要获取插入数据后的自动生成主键值。此时可通过 `useGeneratedKeys=true` 和 `keyProperty` 属性完成设置。
##### Mapper 文件配置
```xml
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
INSERT INTO User(name, age) VALUES(#{name}, #{age})
</insert>
<select id="getUserById" resultType="com.java265.po.User" parameterType="int">
SELECT * FROM User WHERE id = #{id}
</select>
```
##### Mapper 接口方法
```java
public void insertUser(User user);
public User getUserById(int id);
```
上述代码片段展示了如何利用 `useGeneratedKeys` 功能捕获数据库生成的主键并赋值给对象属性[^5]。
---
### 总结
MyBatis 的 `<select>` 标签提供了强大的查询能力,能够满足从简单的单条件查询到复杂的多条件组合甚至带分页的功能需求。合理运用这些特性可以帮助开发者更高效地构建持久化层逻辑。
---
阅读全文
相关推荐


















