0


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

在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两种映射形式。根据具体的需求选择合适的方式进行对象映射。

Mybatis 中如何将 SQL 执行结果封装为目标对象并返回?都有哪些映射形式?

引言

Mybatis 是一个优秀的持久层框架,它提供了多种方式将 SQL 执行结果封装为目标对象并返回。本文将介绍在 Mybatis 中如何进行结果映射,并探讨几种常见的映射形式。

结果映射

结果映射是将 SQL 执行结果与目标对象进行关联的过程。Mybatis 提供了多种方式来进行结果映射,以便满足不同的需求。

基于列名的映射

在基于列名的映射中,Mybatis 会将 SQL 查询结果中的列名与目标对象的属性名进行匹配,并将查询结果的值赋给目标对象对应的属性。需要注意的是,目标对象的属性名必须和查询结果的列名一致,且不区分大小写。 示例:

javaCopy codepublic class User {
    private Long id;
    private String username;
    // getters and setters
}
// Mapper XML 文件
<select id="getUserById" resultType="User">
    SELECT id, username FROM users WHERE id = #{id}
</select>

基于属性的映射

在基于属性的映射中,Mybatis 会将 SQL 查询结果中的值按照属性的顺序,依次赋给目标对象的属性。需要注意的是,查询结果的列数必须与目标对象的属性个数一致,且按顺序对应。 示例:

javaCopy codepublic class User {
    private Long id;
    private String username;
    // getters and setters
}
// Mapper XML 文件
<select id="getUserById" resultType="User">
    SELECT id, username FROM users WHERE id = #{id}
</select>

嵌套映射

嵌套映射是指将 SQL 查询结果包含的多个表的数据映射为一个复杂的目标对象。在 Mybatis 中,可以通过定义复杂的结果映射关系来实现嵌套映射。 示例:

javaCopy codepublic class Order {
    private Long id;
    private String orderNo;
    private User user;
    // getters and setters
}
// Mapper XML 文件
<select id="getOrderById" resultMap="OrderResultMap">
    SELECT o.id, o.order_no, u.id as user_id, u.username as user_username
    FROM orders o
    LEFT JOIN users u ON o.user_id = u.id
    WHERE o.id = #{id}
</select>
<resultMap id="OrderResultMap" type="Order">
    <id property="id" column="id"/>
    <result property="orderNo" column="order_no"/>
    <association property="user" javaType="User">
        <id property="id" column="user_id"/>
        <result property="username" column="user_username"/>
    </association>
</resultMap>

自动映射

自动映射是 Mybatis 提供的一种便捷的映射方式。在自动映射中,Mybatis 会根据查询结果的列名与目标对象的属性名自动进行映射,无需手动定义映射关系。需要注意的是,自动映射对于复杂的映射关系可能无法满足需求,此时需要使用其他映射方式。 示例:

javaCopy codepublic class User {
    private Long id;
    private String username;
    // getters and setters
}
// Mapper XML 文件
<select id="getUserById" resultMap="AutoMapping">
    SELECT id, username FROM users WHERE id = #{id}
</select>
<resultMap id="AutoMapping" type="User" autoMapping="true"/>

结论

在 Mybatis 中,实现将 SQL 执行结果封装为目标对象并返回的过程是通过结果映射来实现的。基于列名的映射和基于属性的映射是最常见的映射方式,可以满足大部分的需求。而嵌套映射可以实现将多个表的数据映射为一个复杂的目标对象。自动映射提供了一种便捷的方式,可以根据列名自动进行映射,但对于复杂的映射关系可能无法满足需求。在实际应用中,根据具体的业务需求选择合适的映射方式,以实现高效、灵活的数据映射。

标签: mybatis sql java

本文转载自: https://blog.csdn.net/q7w8e9r4/article/details/132421685
版权归原作者 抓饭不吃皮牙子 所有, 如有侵权,请联系我们删除。

“Mybatis 中如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?”的评论:

还没有评论