“#{}” 在MyBatis中代表一种占位符,它可以接受输入的参数,在大括号中编写参数名称来接受对应的参数。它接受的类型可以是:基本数据类型、包装数据类型、普通的JavaBean类型或者HashMap类型。
(1)MyBatis会自动把传入的参数封装成一个map,默认通过“param1、param2··· ···”或者索引(0、1、2…)的方式获取对象属性值,其中 “param1” 和 “0” 的意义是一样的,都表示输入Map的第一个参数:
UserMapper.java接口中定义的方法如下:
User selUserById(Integer minId, Integer maxId);
UserMapper.xml中:
(2)但是也可以是某个特定的key值来引用value,这就需要用@Param()注解了:
UserMapper.java接口中定义的方法如下:
User selUserById(@Param("minId")Integer minId, @Param("maxId")Integer maxId);
UserMapper.xml文件中:
(3)也可以把传入的参数包装成一个map:
UserMapper.java接口中定义的方法:
User selUserById(Map map);
调用时的方法:
Map map = new HashMap();
map.put("minId',5);
map.put("maxId",12");
User selUserById(map);
UserMapper.xml文件中:
INSERT INTO User(id,name,age,password) VALUES(#{id},#{name},#{age},#{password})
“$ { }” 符号,表示拼接SQL语句串,即把接收的参数内容不加任何修饰地拼接在SQL中,不使用“?”占位符(直接拼接,不需要占位)。"${}" 接受的参数类型可以是简单类型,普通JavaBean或者HashMap。
但是要注意的是,使用 “$ { }” 拼接符号拼接SQL语句,会引起SQL注入,所以一般不建议使用 “$ { }”。
INSERT INTO User(id,name,age,password) VALUES(${id},${name},${age},${password})
接受HashMap类型略。。。