Mybatis 中如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式? - 面试宝典

举报
皮牙子抓饭 发表于 2023/08/22 09:56:52 2023/08/22
【摘要】 在Mybatis中,可以通过配置映射文件来将SQL执行结果封装为目标对象并返回。 一种映射形式是使用resultType属性,将查询结果映射为指定的目标对象。例如:xmlCopy code<select id="selectUser" resultType="com.example.User"> SELECT * FROM user WHERE id = #{id}</select>另一种...

在Mybatis中,可以通过配置映射文件来将SQL执行结果封装为目标对象并返回。 一种映射形式是使用resultType属性,将查询结果映射为指定的目标对象。例如:

xmlCopy code<select id="selectUser" resultType="com.example.User">
  SELECT * FROM user WHERE id = #{id}
</select>

另一种映射形式是使用resultMap属性,通过定义映射关系来将查询结果映射为目标对象。例如:

xmlCopy code<resultMap id="userMap" type="com.example.User">
  <id property="id" column="id"/>
  <result property="name" column="name"/>
  <result property="age" column="age"/>
</resultMap>
<select id="selectUser" resultMap="userMap">
  SELECT * FROM user WHERE id = #{id}
</select>

除了以上两种形式,还可以使用@Results和@Result注解来进行映射配置。例如:

javaCopy code@Results({
  @Result(property = "id", column = "id"),
  @Result(property = "name", column = "name"),
  @Result(property = "age", column = "age")
})
@Select("SELECT * FROM user WHERE id = #{id}")
User selectUserById(int id);

以上是Mybatis中将SQL执行结果封装为目标对象并返回的几种映射形式。根据具体的需求和使用场景,可以选择合适的方式来进行对象映射。

以下是一个示例代码,演示了如何使用Mybatis将SQL执行结果封装为目标对象并返回:

创建User类作为目标对象:

javaCopy codepublic class User {
    private int id;
    private String name;
    private int age;
    
    // 省略getter和setter方法
}

创建映射文件(userMapper.xml):

xmlCopy code<!-- 配置命名空间 -->
<mapper namespace="com.example.UserMapper">
    <!-- 使用resultType将结果映射为User对象 -->
    <select id="selectUser" resultType="com.example.User">
        SELECT * FROM user WHERE id = #{id}
    </select>
    <!-- 使用resultMap定义映射关系将结果映射为User对象 -->
    <resultMap id="userMap" type="com.example.User">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="age" column="age"/>
    </resultMap>
    <select id="selectUserWithMap" resultMap="userMap">
        SELECT * FROM user WHERE id = #{id}
    </select>
</mapper>

创建UserMapper接口:

javaCopy codepublic interface UserMapper {
    User selectUser(int id);
    User selectUserWithMap(int id);
}

配置Mybatis的SqlSessionFactory和MapperScannerConfigurer:

javaCopy code@Configuration
@MapperScan("com.example.mapper")
public class MybatisConfig {
    
    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        return sessionFactory.getObject();
    }
    
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer() {
        MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();
        scannerConfigurer.setBasePackage("com.example.mapper");
        return scannerConfigurer;
    }
    
    // 省略其他配置
}

使用UserMapper进行查询:

javaCopy code@Autowired
private UserMapper userMapper;
public void getUser() {
    // 使用resultType方式
    User user = userMapper.selectUser(1);
    System.out.println(user.getId() + " - " + user.getName() + " - " + user.getAge());
    
    // 使用resultMap方式
    User userWithMap = userMapper.selectUserWithMap(1);
    System.out.println(userWithMap.getId() + " - " + userWithMap.getName() + " - " + userWithMap.getAge());
}

以上示例代码演示了如何使用Mybatis将SQL执行结果封装为目标对象并返回,包括使用resultType和resultMap两种映射形式。根据具体的需求选择合适的方式进行对象映射。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。