使用 @Results 注解来手动指定字段映射
在 MyBatis 中,@Results 注解用于手动指定查询结果的字段映射,尤其当数据库列名与 Java 对象的字段名不一致时。你可以通过 @Results 和 @Result 注解来精确控制每一列与类属性之间的映射关系。
示例:使用 @Results 注解来手动指定字段映射
假设你有一个 AiTeachingPlanItems 类,它与数据库表 t_ai_teaching_plan_items 对应。这个类的字段与数据库列名不完全一致,或者你想更清晰地控制映射关系时,可以使用 @Results 注解。
1. 假设的 Java 类(AiTeachingPlanItems):
public class AiTeachingPlanItems {
private Long id; // 对应数据库的 `id` 字段
private String name; // 对应数据库的 `name` 字段
private String description; // 对应数据库的 `description` 字段
private Integer sort; // 对应数据库的 `sort` 字段
// getters and setters
}
2. 使用 @Results 注解进行字段映射:
假设 t_ai_teaching_plan_items 表的列名是 AI_ID, AI_NAME, AI_DESCRIPTION, AI_SORT,并且这些列名与你的 Java 类的属性名不完全一致。你可以通过 @Results 注解来显式指定映射关系。
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Result;
public interface AiTeachingPlanItemsMapper {
@Select("SELECT AI_ID, AI_NAME, AI_DESCRIPTION, AI_SORT FROM t_ai_teaching_plan_items WHERE AI_TEACHING_PLAN_THEME = #{aiTeachingPlanTheme} ORDER BY AI_SORT")
@Results({
@Result(property = "id", column = "AI_ID"),
@Result(property = "name", column = "AI_NAME"),
@Result(property = "description", column = "AI_DESCRIPTION"),
@Result(property = "sort", column = "AI_SORT")
})
List<AiTeachingPlanItems> getAiTeachingPlanItemsByTheme(String aiTeachingPlanTheme);
}
3. 解析代码:
1.@Select:指定 SQL 查询语句。
2.在此例中,SQL 查询从 t_ai_teaching_plan_items 表中选择了四个字段,并根据 AI_TEACHING_PLAN_THEME 进行筛选。
3.@Results:用于指定查询结果与 Java 对象字段之间的映射关系。
4.@Result(property = "id", column = "AI_ID"):这表示查询结果中的 AI_ID 列应该映射到 AiTeachingPlanItems 对象的 id 属性。
5.@Result(property = "name", column = "AI_NAME"):查询结果中的 AI_NAME 列映射到 name 属性,以此类推。
6.List<AiTeachingPlanItems>:方法返回的是一个 AiTeachingPlanItems 对象的列表。
4. 使用 @Results 的场景:
7.字段命名不一致:如果数据库中的列名与 Java 类的属性名不一致,使用 @Results 可以手动指定每列与对象属性之间的映射关系。
8.复杂映射:当查询涉及多个表连接(例如,联接查询)时,@Results 可以帮助你将多个表的列映射到不同的对象属性。
5. 小结:
9.@Results 是 MyBatis 提供的用于控制查询结果与 Java 对象之间映射的注解。
10.@Result 用来指定具体的字段映射规则,适用于字段命名不一致或者需要手动设置映射关系的场景。