Mybatis中@Param的用法和作用详解
用注解来简化xml配置的时候,@param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中
我们先来看mapper接口中的@select方法
package mapper; public interface mapper { @select("select s_id id,s_name name,class_id classid from student where s_name= #{aaaa} and class_id = #{bbbb}") public student select(@param("aaaa") string name,@param("bbbb")int class_id); @delete...... @insert...... }
这里解释一下
1.@select(....)注解的作用就是告诉mybatis框架,执行括号内的sql语句
2.s_id id,s_name name,class_id classid
格式是 字段名+属性名,例如s_id是数据库中的字段名,id是类中的属性名
这段代码的作用就是实现数据库字段名和实体类属性的一一映射,不然数据库不知道如何匹配
3.where s_name= #{aaaa} and class_id = #{bbbb}
表示sql语句要接受2个参数,一个参数名是aaaa,一个参数名是bbbb,如果要正确的传入参数,那么就要给参数命名,因为不用xml配置文件,那么我们就要用别的方式来给参数命名,这个方式就是@param注解
4.在方法参数的前面写上@param("参数名"),表示给参数命名,名称就是括号中的内容
public student select(@param("aaaa") string name,@param("bbbb")int class_id);
给入参 string name 命名为aaaa,然后sql语句....where s_name= #{aaaa} 中就可以根据aaaa得到参数值了
ps:下面看下spring中@param和mybatis中@param使用区别
1.spring中@param
/** * 查询指定用户和企业关联有没有配置角色 * @param businessid memberid * @return */ int selectrolecount(@param("businessid") integer businessid,@param("memberid") long memberid);
2.mybatis中的param
/** * 查询指定用户和企业关联有没有配置角色 * @param businessid memberid * @return */ int selectrolecount(@param("businessid") integer businessid,@param("memberid") long memberid);
从表面上看,两种并没有区别,但是在xml文件中使用的时候是有区别的,spring中的@param在xml需要如下这样引用变量
<select id="selectrolecount" resulttype="java.lang.integer" > select count(tbm.id) from t_business_member_relation tbm where tbm.business_id = #{0,jdbctype=integer} and tbm.member_id = #{1,jdbctype=integer} and tbm.role_business_id is not null </select>
是根据参数的顺序来取值的,并且从0开始。而在mybatis @param在xml中则是如下这样引用变量的
<select id="selectrolecount" resulttype="java.lang.integer" > select count(tbm.id) from t_business_member_relation tbm where tbm.business_id = #{businessid,jdbctype=integer} and tbm.member_id = #{memberid,jdbctype=integer} and tbm.role_business_id is not null </select>
是通过参数名来引用的
注:如果mapper.java文件中引用的是spring的
org.springframework.data.repository.query.param;
但是mapper.xml中使用的是mybatis 的用法,那么就会如下的错误
org.mybatis.spring.mybatissystemexception: nested exception is org.apache.ibatis.binding.bindingexception: parameter 'businessid' not found. available parameters are [1, 0, param1, param2]
截图如下
所以在使用的时候一定要注意@param引用和使用的一致性
总结
以上所述是小编给大家介绍的mybatis中@param的用法和作用,希望对大家有所帮助
推荐阅读
-
Mybatis中@Param的用法和作用详解
-
Python中index()和seek()的用法(详解)
-
java中栈和队列的实现和API的用法(详解)
-
Mybatis 中 Oracle 的拼接模糊查询及用法详解
-
详解PHP中cookie和session的区别及cookie和session用法小结
-
PHP中magic_quotes_gpc跟magic_quotes_runtime的区别、作用和用法
-
PHP中__get()和__set()的用法实例详解
-
Mybatis的mapper文件中$和#的用法及区别详解
-
JavaScript中的普通函数和箭头函数的区别和用法详解
-
vue中keepAlive组件的作用和使用方法详解