mybatis

#{}${}的区别

#{}${}的区别

  • #{}使用预编译机制,在传参数之前,对SQL语句进行预编译,#{}使用?代替,传参后,将#{}的值放在单引号中,取代?
    select * from user where name = #{name};-->select * from user where name = ?;
    如果name的值传进来是“jack”,那么最终变成select * from user where name = 'jack';
  • ${}在预编译之前,将${}的值不加单引号直接和SQL语句拼接后,再进行编译,会造成SQL注入的安全问题
    select * from ${tableName} where name = #{name}
    假如,我们的参数 tableName 为 user; delete user; --,那么 SQL 动态解析阶段之后,预编译之前的 sql 将变为:
    select * from user; delete user; -- where name = ?;
    -- 之后的语句将作为注释,不起作用,因此本来的一条查询语句偷偷的包含了一个删除表数据的 SQL。

mapper.xml文件位置

  • 传统的和mapper接口放在一起

    

        

        
        

        
        

        
        

        
        

    
  • 和mapper接口分离,和其他配置文件一样,放在resource文件夹
    在spring-dao.xml文件中配置sqlSessionFactory.mapperLocations指定mapper.xml的路径,mapperScannerConfigurer.basePackage指定mapper接口的包名。参考
    mybatis_第1张图片
    image.png



    
    

    
    
        
        
        
        
    

    
    
        
        
        
        
        
        
        
    

    
        
        
    


你可能感兴趣的:(mybatis)