MyBatis动态表技术
#{}
可以获取到方法的参数#{}被解析成占位符
<select id="getUserById" resultType="user">
select #{cloums} from t_User where id = #{id}
</select>
${}
可以获取到方法的参数${}解析后会被直接拼接在sql语句中
<select id="getUserById" resultType="user">
select ${cloums} from t_User where id = #{id}
</select>
总结:
PrepareStatement预处理
#{}一般使用给属性赋值
Statement
${}直接拼接字符串会出现在sql注入的问题,一般用它来实现sql表的动态查询
动态表查询
通过方法参数入sql语句的形式来进行数据的查询
/**
* 直接通过sql语句查询,但是每张表都有一个实体类对应
* 用list可能查多条数据
* map不知道查询的是哪一个实体类,通过map的键值对象是完成查询数据的存储
* @param sql
* @return
*/
public List<Map<String,Object>> dynamicSQL(@Param("sql") String sql);
<select id="dynamicSQL" resultType="map">
${sql};
</select>
注意:如果不给参数别名运行会出错,MyBatis会找不到sql