引出问题:在一些需要参数的SQL语句中,如何在MyBatis中实现?
解决方案
- 传一个参数
使用MySQL中的concat函数 进行字符串拼接
例 columnName LIKE CONCAT (’%’,‘xxxx’,’%’)
在MyBatis的映射文件中创建select标签 使用#{}的方式使用参数
贴代码
/*
resultType是返回类型 使用typeAliases 设置别名 可以写别名 parameterType是参数类型 可以省略
*/
<select id="getUserListByUserName" parameterType="String" resultType="User">
SELECT * FROM smbms_user WHERE userName LIKE CONCAT ('%',#{userName},'%')
</select>
- 传多个参数
传入Map集合
传入JavaBean实体
使用方式:通过#{属性名}或者#{map的keyName}即可获取传入值
贴代码
/*接口代码*/
public List<User> getUserList(User user);
/*对应映射Mapper*/
<select id="getUserList" resultType="User">
SELECT * FROM smbms_user WHERE userName LIKE CONCAT ('%',#{userName},'%')
and userRole=#{userRole}
</select>
Map也是同理 传入一个Map<K,V>的泛型集合
然后使用map.put插入数据 然后对应的映射xml文件中使用#{Key}获取传入参数
- 注解入参
使用Java注解的方式,直接入参
使用方式:在接口的形参前使用@Param注解 在映射文件的SQL中直接使用#{注解名称}获取传入参数
贴代码/*接口代码*/ public int updatePwd(@Param("id")Integer id,@Param("userPassword")String userPassword);
/*对应映射Mapper*/ /*由于这个不是查询语句 所以没有resultType属性 参数类型属性省略*/ <update id="updatePwd" > update smbms_user set userPassword=#{userPassword} where id = #{id} </update>
总结:以上文章仅用于学习总结,各位大佬勿喷,如果对您有一些启发,那本人荣幸之极!