Mapper.xml中的resultType与parameterType与resultMap

resultType

在 MyBatis 中,resultType 是一个在 SELECT id, name, age FROM users WHERE id = #{id}

当上面的 SQL 被执行后,MyBatis 会为结果集中的每一行数据创建一个 UserVO 对象,并将结果集的列值填充到

这个对象的属性中:列 id 到属性 id,列 name 到属性 name,列 age 到属性 age。然后,该对象会被添加到一

个列表中(如果查询返回多行结果),最后这个列表会被作为整个 等映射标签中,用以指明传递给 SQL 语句的参数的数据类型。

你可以使用 parameterType 来指定单个参数的类型或者是一个对象(JavaBean 或者 Map)来包含多个参数。如

果使用对象作为参数,MyBatis 允许你在 SQL 语句中用点语法来引用对象的属性。

单个参数

当 SQL 语句需要一个简单类型(如 int、long、String 等)的参数时,可以直接指定该参数的类型作为

parameterType 的值。

举例:

对象作为参数

当 SQL 语句需要多个参数时,通常会传递一个拥有多个字段(每个字段作为一个参数)的对象。在这种情况下,

parameterType 应该被设置为这个对象的类路径,MyBatis 会通过反射自动从对象中取出相应的属性值作为

SQL 语句的参数。

举例:

public class User {
    private Integer id;
    private String username;
    // getters 和 setters
}

  UPDATE users
  SET username = #{username}
  WHERE id = #{id}


(UNIX_TIMESTAMP(CONVERT_TZ(NOW(), '+00:00', '+08:00')) * 1000)
-- 查看当前的时间区域
SHOW VARIABLES LIKE '%time_zone%';

-- 将时区设置为中国标准时间
SET GLOBAL time_zone = '+8:00';

为什么要使用 parameterType

  1. 类型安全:通过指定参数类型,MyBatis 能更安全地处理数据,避免类型不匹配的问题。
  2. 简化映射:MyBatis 通过 parameterType 自动识别参数属性,简化了动态 SQL 的编写。
  3. 灵活性:即使是复杂的嵌套对象,只要正确指定了 parameterType,也可以很容易地映射参数。

总之,parameterType 在告诉 MyBatis 如何处理和映射 SQL 语句中的参数方面扮演着关键角色,从而使数据库

操作更加灵活、安全和高效。

resultMap

在MyBatis中,resultMap是一种非常灵活的映射方式,用于定义如何从数据库结果集中映射到Java对象属性。它

提供了比简单类型别名(alias)更细粒度的控制,尤其适用于复杂的映射关系,例如当数据库表的列名和Java对象的

属性名不完全一致,或者需要处理复杂的类型转换时。

基本用法

在mapper.xml文件中,可以使用标签定义一个resultMap,如下所示:


    
    
    
  • id属性定义了这个resultMap的唯一标识符。
  • type属性指定了映射到的Java对象的全路径类名。
  • 标签映射数据库表的主键列到Java对象的属性。
  • 标签映射数据库表的其他列到Java对象的属性。

使用resultMap

在定义了resultMap之后,可以在select语句中通过resultMap属性引用它,如下所示:

这个select语句会使用PetResultMap定义的映射规则从pets表中检索数据,并将结果集映射到com.example.Pet的实例中。

复杂映射

resultMap的强大之处在于其对复杂映射关系的支持。例如,处理一对多关系时,可以使用标签映射子对象的集合。


    
    
    
        
        
    

在这个例子中,标签定义了如何从结果集中提取Pet对象的集合,并将它们映射到Person对象的pets属性中。这种方式非常适合处理复杂的关联和嵌套结果集。

resultMap提供的细粒度映射和对复杂映射关系的支持,是MyBatis提供的一个强大功能,使得从数据库结果集到Java对象的映射更加灵活和准确。

你可能感兴趣的:(xml,mybatis,mysql)