该参数是select、insert等其他的标签中的参数,用于数据的录入使用,该参数只表示一个参数类型,但是如果有多个参数的话,就不要使用该参数了,在讲解该参数之前,我们一定要先有这样的一种意识,如果让我们设计,那么应该怎么设计参数和sql占位符的匹配,这里其实就是按照两种方式类型和名称。
一、一个参数
对于这种一个参数的这种其实没有必要写parameterType,而且还有就是多个参数的时候也没有必要写parameterType,也就是说,其实该参数的存在是不是特别必要的。其中@Param和parameterType 二者存其一即可。看名字就能知道ParameterType是按照类型进行匹配,而@Param是按照名字进行匹配,因此可以联想下,多个参数的时候按名字匹配即可,对于按照类型就不能匹配了。如下是该参数标识的类型对应的别名
别名 | 映射的类型 |
---|---|
_byte | byte |
_long | long |
_short | short |
_int | int |
_integer | int |
_double | double |
_float | float |
_boolean | boolean |
string | String |
byte | Byte |
long | Long |
short | Short |
int | Integer |
integer | Integer |
double | Double |
float | Float |
boolean | Boolean |
date | Date |
decimal | BigDecimal |
bigdecimal | BigDecimal |
object | Object |
map | Map |
hashmap | HashMap |
list | List |
arraylist | ArrayList |
collection | Collection |
iterator | Iterator |
1.基本类型
1.只含parameterType
则只按照类型匹配,而不会考虑名字的匹配
SOACoupon parameterTypeOneParam(Integer id);
<select id="parameterTypeOneParam" parameterType="int" resultType="org.mallcai.common.model.SOACoupon">
select * from tbl_coupon where id = #{3333333}
</select>
2.只含有@Param
这种就会只按照名字匹配,而不是按照类型匹配了,如果名字不同,则会异常
SOACoupon parameterTypeOneParam(@Param("idd") Integer id);
<select id="parameterTypeOneParam" resultType="org.mallcai.common.model.SOACoupon">
select * from tbl_coupon where id = #{idd}
</select>
3.都不包含
都不包含,则默认按照类型匹配,主要是占位符那里有个占位符,入参有一个参数,匹配一下即可
SOACoupon parameterTypeOneParam(Integer id);
<select id="parameterTypeOneParam" resultType="org.mallcai.common.model.SOACoupon">
select * from tbl_coupon where id = #{idddd}
</select>
4.都包含
都包含,则按照名字匹配,这个时候其实parameterType已经没有什么作用了
SOACoupon parameterTypeOneParam(@Param("id") Integer id);
<select id="parameterTypeOneParam" parameterType="int" resultType="org.mallcai.common.model.SOACoupon">
select * from tbl_coupon where id = #{id}
</select>
2.集合类型
对于集合类型的话,这里也是要考虑@Param和parameterType 这两个的区别的
1.只含parameterType
只包含parameterType,则当前就是表示只用这个的类型,则在xml中进行循环的时候,要按照类型来识别了
SOACoupon parameterTypeOne1(List<Integer> ids);
如下collection中必须用list才行,因为这里已经是按照类型来进行识别了
<select id="parameterTypeOne1" parameterType="list" resultType="org.mallcai.common.model.SOACoupon">
select * from tbl_coupon where id in
<foreach collection="list" separator="," open="(" close=")" item="item">
#{item}
</foreach>
limit 1
</select>
2.只含@Param
则表示当前是要用名字来进行识别,则就没有必要写parameterType了,也就是两者都存在的时候,其中一个parameterType是会失效的
SOACoupon parameterTypeOne1(@Param("idList") List<Integer> ids);
<select id="parameterTypeOne1" resultType="org.mallcai.common.model.SOACoupon">
select * from tbl_coupon where id in
<foreach collection="idList" separator="," open="(" close=")" item="item">
#{item}
</foreach>
limit 1
</select>
3.都不包含
则上报错误,主要是由于collection中是要写名字,因此必须至少有个名字或者类型才行
4.都包含
都包含,则采用名字进行匹配,类型的话是有问题的
SOACoupon parameterTypeOne1(@Param("ids") List<Integer> ids);
<select id="parameterTypeOne1" parameterType="list" resultType="org.mallcai.common.model.SOACoupon">
select * from tbl_coupon where id in
<foreach collection="ids" separator="," open="(" close=")" item="item">
#{item}
</foreach>
limit 1
</select>
3.Map类型
1.只含parameterType
这种其实就是按照类型匹配,这个时候,对应的占位符采用的是只有key
SOACoupon parameterTypeOne2(Map<String, Object> parasms);
<select id="parameterTypeOne2" parameterType="map" resultType="org.mallcai.common.model.SOACoupon">
select * from tbl_coupon where id=#{key} and status=#{status} limit 1;
</select>
2.只含@Param
如果是注解,则是按照名字匹配,那么怎么匹配呢,这样就是需要xml中这么写了
SOACoupon parameterTypeOne2(@Param("map") Map<String, Object> parasms);
<select id="parameterTypeOne2" resultType="org.mallcai.common.model.SOACoupon">
select * from tbl_coupon where id=#{map.key} and status=#{map.status} limit 1;
</select>
3.都不包含
对于这种都不包含的,则上报异常
<select id="parameterTypeOne2" resultType="org.mallcai.common.model.SOACoupon">
select * from tbl_coupon where id=#{key} and status=#{status} limit 1;
</select>
4.都包含
都包含,则按照名字进行匹配,也就是说,一旦出现名字,则就只能按照名字进行匹配
SOACoupon parameterTypeOne2(@Param("maps") Map<String, Object> parasms);
<select id="parameterTypeOne2" parameterType="map" resultType="org.mallcai.common.model.SOACoupon">
select * from tbl_coupon where id=#{maps.key} and status=#{maps.status} limit 1;
</select>
4.实体类型
1.只含parameterType
只包含parameterType,则跟上面map是一样的,就是按照key进行匹配
SOACoupon parameterTypeOne3(SOACoupon coupon);
<select id="parameterTypeOne3" parameterType="SOACoupon" resultType="org.mallcai.common.model.SOACoupon">
select * from tbl_coupon where id=#{id};
</select>
2.只含@Param
只包含@Param,则跟上面的map是一样的,也是要通过名字进行访问才行
SOACoupon parameterTypeOne3(@Param("coup")SOACoupon coupon);
<select id="parameterTypeOne3" resultType="org.mallcai.common.model.SOACoupon">
select * from tbl_coupon where id=#{coup.id};
</select>
3.都不包含
都不包含,则采用类型进行识别
SOACoupon parameterTypeOne3(SOACoupon coupon);
<select id="parameterTypeOne3" resultType="org.mallcai.common.model.SOACoupon">
select * from tbl_coupon where id=#{coup.id};
</select>
4.都包含
都包含,则默认按照名字进行匹配
SOACoupon parameterTypeOne3(@Param("coup") SOACoupon coupon);
<select id="parameterTypeOne3" parameterType="SOACoupon" resultType="org.mallcai.common.model.SOACoupon">
select * from tbl_coupon where id=#{coup.id};
</select>
二、多个参数
对于多参数的,则就无法直接通过参数类型来识别了,而是必须要通过@Param来进行识别
SOACoupon parameterTypeMulti1(@Param("id")Integer id, @Param("couponName")String couponName);
<select id="parameterTypeMulti1" resultType="org.mallcai.common.model.SOACoupon">
select * from tbl_coupon where id=#{id} and coupon_name = #{couponName}
</select>
参考:
https://blog.csdn.net/lixld/article/details/77980443
https://blog.csdn.net/lixld/article/details/77980443
https://www.javazhiyin.com/38393.html
https://www.javazhiyin.com/38393.html
官网:
http://www.mybatis.org/mybatis-3/zh/configuration.html
http://www.mybatis.org/mybatis-3/zh/configuration.html
网友评论