一.parameterType和parameterMap的区别
1.parameterType传参时sql语句中对应的#{参数名}要与Mapper接口方法中参数名一致,传实体对象时,要求对象的属性名与与sql语句中#{参数名}一致
2.parameterMap传参时
<parameterMap id="TUserParm" type="com.company.shopping.vo.LoginVo">
<parameter property="name"/>
<parameter property="password"/>
</parameterMap>
<!--给查询列单独取名-->
<sql id="usercolumns">
id, name, password, sex, phone, email, is_admin, IsValid
</sql>
<!--查询语句-->
<select id="selectUserByNameAndPwd" parameterMap="TUserParm" resultMap="TUserMap">
select <include refid="usercolumns"></include>
from t_user
where IsValid=1
and name=?
and password=?
</select>
parameterMap中sql语句中对应的参数名与参数映射parameterMap中property=" " 一致,而property=" " 要与type传的对象中属性名一致
parameterMap匹配SQL语句中的?号, 跟JDBC中的
PreparedStatement类似,注意传递参数对应顺序要一致
二.resultType和resultMap的区别
1.resultType(基本映射)查询结果返回值的列名与实体对象的属性名要一致,比如我列名为 is_admin 那么实体对象中的属性名必须为 is_admin 否则会造成ORM失效 不太灵活
2.resultMap(高级映射)
<resultMap type="com.company.shopping.entity.TUser" id="TUserMap">
<result property="id" column="id" jdbcType="INTEGER"/>
<result property="name" column="name" jdbcType="VARCHAR"/>
<result property="password" column="password" jdbcType="VARCHAR"/>
<result property="sex" column="sex" jdbcType="VARCHAR"/>
<result property="phone" column="phone" jdbcType="VARCHAR"/>
<result property="email" column="email" jdbcType="VARCHAR"/>
<result property="isAdmin" column="is_admin" jdbcType="INTEGER"/>
<result property="isvalid" column="IsValid" jdbcType="INTEGER"/>
</resultMap>
<!--给查询列单独取名-->
<sql id="usercolumns">
id, name, password, sex, phone, email, is_admin, IsValid
</sql>
<select id="selectUserByNameAndPwd" parameterType="com.company.shopping.vo.LoginVo" resultMap="TUserMap">
select <include refid="usercolumns"></include>
from t_user
where IsValid=1
and name=#{name}
and password=#{password}
</select>
可以自定义属性名,不需要与返回值列名一致
而且resultMap中可以定义association,collection做嵌套结果:联表查询.满足MyBatis的关联映射。resultMap使用是比较灵活的。
鸡汤:要看这世界如何,看那类人掌握了世界,要看自己如何,看那种情绪主导左右