mybatis中resultMap,resultType,parameterType ,parameterMap

resultMap,resultType 封装结果集

resultMap 推荐

表示将查询结果集中的列一一映射到bean对象的各个属性。映射的查询结果集中的列标签可以根据需要灵活变化,并且,在映射关系中,还可以通过typeHandler设置实现查询结果值的类型转换,比如布尔型与0/1的类型转换。 CLOb的转换等

<resultMap type="hdu.terence.bean.Message" id="MessageResult"> 

    <!--存放Dao值--><!--type是和数据库对应的bean类名Message-->

    <id column="id"jdbcType="INTEGER"property="id"/><!--主键标签-->

    <result column="COMMAND"jdbcType="VARCHAR"property="command"/>

    <result column="DESCRIPTION"jdbcType="VARCHAR"property="description"/>

    <result column="CONTENT"jdbcType="VARCHAR"property="content"/>

  </resultMap>

  <select id="queryMessageList" parameterType="hdu.terence.bean.Message" resultMap="MessageResult">

    SELECT ID,COMMAND,DESCRIPTION,CONTENT FROM message WHERE 1=1      

    <if test="command!=null and!&quot;&quot;.equals(command.trim())">

    and COMMAND=#{command}

    </if>

    <if test="description!=null and!&quot;&quot;.equals(description.trim())">

    and DESCRIPTION like '%' #{description} '%'

    </if> 

  </select>

resultType 

表示的是bean中的对象类,此时可以省略掉resultMap标签的映射,但是必须保证查询结果集中的属性 和 bean对象类中的属性是一一对应的,此时大小写不敏感,但是有限制。

<select id="queryMessageList" parameterType="hdu.terence.bean.Message"   resultType=" hdu.terence.bean.Message">

    SELECTID,COMMAND,DESCRIPTION,CONTENT FROM message WHERE 1=1      

    <if test="command!=null and!&quot;&quot;.equals(command.trim())">

    and COMMAND= #{command}

    </if>

    <if test="description!=null and!&quot;&quot;.equals(description.trim())">

    and DESCRIPTION like '%' #{description} '%'

    </if> 

  </select>

ParameterMap(不推荐) & parameterType

ParameterMap和resultMap类似,表示将查询结果集中列值的类型一一映射到java对象属性的类型上,在开发过程中不推荐这种方式。

 一般使用parameterType直接将查询结果列值类型自动对应到java对象属性类型上,不再配置映射关系一一对应,

例如上述代码中下划线部分表示将查询结果类型自动对应到hdu.terence.bean.Message的Bean对象属性类型。

1.当parameterType="hdu.terence.bean.Message"时

<!-- 修改通过行号和列号 -->

<update id="updateGJB" parameterType="com.ly.business.entity.highbasetable.details.GjbVO">

update ${bm} set ${lh} = ${xgz} where L0=${hh}

</update>

void updateGJB(GjbVO gjbVO);

对应的dao传入的参数是 bean对象

2.当parameterType="java.lang.String"时

对应传入的参数是map 或者string

<!-- 查询数据 -->

<select id="findAll" resultType="java.util.HashMap" parameterType="java.lang.String">

SELECT * FROM ${tablename} ORDER BY TO_NUMBER(L0)

</select>

<!-- 查询高基表对比数据 暂时先写年份和对应的表名 后面需要从数据库中动态查询出来当前可以对比的年份以及数据表 -->

<select id="findCompareData" resultType="java.util.HashMap" parameterType="java.lang.String">

SELECT NF ,${lh} AS SJ FROM (

SELECT '2018'AS NF,T.* FROM GJ411_2018_J T UNION ALL

SELECT '2017' AS NF ,T.* FROM GJ411_2017_X T

)

WHERE L0=${hh}

</select>

List<HashMap<String, String>> findAll(@Param("tablename") String tablename);

List<HashMap<String, String>> findCompareData(Map<String, String> params);

ParameterMap 在调用存储过程时会用到

1.输入输出参数

<select id="checkingProcess" parameterMap="checkingParaMap" statementType="CALLABLE">

CALL P_CHECKING(?,?,?,?,?)

</select>

<parameterMap type="java.util.Map" id="checkingParaMap">

<parameter property="P_HYPC" mode="IN" jdbcType="VARCHAR"/>

<parameter property="P_DDBH" mode="IN" jdbcType="VARCHAR"/>

<parameter property="P_SJYBH" mode="IN" jdbcType="VARCHAR"/>

<parameter property="P_GZBH" mode="IN" jdbcType="VARCHAR"/>

<parameter property="R_SUCCESS" mode="OUT" jdbcType="VARCHAR"/>

</parameterMap>

猜你喜欢

转载自blog.csdn.net/nqmysbd/article/details/86614969