sql語句的生成有兩種方式,一種是手動拼接sql字符串,另外一種是使用帶佔位符的sql預編譯,而後填入參數。sql
mybatis使用的就是預編譯的方式,mybatis 在顯示sql語句的時候,都會顯示出帶?的sql語句, 說明mybatis使用了數據庫的預編譯功能,sql注入只對編譯前的sql起做用,對編譯的sql語句起不了做用,因此就能夠避免sql注入的問題。數據庫
mybatis 使用jdbc的 preparestatement功能來使用預編譯功能,這樣既提升了效率,又安全。安全
mybatis在 sqlmap裏面寫sql語句的時候,顯示參數的時候能夠使用#號,也能夠使用$, 在使用的時候咱們儘可能要使用#, 由於#才能起用預編譯功能,使用$的時候是直接以字符串方式拼在sql裏面,而不是以佔位符的方式存在。 通常只有在動態的表名或者列名才使用$輸出參數,好比天天使用一張新表插入統計數據,這樣的表名帶有日期信息的,就要動態生成了。mybatis