一、parameterType(输入参数类型)
- 当传入的参数类是 String 时,也可以使用 ${} 来接收参数
SELECT * FROM monster WHERE id=#{id} OR name=#{name}
- 当使用模糊查询的时,需要 ${value} 来取值(容易出错的地方)
- like ‘value%’ :将搜索以字母value开头的所有字符串,like ‘%value’ 将搜索以字母value 结尾的所有字符串,like ‘%value%’ 将搜索在任何位置包含字母 value 的所有字符串。
SELECT * FROM monster WHERE name LIKE '%${value}%'
二、使用Map作为参数类型
1、使用Map作为输入参数类型
映射的类型Map,对应别名map。
<selsect id="xx" parameterType="map">
2、使用Map作为输出结果参数类型
List<Map<String,Object>> 作为resultType,resultType=“map”。这儿的返回结果类型是按照List<>中的类型来确定的,而不是List。
获取Map的结果时,依然有三种方法:
- 直接输出map,得到key=value的输出;
System.out.println(monsterMap);
- 先获取entry,再输出entry.getKey()=entry.getValue();
for(Map.Entry entry:monsterMap.entrySet()){
System.out.println(entry.getKey()+"==>"+entry.getValue());
}
- 获取keySet,再获得map.get(key)。
Set<String> keySet = monsterMap.keySet();
for (String key:keySet){
System.out.println(key+"=>"+monsterMap.get(key));
}
三、resultMap
用于DB属性名,与JavaBean属性名不一致的,建立对应的映射使用。
- 情景1:insert语句,在DB中插入一个User,但两边名称不一致。因为是插入,没有返回值,不需使用resultMap
insert into USER(user_name,user_email) value(#{userName},#{userEmail})
其中,User()括号里面的属性名是按DB的,value()括号中的属性名是按JavaBean的,以此区分。
- 情景2:select语句,返回一个JavaBean,类属性和表字段名称不一致。
解决方法1:resultMap
<resultMap type="User" id="findAllUserMap">
<result column="user_name" property="username"/>
<result column="user_email" property="useremail"/>
</resultMap>
下面resultMap指向了要使用哪个resultMap的id
<select id="findAllUser" resultMap="findAllUserMap" >
SELECT * FROM user
</select>
解决方法2:使用表别名。不推荐:复用性差。
SELECT user_name as username,user_email as useremail FROM user