ssm-mybatis模糊查询like语句该怎么写?

问题回答
1.java中用%,sql使用#{}。建议。

2.java中用%,sql使用${}。不建议,会sql注入。

3.sql中使用%,sql使用 ${}。不建议,会sql注入。

4.sql中使用%,sql使用 #{}。不允许。会sql错误.

5.sql中使用%,sql使用 #{}。配合concat函数,建议。

简要回答

1.不用${},sql注入有风险

2.用#{},%号在java中或者sql中都可以使用.sql使用%,需要配合concat函数,建议.

辅助理解

1、java中用%,sql使用#{}。建议。

string wildcardname =%itheima%;
 list<name> names = mapper.selectlike(wildcardname);
 
 <select id=”selectlike”>
  select * from foo where bar like #{wildcardname}
 </select>
 
 #会预编译为 select * from foo where bar like ?
 #假如传递【%itheima%】,sql就是select * from foo where bar like '%itheima%'
 #假如传递【%itheima% or 1=1】,sql就是select * from foo where bar like '%itheima% or 1=1',也是没有sql注入的。

2.java中用%,sql使用${}。不建议,会sql注入。需要做额外的处理

 string wildcardname =%itheima% or 1=1;
 list<name> names = mapper.selectlike(wildcardname);
 
 <select id=”selectlike”>
  select * from foo where bar like ${wildcardname}
 </select>
 
 
 #假如传递【%itheima% or 1=1,sql为select * from foo where bar like %itheima% or 1=1;查询了所有

3、sql中使用%,sql使用 ${}。不建议,会sql注入。需要做额外的处理

 string wildcardname =' or '1=1;
 list<name> names = mapper.selectlike(wildcardname);
 
 <select id=”selectlike”>
      select * from foo where bar like '%${value}%'
 </select>
 
 
 #假如传递【' or '1=1】,sql就是select * from foo where bar like '%' or '1=1%',能查出所有的数据。

4、sql中使用%,sql使用 #{}。不允许。会sql错误

string wildcardname = “itheima”;
 list<name> names = mapper.selectlike(wildcardname);
 
 <select id=”selectlike”>
      select * from foo where bar like '%#{value}%'
 </select>
 
 
 #预编译为select * from foo where bar like '%?%'
 #假如传递【itheima】,sql就是select * from foo where bar like '%'itheima'%',会出现sql语法错误。

5、sql中使用%,sql使用 #{}。配合concat函数,可以。

 string wildcardname = “itheima”;
 list<name> names = mapper.selectlike(wildcardname);
 
 <select id=”selectlike”>
      select * from foo where bar like concat('%',#{wildcardname,jdbcType=VARCHAR},'%')
 </select>
 
 #会预编译为 select * from foo where bar like concat('%',?,'%')
 #赋值之后,sql为select * from foo where bar like concat('%','itheima','%')

衍生问题

sql注入的理解

你可能感兴趣的:(ssm-mybatis模糊查询like语句该怎么写?)