java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Mybatis输入输出映射

Mybatis输入输出映射问题解读(共三种类型)

作者:绣花针

MyBatis使用OGNL表达式解析对象字段值,使用#{}或${},#{}为占位符,${}用于SQL拼接,输出resultMap时,若列名与POJO属性名名不一致,需配置resultMap,使用<collection>标签进行嵌套查询,需指定collection的属性名,参数传递格式:column=参数名=表字段

一、输入parameterType输出resultType类型

(resultType:列名和pojo中的属性名要一致)

Mybatis使用ognl表达式解析对象字段的值,#{}或者${}括号中的值为pojo属性名称,

其中,#{}:占位符号,相对于?,${}:sql拼接符号,相对于String

select * from user where name = #{name};   会被动态解析为    select * from user where name = ?; 
select * from user where name = ${name}; 当我们传递参数"mark"时,会被解析 select * from user where name = "mark"; 
<!-- 1、resultType:如果要返回数据集合,只需设定为每一个元素的数据类型
		 2、 包装的pojo取值通过 "."来获取
	-->
	<select id="getUserByQueryVo" parameterType="queryvo" resultType="com.mark.pojo.User">
		<!-- SELECT * FROM USER WHERE username LIKE #{name} -->
		SELECT * FROM USER WHERE username LIKE '%${user.username}%'
	</select>

二、输出resultMap(列名和pojo中的属性名不一致)

resultMap包含元素

<!--column不做限制,可以为任意表的字段,而property须为type 定义的pojo属性-->
<resultMap id="唯一的标识" type="映射的pojo对象">
  <id column="表的主键字段,或者可以为查询语句中的别名字段" jdbcType="字段类型" property="映射pojo对象的主键属性" />
  <result column="表的一个字段(可以为任意表的一个字段)" jdbcType="字段类型" property="映射到pojo对象的一个属性(须为type定义的pojo对象中的一个属性)"/>
 <!-- 一对一关联-->
 <association property="pojo的一个对象属性" javaType="pojo关联的pojo对象">
    <id column="关联pojo对象对应表的主键字段" jdbcType="字段类型" property="关联pojo对象的主席属性"/>
    <result  column="任意表的字段" jdbcType="字段类型" property="关联pojo对象的属性"/>
  </association>
  <!-- 一对多关联-->
  <!-- 集合中的property须为ofType定义的pojo对象的属性-->
  <collection property="pojo的集合属性" ofType="集合中的pojo对象">
    <id column="集合中pojo对象对应的表的主键字段" jdbcType="字段类型" property="集合中pojo对象的主键属性" />
    <result column="可以为任意表的字段" jdbcType="字段类型" property="集合中的pojo对象的属性" />  
  </collection>
</resultMap>

如果collection标签是使用嵌套查询,<collection>标签中的column:要传递给select查询语句的参数,如果传递多个参数,格式为column=  {参数名1=表字段1,参数名2=表字段2} ;

格式如下:

<collection column="传递给嵌套查询语句的字段参数" property="pojo对象中集合属性" ofType="集合属性中的pojo对象" select="嵌套的查询语句" > 
 </collection>

userMapper实例

<mapper namespace="com.mark.mapper.userMapper">
    <!-- 
    定义resultMap
    type:resultMap最终映射的java对象类型,可以使用别名
    id:对resultMap的唯一标识
     -->
    <resultMap type="User" id="userResultMap">
        <!-- 
        column:查询出来的列名
        property:type指定的pojo类型中的属性名
        最终resultMap对column和property作一个映射关系(对应关系)
         -->
        <!-- 主键用id -->
        <id column="id" property="id"/>
        <!-- 普通字段用result -->
        <!-- 单表查询可以不写全,关联查询必须写全所有字段 -->
        <result column="user_name" property="username"/>
    </resultMap>
        <!-- 这里的resultMap要和<resultMap type="User" id="userResultMap">id一致 -->
        <select id="findUserByResultMap" parameterType="com.mark.po.UserQueryVo" resultMap="userResultMap">
        SELECT id, user_name FROM USER WHERE user.username=#{userCustom.username} 
    </select>
</mapper>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文