在mybatis的 mapper.xml中,首先说下使用场景:
#{ } :#代表占位符,用来传递参数;
${ } :$用来拼接sql 语句的;譬如:把数据库中的表名作为参数拼接在 sql 语句中,必须使用 $
mapper接口;
//@Param 注解的作用如下
//mapper接口中 ,给String tableName参数 起个名字叫tableName1
// 这样mapper.xml 中 #{tableName1} 和${tableName1}可以拿到参数 tableName 的值
public List<User> findUserByTableName(@Param("tableName1") String tableName);
mapper.xml 配置文件中添加 sql 语句;
<select id="findUserByTableName" resultType="User">
<!--SELECT * from #{tableName1} 运行会报错,编译后sql语句中含有引号,sql语句错误-->
SELECT * from ${tableName1}
</select>
#{ }和${ } 区别如下:
1、#是预编译的方式,$是直接拼接;
2、#不需要关注数据类型,mybatis实现自动数据类型转换;$不做数据类型转换,需要自行判断数据类型;
3、#可以防止sql注入;$不能防止sql注入;
4、如果 parameterType 只有一个参数,默认情况下,#{ }中可以写任意的名字;${ }中只能用value来接收。
<!-- #{}代表占位符?,表示mybatis框架会接收输入的参数并赋值到sql语句当中
关于简单类型(int,String,date。long)可以使用value来代表参数名
-->
<select id="findUserById" parameterType="java.lang.Integer" resultType="model.User">
select * from user where id=#{id}
</select>
<!--模糊查询 like +条件 '% ${匹配的内容} %' $是-->
<select id="findUserByName" parameterType="String" resultType="model.User">
select * from user where name like '%${value}%';
</select>