记录下午遇到的一个关于#和$符号的小问题
下午代码过程中,习惯性复制之前的SQL,改完运行报错...具体内容不记得了,也没细看,是#{}占位符和${}拼接符的问题.
大致总结下是这样,
#{} 占位符,相当于sql里的 ? 问号 , 一个占位符,是mybatis进行过预处理的. 赋值是什么,sql里就是什么内容 .
举个栗子: id = "1" , #{id} , select * from table where id = #{id} , 就相当于 select * from table where id = "1"
${} 拼接符 , 一般用于拼接参数 , 模糊查询等. mybatis 没有进行过预处理 . 执行时会处理 ,
举个栗子 : id = "1" , ${id} select * from table where id = ${id} , 就相当于 select * from table where id = 1
执行时,会把引号""中的内容拿出来
上代码 #{}
传参map
Map<String,Object> paramMap = new HashMap<>(); paramMap.put("begin", (pageNo - 1) * pageSize); paramMap.put("pageSize", pageSize); paramMap.put("list", tableIdPermissionList); paramMap.put("databaseName", databaseName); paramMap.put("tableName", tableName); paramMap.put("tableDesc", tableDesc); List<TableInfo> tableInfoListIn = tableInfoService.findTableInfoListIn(paramMap); 接口 List<TableInfo> findTableInfoListIn(Map<String, Object> paramMap);
Mapper
<select id="findTableInfoListIn" parameterType="java.util.Map" resultMap="TableBaseResultMap" >
SELECT * FROM table_info WHERE table_id IN <foreach item="item" index="index" collection="list" open="(" separator="," close=")"> #{item} </foreach> <if test="databaseName != null and databaseName != ''">and database_name like '%${databaseName}%'</if> <if test="tableName != null and tableName != ''">and table_name like '%${tableName}%'</if> <if test="tableDesc != null and tableDesc != ''">and table_desc like '%${tableDesc}%'</if> limit #{begin},#{pageSize} </select> 之前的代码 limit 用${} , int需要变成string , 才能取到取到 参数map
Map<String,String> paramMap = new HashMap<>(); paramMap.put("begin", (pageNo - 1) * pageSize + ""); paramMap.put("pageSize", pageSize + ""); paramMap.put("databaseName", databaseName); paramMap.put("tableName", tableName); paramMap.put("tableDesc", tableDesc); List<TableInfo> list=tableInfoService.findTableInfoAll(paramMap);接口
List<TableInfo> findTableInfoAll(Map<String, String> paramMap);mapper
<select id="findTableInfoAll" parameterType="java.util.Map" resultMap="TableBaseResultMap" > SELECT * FROM table_info WHERE 1 = 1 AND is_del = '0' <if test="databaseName != null and databaseName != ''">and database_name like '%${databaseName}%'</if> <if test="tableName != null and tableName != ''">and table_name like '%${tableName}%'</if> <if test="tableDesc != null and tableDesc != ''">and table_desc like '%${tableDesc}%'</if> LIMIT ${begin},${pageSize} </select> 新人入门,之前没有注意过,做个记录.