一、输入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>