第1关:封装对象和基本类型 100 学习内容 参考答案 记录 评论 任务描述 相关知识 场景介绍 resultType属性 一般数据类型 JavaBean类型 编程要求 测试说明 任务描述 本关任务:编写一个能够根据id查询学生信息以及统计某一性别的学生人数小程序。 相关知识 为了完成本关任务,你需要掌握:1.mybatis的resultType属性,2.SQL语句的编写。 场景介绍 使用Mybatis操作数据库的过程中,不可避免的就是如何将查询的结果使用java类型进行封装。mybatis已经对常用的数据类型实现了对应的类型处理器,也可以进行自定义类型处理器(具体内容在实训Mybatis的核心配置中)。 在现实的场景中,可能查询单个字段,单个对象数据或者集合数据等。这时我们可以使用<resultType>属性对查询结果的类型进行指定。 t_user表结构: 字段名 类型 说明 id int id主键 username varchar 用户名称 birthday int 年龄 sex varchar 性别 resultType属性 resultType 属性可以指定结果集的类型,它支持基本类型、Map集合、实体类类型。 注意:如果是实体类名称时,实体类中的属性名称必须和查询语句中的列名保持一致,否则无法实现封装。 resultType属性值: 指定结果集类型的全限定路径名 。 使用<typeAiases></typeAiases>标签为对象设置的别名。 Mybatis默认支持的别名。 一般数据类型 根据ID查询对应用户的名称,并使用reslutType指定查询结果的返回值类型为String。 //根据ID查询用户名称 String findUsernameById(int id); 指定 resultType 返回值类型是 String 类型的,string 在这里是一个别名,代表的是 java.lang.String。 对于引用数据类型,都是将大写字母转小写,比如 HashMap 对应的别名是 hashmap。 基本数据类型考虑到重复的问题,会在其前面加上_,比如 byte 对应的别名是 '_byte'。 <!-- 根据 id 获取用户名称 --> <select id="findUsernameById" parameterType="int" resultType="string"> select username from t_user where id = #{id} </select> JavaBean类型 根据ID字段查询数据库中的用户信息,使用resultType指定对应的JavaBean类型并进行封装。 //根据ID查询用户信息 User findUserById(int id); resultType中的user是一个别名,代表的是com.educoder.entity.User。 如果未在mybatis-config.xml文件中设置 User对象的别名,则需要使用User对象的全限定路径名称:com.educoder.entity.User。 <!-- 根据 id 获取用户信息 --> <select id="findUserById" parameterType="int" resultType="user"> select * from t_user where id = #{id} </select> 编程要求 根据提示,在右侧编辑器补充代码,使用Mybatis对数据库进行操作,具体步骤如下: 根据StudentMapper.java文件定义的方法,在StudentMapper.xml文件中编写SQL并对返回的数据进行映射。 在StudentTest.java文件中编写测试代码,获取SqlSession对象插入数据,调用StudentMapper.xml中编写的 SQL 语句,并提交事务。 StudentMapper.java文件中的方法: findStudentById()方法:根据Id查询学生信息,查询结果为com.educoder.entity.Student对象类型。 countStudentBySex()方法:根据Sex统计该性别的学生人数,查询结果为Integer对象类型。 t_student表结构: 字段名 类型 说明 id int id主键 name varchar 学生名称 age int 年龄 sex varchar 性别 grade varchar 评分等级:A、B、C、D 测试说明 平台会对你编写的代码进行测试: 预期输出: [com.educoder.mapper
时间: 2025-07-13 08:37:11 浏览: 11
<think>嗯,用户想了解MyBatis中resultType属性的使用方法,还有如何通过ID查询学生信息和统计某性别的学生人数。首先,我得回忆一下resultType和resultMap的区别。记得引用[1]里提到,查询标签里的resultMap属性填入的是结果映射的别名,适用于复杂映射,比如一对一关系。而resultType应该是直接指定返回类型的,比如Java的基本类型或者实体类。
那resultType的使用方法,应该是在select标签中直接指定类的全限定名或者别名。比如返回一个Student对象,就写resultType="com.example.Student"。如果是基本类型,比如int或者String,就直接写Java.lang.Integer或者string的别名,不过MyBatis应该有内置的别名,比如int、string这些。
接下来,用户需要根据ID查询学生信息。这个应该是一个简单的select语句,参数是id,返回学生对象,所以resultType应该是学生的实体类。然后统计性别数量,这里可能需要返回一个整数,所以resultType应该是int,或者如果是统计每个性别的数量,可能需要返回一个Map,但用户的问题可能是指定某个性别的总人数,所以参数里传性别,返回int。
然后需要检查用户提供的引用内容。引用[3]提到了SpringBoot配置MyBatis,还有一个update语句的例子。但用户的问题是关于查询的,所以可能需要用select标签,正确使用resultType。引用[1]里的resultMap是用于结果映射,而这里用户问的是resultType,所以应该区分清楚两者的使用场景。
可能用户容易混淆resultType和resultMap,所以需要在回答中说明两者的区别。例如,当数据库列名和实体类属性名不一致时,用resultMap来做映射,而如果一致的话,可以直接用resultType指定实体类。
然后,具体到示例代码,根据ID查询学生,SQL语句应该是select * from student where id=#{id},然后resultType是Student类的全限定名。统计性别数量的话,SQL语句是select count(*) from student where gender=#{gender},resultType是int。
可能还需要提醒用户,在MyBatis的配置文件中,要确保有正确的类型别名设置,或者在mapper文件中使用全限定类名。另外,参数传递的方式,比如使用@Param注解或者直接传递参数。
还需要注意,用户的问题里提到“通过ID查询学生信息”和“统计某性别学生人数”,这两个操作可能需要不同的resultType。前者返回对象,后者返回数值。所以示例中需要分别展示这两种情况。
可能用户在使用过程中会遇到问题,比如结果映射不正确,或者返回类型不匹配,这时候需要检查resultType是否正确,或者是否应该使用resultMap。比如,如果学生的属性名和数据库列名不一致,使用resultType可能会导致映射失败,这时候就需要用resultMap来指定映射关系。
总结一下,回答的结构应该先解释resultType的作用和使用方法,然后分别给出两个示例:根据ID查询学生(使用实体类作为resultType)和统计性别数量(使用int作为resultType),最后比较resultType和resultMap的区别,并给出常见问题解答。同时,引用相关的参考资料,比如引用[1]关于resultMap的说明,引用[3]关于MyBatis的配置。</think>### MyBatis中`resultType`属性使用方法及查询示例
#### 一、`resultType`属性作用与用法
`resultType`用于指定SQL查询结果的映射类型,适用于**数据库字段名与Java对象属性名完全一致**的场景。其值为:
- Java基础类型的别名(如`int`、`string`)
- Java实体类的全限定类名(如`com.example.Student`)
- MyBatis内置类型别名(如`map`表示`java.util.Map`)
#### 二、通过ID查询学生信息
1. **Mapper接口定义**:
```java
Student selectStudentById(@Param("studentId") int id);
```
2. **Mapper XML配置**:
```xml
<select id="selectStudentById" resultType="com.example.Student">
SELECT student_id AS id, name, gender
FROM student
WHERE student_id = #{studentId}
</select>
```
**说明**:
- `resultType`指定为实体类`Student`的全限定名
- 通过`AS`将数据库字段`student_id`映射到Java属性`id`[^1]
#### 三、统计某性别学生人数
1. **Mapper接口定义**:
```java
int countStudentsByGender(@Param("gender") String gender);
```
2. **Mapper XML配置**:
```xml
<select id="countStudentsByGender" resultType="int">
SELECT COUNT(*)
FROM student
WHERE gender = #{gender}
</select>
```
**说明**:
- `resultType`使用基础类型别名`int`
- 参数通过`@Param`注解绑定
#### 四、`resultType`与`resultMap`对比
| 特性 | resultType | resultMap |
|-------------------|-------------------------------|-----------------------------------|
| 映射方式 | 自动映射 | 手动配置映射关系 |
| 适用场景 | 字段名与属性名完全一致 | 复杂映射(如一对一、一对多) |
| 配置复杂度 | 简单 | 需要额外定义`<resultMap>` |
#### 五、常见问题
1. **字段名与属性名不一致怎么办?**
- 使用`AS`重命名字段(如示例二)
- 或改用`resultMap`定义映射关系[^1]
2. **如何返回`Map`类型结果?**
```xml
<select id="selectStudentMap" resultType="map">
SELECT * FROM student WHERE student_id = #{id}
</select>
```
3. **为什么UPDATE语句无效果?**
检查是否忘记提交事务或参数绑定错误[^3]
阅读全文
相关推荐


















