最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mybatis注解動(dòng)態(tài)sql注入map和list方式(防sql注入攻擊)

 更新時(shí)間:2021年11月30日 10:27:36   作者:daodfs1  
這篇文章主要介紹了mybatis注解動(dòng)態(tài)sql注入map和list方式(防sql注入攻擊),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。

網(wǎng)上的教程

  • 配置xml
  • 注解中寫xml腳本@Select()
  • 使用Java類中的Java方法拼寫sql語句(不防sql注入攻擊的純字符串拼接)

我的教程(防sql注入攻擊)

注入Map

Mapper層代碼

@Repository
public interface ManageMapper { 
 @SelectProvider(type = ManageProvider.class, method = "queryDevices")
 List<Map<String, Object>> queryDevices(@Param("devicetypeno") String devicetypeno, @Param("map") Map<String, Object> map);
}

Service層代碼

@Service("manageService")
public class ManageServiceImpl implements ManageService {
 
 @Resource
 private ManageMapper manageMapper;
 @Override
 public List<Map<String, Object>> queryDevices(String devicetypeno) {
  HashMap<String, Object> map = new HashMap<>();
  map.put("1-1", "1800");
  map.put("1-2", "1854");
  return manageMapper.queryDevices(devicetypeno, map);
 }
}

SqlProvider代碼

public class ManageProvider {
 
 public String queryDevices() {
  String sql = new SQL()
    .SELECT("TERMINALNUM, ORGCODE, DEVICETYPENO, DEVICENAME")
    .FROM("S_DEVICE_INFO")
    .WHERE("DEVICETYPENO = #{devicetypeno}")
    .WHERE("ORGCODE IN (#{map.1-1}, #{map.1-2})")
    .toString();
  return sql;
 }
}

注入List

Mapper層代碼

@Repository
public interface ManageMapper {
 @SelectProvider(type = ManageProvider.class, method = "queryDevices")
 List<Map<String, Object>> queryDevices(@Param("devicetypeno") String devicetypeno, @Param("list") List<Object> list);
}

Service層代碼

@Service("manageService")
public class ManageServiceImpl implements ManageService { 
 @Resource
 private ManageMapper manageMapper;
 @Override
 public List<Map<String, Object>> queryDevices(String devicetypeno) {
  ArrayList<Object> list = new ArrayList<>();
  list.add("1800");
  list.add("1854");
  return manageMapper.queryDevices(devicetypeno, list);
 }
}

SqlProvider代碼

public class ManageProvider {
 public String queryDevices(Map<String, Object> params) {
//  String sql = new SQL()
//    .SELECT("TERMINALNUM, ORGCODE, DEVICETYPENO, DEVICENAME")
//    .FROM("S_DEVICE_INFO")
//    .WHERE("DEVICETYPENO = #{devicetypeno}")
//    .WHERE("ORGCODE IN (#{list[0]}, #{list[1]})")
//    .toString();
//  return sql;
 
  @SuppressWarnings("unchecked")
  List<Object> list = (List<Object>) params.get("list");
  StringBuilder inBuilder = new StringBuilder();
  for (int i = 0, size = list.size(); i < size; i++) {
   if (i == 0) {
    inBuilder.append("(").append("#{list[").append(i).append("]}");
   } else if (i == size - 1) {
    inBuilder.append(", ").append("#{list[").append(i).append("]}").append(")");
   } else {
    inBuilder.append(", ").append("#{list[").append(i).append("]}");
   }
  }
  SQL sql = new SQL()
     .SELECT("TERMINALNUM, ORGCODE, DEVICETYPENO, DEVICENAME")
     .FROM("S_DEVICE_INFO")
     .WHERE("DEVICETYPENO = #{devicetypeno}");
  if (inBuilder.length() > 0) {
   sql.WHERE("ORGCODE IN " + inBuilder);
  }
  return sql.toString();
 }
}

封裝foreach

像xml foreach標(biāo)簽一樣使用foreach方法

請(qǐng)看mybatis注解動(dòng)態(tài)sql中foreach工具方法

mybatis防止sql注入的循環(huán)map寫法

<foreach collection="condition.keys" item="k" separator="and"> 
<if test="null != condition[k]"> 
${k} = #{condition[${k}]}
</if>
</foreach>

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

靖边县| 济源市| 彝良县| 婺源县| 吴川市| 石家庄市| 林西县| 兴城市| 绥江县| 新宁县| 微山县| 溧阳市| 万源市| 湟中县| 慈利县| 河源市| 剑川县| 南和县| 徐水县| 扶绥县| 炉霍县| 荣昌县| 乌兰浩特市| 江华| 蓝田县| 扶风县| 武定县| 德庆县| 赞皇县| 琼海市| 阿拉善右旗| 察隅县| 荆门市| 门源| 木里| 乌苏市| 岱山县| 简阳市| 中阳县| 闽侯县| 乡城县|