Mybatis基礎操作-刪除
刪除
package com.itheima.mapper;import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;@Mapper //在運行時,會自動生成該接口的實現類對象(代理對象),并且將該對象交給IOC容器管理
public interface EmpMapper {//根據ID刪除數據//#:占位符;#{id}:動態把id傳進去,id不是固定//注意事項:如果mapper接口方法形參只有一個普通類型的參數,#{...}里面的屬性名可以隨便寫,如:#{id},#{value}@Delete("delete from emp where id=#{id}")public void delete(int id);
}
使用自帶的test測試代碼
package com.itheima;import com.itheima.mapper.EmpMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class SpringbootMybatisCrudApplicationTests {@Autowiredprivate EmpMapper empMapper;@Testpublic void delete(){empMapper.delete(10);}}
delete from emp where id=#{id}:預編譯SQL語句
優勢:性能更高
更安全(防止SQL注入)
sql執行過程
預編譯執行:會把執行過的sql語句緩存,下次使用時可以直接拿出來使用,id值的改變只在執行SQL語句時把新的id值傳進去直接執行
正常執行:因為id值的改變,需要執行三次
SQL注入
SQL注入式通過操作的數據來修改事先定義好的SQL語句,以達到執行代碼對服務器進行攻擊的方法。(密碼永久為true,所以就算數據庫沒有存儲這條數據,但是依然可以登錄)
執行登錄操作
如果count>0則代表數據有這條用戶信息,登陸成功
select count(*) from emp where username=‘zhangwuji’ and password=‘123456’;
#{…}
- 執行SQL時,會將#{…}替換為?,生成預編譯SQL,會自動設置參數值
- 使用時機:參數傳遞,都使用#{…}
${…}
- 拼接SQL。直接將參數憑借在SQL語句中,存在SQL注入問題
- 使用時機:如果對表名、列表進行動態設置時使用