当前位置: 首页 > news >正文

Mybatis中的Map的使用和模糊查询的需求实现及其防SQL注入优化

文章目录

  • 一.Map的使用和模糊查询的需求实现及其防SQL注入优化
    • 1.1 Map的使用
    • 1.2 模糊查询的实现
      • 1.2.1 防SQL注入优化
      • 1.2.2 总结

一.Map的使用和模糊查询的需求实现及其防SQL注入优化

1.1 Map的使用

替换之前的根据ID查询信息:

1.编写接口:

User getUserById2(Map<String,Object> map);

2.编写对应的mapper对应的sql语句:

<select id="getUserById2" parameterType="map" resultType="com.zhu.pojo.User">select * from mybatis.user where id = #{helloid} and name = #{name};
</select>

3.编写测试类:

@Test
public void getUserById2(){SqlSession sqlSession = Mybatisutils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);Map<String, Object> map = new HashMap<String, Object>();map.put("helloid",2);mapper.getUserById2(map);sqlSession.close();
}

以增加用户为例:

1.编写接口:

int addUser2(Map<String,Object> map);

2.编写对应的mapper对应的sql语句:

<insert id="addUser2" parameterType="map" >insert into  mybatis.user (id,name,pwd) values (#{Userid},#{Username},#{Userpwd});
</insert>

3.编写测试类:

@Test
public void addUser2(){SqlSession sqlSession = Mybatisutils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);Map<String, Object> map = new HashMap<String, Object>();map.put("Userid",5);map.put("Username","34234234");map.put("Userpwd","你好");mapper.addUser2(map);sqlSession.close();
}

Map 传递参数, 直接在 sql 中取出 key 即可!【parameter Type=“map”】

对象传递参数, 直接在 sql 中取对象的属性即可!【parameter Type=“Object”】

只有一个基本类型参数的情况下, 可以直接在 sql 中取到!

多个参数用 Map, 或者注解!

1.2 模糊查询的实现

在sql中,可以根据某些特定的条件进行模糊查询,比方说要查找咦某个字母开头的昵称,或者一组类似的数据等。我们用字段like表示相似,来进行模糊查询。
在模糊查询中,%表示任意字符,_表示一个字符。

1.先看sql里的数据:

image-20230326131659606

2.编写接口:

List<User> getUserLike(String name);

3.编写SQL模糊语句查询:

<select id="getUserLike" resultType="com.zhu.pojo.User">select * from mybatis.user where name like #{value};
</select>

4.编写测试类:

@Test
public void getUserLike(){SqlSession sqlSession = Mybatisutils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> userLike = mapper.getUserLike("%猪%");for (User user : userLike) {System.out.println(user);}

运行结果如下:

image-20230326131822998

1.2.1 防SQL注入优化

比如在平时的模糊查询中,有用户输入了 1 or 1=1 ,这样就会把整个表爆出。

为了防止这种情况,我们理应直接在XML里规定其SQL语句的规范。

<select id="getUserLike" resultType="com.zhu.pojo.User">select * from mybatis.user where name like "%"#{value}"%";
</select>

那么测试类里的代码:

List<User> userLike = mapper.getUserLike("猪");

依然可以正常的模糊查询:

image-20230326132125285

1.2.2 总结

  1. Java 代码执行的时候,传递通配符%%
  2. 在 sql 拼接中使用通配符!
http://www.lryc.cn/news/43972.html

相关文章:

  • 【redis】redis缓存更新策略
  • LeetCode刷题--复制带随机指针的链表
  • 关于我的第一台电脑 华硕
  • 【华为OD机试 2023最新 】 最大化控制资源成本(C++ 100%)
  • leetcode 有序数组的平方(977)
  • 文本三剑客之awk
  • RK3568平台开发系列讲解(驱动基础篇)IS_ERR函数的使用
  • 特殊的类之注解
  • 商业分享:盲盒电商开启电商新可能
  • 【计算机架构】如何计算 CPU 时间
  • 银行数字化转型导师坚鹏:银行行长如何进行数字化转型
  • N32G45x学习笔记--- gpio引脚复用
  • ArcGIS Pro中使用深度学习的高分辨率土地覆盖制图
  • 【学习笔记】「NOI2018」冒泡排序
  • 【Ruby学习笔记】3.Ruby 语法及数据类型
  • 华为OD机试题【字符匹配】用 Java 解 | 含解题说明
  • JavaScript数组对象的浅拷贝与深拷贝(二)实现对象深拷贝的方法(5种)
  • iPhone屏幕适配(之屏幕尺寸)
  • 手机变砖修复神器之 8 个的 Android手机系统修复工具
  • 稀疏矩阵(Sparse Matrix)
  • 深度学习中的损失函数
  • English Learning - L2 语音作业打卡 辅音咬舌音 [θ] [ð] Day29 2023.3.21 周二
  • 【原始者-综述】
  • C++内存模型
  • 八股+面经
  • MySQL更新数据流程
  • 测试开发进阶系列课程
  • Qt源码阅读(三) 对象树管理
  • 【Python入门第四十二天】Python丨NumPy 数组裁切
  • Anaconda配置Python新版本tensorflow库(CPU、GPU通用)的方法