21、动态SQL之内置参数_parameter的使用
2018-01-23 23:52
429 查看
_parameter表示传入SQL中整体参数。下面以查询为例
示例一:
假设用name查PERSON表,定义对应的DAO接口为:
DAO接口对应的mapper文件为:
示例二:
本示例DAO接口中传入一个person对象,如果person对象不为空,则用name查PERSON表。首先定义DAO接口:
DAO接口对应的mapper文件不变:
综合上面两个示例,
_parameter:代表DAO接口传入的整个参数
如果DAO接口就传入了单个参数:_parameter就是这个参数;
如果DAO接口就传入了多个参数:参数会被封装为一个map,_parameter就是代表这个map
上述错误表示
示例一:
假设用name查PERSON表,定义对应的DAO接口为:
package com.lzj.mybatis.dao; import java.util.List; import com.lzj.mybaits.bean.Person; public interface PersonDao { public List<Person> getPersons(String username); }
DAO接口对应的mapper文件为:
<mapper namespace="com.lzj.mybatis.dao.PersonDao"> <select id="getPersons" resultType="com.lzj.mybaits.bean.Person"> select * from PERSON <!--此时_parameter内置参数中的值为接口中传入的username的值--> <if test="_parameter != null"> where name=#{name} </if> </select> </mapper>
示例二:
本示例DAO接口中传入一个person对象,如果person对象不为空,则用name查PERSON表。首先定义DAO接口:
package com.lzj.mybatis.dao; import java.util.List; import com.lzj.mybaits.bean.Person; public interface PersonDao { public List<Person> getPersons(Person person); }
DAO接口对应的mapper文件不变:
<mapper namespace="com.lzj.mybatis.dao.PersonDao"> <select id="getPersons" resultType="com.lzj.mybaits.bean.Person"> select * from PERSON <!--此时_parameter内置参数中的值为接口中传入的person对象中的id、name、age的整体值,也就是说,不管接口中传入的多少数据,都整体的放在了_parameter内置参数中--> <if test="_parameter != null"> where name=#{name} </if> </select> </mapper>
综合上面两个示例,
_parameter:代表DAO接口传入的整个参数
如果DAO接口就传入了单个参数:_parameter就是这个参数;
如果DAO接口就传入了多个参数:参数会被封装为一个map,_parameter就是代表这个map
注意:
在mapper文件中定义sql语句时,有些sql语句需要返回值,例如 等标签语句,返回值的类型一般定义在resultType或resultMap中,如果返回类型为自定义的对象类型,像本例中的Person类,那么这个类中一定不要定义有参的构造器,需要定义get和set方法。因为mybatis在处理完sql后,把返回的数据是通过set方法放到Person对应的对象中的,而不是通过有参构造器。如果定义了有参构造器,则会包如下错误:## Cause: org.apache.ibatis.reflection.ReflectionException: Error instantiating class com.lzj.mybaits.bean.Person with invalid types () or values (). Cause: java.lang.NoSuchMethodException: com.lzj.mybaits.bean.Person.<init>() at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:23) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:104) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:95) at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:124) at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:90) at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:40) at com.sun.proxy.$Proxy0.getPersons(Unknown Source) at com.lzj.mybatis.example.MybaitsTest.testGetPersons(MybaitsTest.java:43) at com.lzj.mybatis.example.MybaitsTest.main(MybaitsTest.java:19)
上述错误表示
com.lzj.mybaits.bean.Person.<init>()初始化方法异常
相关文章推荐
- Mybatis-动态SQL-内置参数_databaseId和_parameter
- 执行动态 sql 并为 输出参数赋值、sp_executesql 使用方法
- spring NamedParameterJdbcTemplate 和 SqlParameterSource 参数绑定使用
- MyBatis动态SQL使用,传入参数Map中的Key判断
- SQLBindParameter 函数的参数解析及使用方法
- 向SqlParameter内动态添加参数
- 使用 SqlHelperParameterCache 类管理参数
- 两种使用nuzt接收动态参数编写SQL语句进行分页查询
- MySQL中limit使用动态参数的解决方法(拼接SQL字符串语句来执行SQL)
- MyBatis动态SQL中trim标签的使用参数
- MyBatis学习——内置参数的使用:_parameter、_datebaseId
- SQL:如何在LIKE语句中使用参数,以及动态执行SQL语句
- 多条件查询--使用dapper命令参数动态拼接出最安全的sql语句
- MyBatis中的动态SQL,实现不确定条件的CRUD-----使用Map来传递查询的参数
- 动态sql语句基本语法(字段名,表名,数据库名之类作为变量时,必须用动态SQL如ALTER TABLE中使用程序传递的参数)
- MyBatis动态SQL使用,传入参数Map中的Key判断
- 向SqlParameter内动态添加参数
- 执行动态 sql 并为 输出参数赋值、sp_executesql 使用方法
- MyBatis动态SQL使用,传入参数Map中的Key判断
- 执行动态 sql 并为 输出参数赋值、sp_executesql 使用方法