ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # 简介 resultType可以指定将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功 如果sql查询字段名和pojo的属性名不一致,可以通过resultMap将字段名和属性名作一个对应关系,resultMap实际上还需要将查询结果映射到pojo对象中 resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询 *constructor: 类在实例化时候,用来注入结果到构造方法中 - idArg:ID参数:标记结果作为ID可以帮助提高整体性能 - arg: 注入到构造方法的一个普通结果 * id: 一个id结果,标记结果作为id可以帮助提高整体性能 * result: 注入到字段或javaBean属性的普通结果 * association: 一个复杂的类型关联,许多结果将包成这种类型嵌入结果映射 * collection: 复杂类型的集,嵌入结果映射 * discriminator: 使用结果值来决定使用哪个结果映射 **在使用resultMap的时候,要把ID写在第一行,否则的话,就会报错** # 例子 创建Orders.java这个pojo类 我们创建个OrderMapper.xml ~~~ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="mapper.OrderMapper"> <!-- 配置查询结果的列名和实体类的属性名的对应关系 --> <!-- id是唯一标识,可以随便写. --> <!-- type是查询对应的实体类的类名 --> <resultMap type="pojo.Orders" id="order"> <!-- 非主键,把pojo中和表不一样的写下就行,property是类中的 --> <result column="user_id" property="userId"/> <!-- 主键字段的对应 --> <id property="userId" column="id"></id> </resultMap> <!-- resultMap对应那边上面的id, resultType就没有用了 --> <select id="selectOrdersList" resultMap="order"> select id,user_id,number,createtime,note from orders </select> </mapper> ~~~ 然后创建 ~~~ package mapper; import java.util.List; import pojo.Orders; public interface OrderMapper { // 查询订单表order的所有数据 public List<Orders> selectOrdersList(); } ~~~ # 鉴别器discriminator ~~~ <!-- <discriminator javaType=""></discriminator> 鉴别器:mybatis可以使用discriminator判断某列的值,然后根据某列的值改变封装行为 封装Employee: 如果查出的是女生:就把部门信息查询出来,否则不查询; 如果是男生,把last_name这一列的值赋值给email; --> ~~~ ~~~ <resultMap type="com.jdxia.mybatis.bean.Employee" id="MyEmpDis"> <id column="id" property="id"/> <result column="last_name" property="lastName"/> <result column="email" property="email"/> <result column="gender" property="gender"/> <!-- column:指定判定的列名 javaType:列值对应的java类型 --> <discriminator javaType="string" column="gender"> <!--女生 resultType:指定封装的结果类型;不能缺少。/resultMap--> <case value="0" resultType="com.jdxia.mybatis.bean.Employee"> <association property="dept" select="com.jdxia.mybatis.dao.DepartmentMapper.getDeptById" column="d_id" /> </case> <!--男生 ;如果是男生,把last_name这一列的值赋值给email; --> <case value="1" resultType="com.jdxia.mybatis.bean.Employee"> <id column="id" property="id"/> <result column="last_name" property="lastName"/> <result column="last_name" property="email"/> <result column="gender" property="gender"/> </case> </discriminator> </resultMap> ~~~