MyBaits中调用sql语句,往里传参数的过程是:如果是基本类型,直接让sql中的变量去接收传进来的变量值;如果是引用的话,先new 一个入参类型的对象 obj,然后将传进来的参数对象交给这个obj,然后通过sql中的变量名反射得到相应的get方法对象,然后通过get方法对象获取值。
这是基本类型:
<select id="queryUserById" parameterType="int" resultType="com.dimples.dto.User">
select * from user where id = #{id}
</select>
User user = sqlsession.selectOne("test.queryUserById", 1);
这是引用类型:
<select id="queryUserByName" parameterType="java.lang.String" resultType="com.dimples.dto.User">
select * from user where name like '%${_parameter}%'
</select>
List<User> users = sqlsession.selectList("test.queryUserByName", "tom");
在这里如果我sql中的参数写成%${value}%,也是可以的,因为String中有getValue方法。如果瞎写如aaa,则会报错:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'aaa' in 'class java.lang.String'
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)