输入参数:parameterType
#{}与${}的区别
1.类型为 简单类型(8个基本类型+String)
#{任意标识符}
${value} ,其中的标识符只能是value
#{}会自动给String类型加上' '(自动类型转换)
${}原样输出 但是适用于动态排序(动态字段)
拼接sql时,可以使用${}动态指定以什么排序(id or name)
select * from person order by ${parameter} desc
获取对象值时:
模糊查询:方式一(#{}) 查询格式(like '%name%')
select * from person where name like #{name} 传入的值要处理为“%name%“
方式二(${})
select * from person where name like '%${name}%' 传入的值原样即可
2.类型为对象时
#{对象名}
${对象名}
支持级联属性 #{address.homeaddress}
3.类型为HashMap:用map中key的值 匹配 占位符#{name} 如果匹配成功 就用 map的value替换占位符
#{key}
输出参数resultType
1.简单类型(8个基本类型+String)指定简单类型即可
2.输出参数为实体对象类型;指定为实体类即可
3.当输出的时数组时,resultType也是指定类即可
4.输出为HashMap时:一个HashMap对应一个实体类的多个元素;当用一个map接收多个实体类属性时 会报错,但可以使用map数组
<select id="HashMap" resultType="HashMap" parameterType="int">
SELECT name "name",age "age" FROM person WHERE id = #{value}
</select>
<select id="HashMap" resultType="HashMap" parameterType="int">
SELECT name "name",age "age" FROM person WHERE id > #{value}
</select>
5.当属性名与字段名不一致时,除了使用resultMap以外,还可以使用resultType+HashMap
别名为属性名(带引号)
<select id="map" resultType="Person2" parameterType="int">
SELECT name "name", age "age", sex "sex" FROM person WHERE id = #{sdaf}
</select>
若有一个属性的值始终为默认值,则可能是表的字段或类的属性写错
resultType:实体类的属性,数据表的字段一致时,直接用resultType指定类即可
resultMap:实体类的属性,数据表的字段不一致:类型(类型转换器)或名字不同时使用
<resultMap id="person2Map" type="entity.Person2">
<!--分为主键id和非主键result-->
<id property="id" column="id"></id>
<result property="name" column="name"></result>
<result property="age" column="age"></result>
<result property="sex" column="sex" javaType="Boolean" jdbcType="INTEGER"></result>
</resultMap>
使用别名
<!--当属性名与字段不一致-->
<select id="map" resultType="Person2" parameterType="int">
SELECT name "name", age "age", sex "sex" FROM person WHERE id = #{sdaf}
</select>