通过参数传递表名
在文章返回类型中,我们举例通过传入表名或者总行数
1 | <select id="selectCountFromTable" parameterType="java.lang.String" resultType="java.lang.Integer"> |
期间遇到了两个小问题
字符串的传递的两种方法
第一版SQL语句我使用了
1 | //第一版错误语句 |
发现SQL语句执行失败,因为执行的是
1 | SELECT count(*) FROM "tableName" |
在拼接SQL的时候 参数name被作为字符串填入了自动加了双引号 所以语句发生错误,造成SQL执行失败,解决方案是使用dollar符号
1 | //第二版错误语句 |
传递方法 | 效果 |
---|---|
#{name} | 会自动加上双引号,进行变量绑定,且可以使用jdbcType=?设定类型 |
${name} | 将某个变量直接作为SQL语句的一部分进行拼接,慎用!!容易引起SQL注入 |
异常There is no getter
在使用了第二版错误语句时,执行SQL会丢出一个异常
1 | org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'param1' in 'class java.lang.String' |
说param1没有getter方法,根据在文章多参数自定义插件中提到了多参数传递的可能性
使用param1代表参数一,以此类推,比如param1.id 就是对param1中的id变量使用Getter方法
MyBatis代参数在默认情况下是根据Getter方法取值的,所以为了避开使用Getter参数取值,使用@Param注解给定一个参数名即可
1 | //DOMapper.java中 |