mybatis3.2.6+spring4.0.2 关于传入基本参数类型 以及多个基本类型参数的问题
最近再练习框架,找到了一点心得分享出来,不对之处欢迎提出共勉
1 参数类型string 一个参数
方法:
User getUserByName(String username);
mapper写法:
<select id="getUserByName" parameterType="String" resultMap="user">
select * from d_user where user_name =#{1234567890}(或者#{_parameter})
</select>
2 参数类型string 两个参数
方法:
User getUserByNameAndPwd(String username, String password);
mapper写法:
<select id="getUserByNameAndPwd" parameterType="String" resultMap="user">
select * from d_user where user_name =#{param1} and user_password=#{param2}
</select>
或者方法:
User getUserByNameAndPwd(@param("username")String username, @param("password")String password);
mapper:(这里面的parameterType其实是可以不用写的, 因为 mapper文件中 已经添加了@param注解)
<select id="getUserByNameAndPwd" parameterType="String" resultMap="user">
select * from d_user where user_name =#{username} and user_password=#{password}
</select>
3 参数是一个对象
方法:
User getUserByNameAndPwd(User user);
<select id="getUserByNameAndPwd" parameterType="con.model.User" resultMap="user">
select * from d_user where user_name =#{username} and user_password=#{password}
</select>
或者
User getUserByNameAndPwd(@Param("user")User user);
<select id="getUserByNameAndPwd" resultMap="user">
select * from d_user where user_name =#{user.username} and user_password=#{user.password}
</select>
大家应该看得出来,
@param 和 parameterType 是有关系的, 这两个有其中一个就可以了, 建议不写@Param 注解, 如果多重类型的参数
,我们放到一个map里面即可,
比如
service中
map.put("user",user); //对象
map.put("password",password)//基本类型
Mapper:
User getUserByNameAndPwd(Map map);
<select id="getUserByNameAndPwd" parameterType="map" resultMap="user">
select * from d_user where user_name =#{user.username} and user_password=#{password}
</select>
总结:
针对一个基本类型参数,mybatis可以准确的获取这个参数的数值,不论你在mapper中用#{XXX}怎么获取都可以,
针对多个基本参数类型,mybatis需要给他提供一个标识,你可以在方法上添加@param注解 ,当然是,mybatis的包
org.apache.ibatis.annotations.Param ,
你也可以按照参数顺序,写param1,param2之类的,推荐第一种 ,比较严谨一点
其实我们可以把参数封装进user对象中,传入实体即可,不过为了测试mybatis对于基本类型参数,所以拆开来测试下。