1. 程式人生 > >Mybatis中#{}和${}傳參的區別?

Mybatis中#{}和${}傳參的區別?

"使用#傳入引數"
sql語句:select * from emp where empno= #{empNo};
        如果傳入empNo為7369,那麼打印出來的就是
        select * from dept where dname = '7369';
"使用$傳入引數"
sql語句:select * from dept where dname = ${dname};
        如果傳入empNo為7369,那麼打印出來的就是
        select * from dept where dname = 7369;
"區別":#()當成字串解析,而$()則是把傳入的值放在sql語句後面,所以#{
}傳參能防止sql注入。 "什麼是防止sql注入?" 《測試類》 SqlSession sqlSession = null; sqlSession = SqlSessionFactoryUtil.getSession(); EmpDao empDao = sqlSession.getMapper(EmpDao.class); Map map = new HashMap(); map.put("empNo","7369 or 1=1"); List<Map> empDaoList = empDao.getList(map); if(empDaoList!=null&&
empDaoList.size()>0){ for (Map map1 : empDaoList) { System.out.println(map1.get("ENAME")+" "+map1.get("HIREDATE")); } } 《配置》 <if test="empNo != null and empNo != '' "> and empno = #{empNo} </if> 這裡如果你使用#(),則會報錯,無效數字,說明防止了sql注入,而使用$(
)則不會報錯。 "模糊查詢怎麼寫?" <select id="getList" parameterType="map" resultType="map"> select * from emp <where> <if test="ename != null and ename != '' "> and ename like '%'||#{ename}||'%' </if> </where> </select>