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

Mybatis(Day 18)

  • 数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中数据模型的统称。
  • MyBatis 支持定制化 SQL、存储过程以及高级映射,可以在实体类和 SQL 语句之间建立映射关系,是一种半自动化的 ORM 实现。
  • ORM(Object Relational Mapping,对象关系映射)是一种数据持久化技术,它在对象模型和关系型数据库之间建立起对应关系,并且提供了一种机制,通过 JavaBean 对象去操作数据库表中的数据。
  • ORM通过将对象模型与关系数据库的表进行映射,大大简化了数据库操作,使代码更具可读性、易维护性。
  • 一、#与$ 区别 :${}拼接字符串         #{} 预编译,有效防止SQL注入

  • 使用建议:

  • 尽量使用#{}:因为它会预编译,能够有效防止SQL注入,并且能够自动进行类型转换。
  • 避免直接使用${}进行不可信数据:除非你非常确定传入的参数是安全的,不会引起SQL注入。通常,只在需要动态生成SQL语法元素(如表名、列名)时使用 ${}

二、防止SQL注入:

预编译-将SQL语句的语义确定, 之后无论传递任何的参数都不会改变SQL语句语义, 可以有效防止SQL注入,也可以有效加快批处理的效率

三、三种接收数据方式:

在使用MyBatis进行数据库操作时,接收和传递数据的方法需要谨慎选择,以确保安全性和可维护性。接收数据的方式主要有三种:通过Mapper直接接收,通过简单的字符串传递,以及通过封装类传递。

1.Mapper直接接收参数(不推荐)

Mapper直接接收参数虽然简单,但是存在潜在的安全隐患,特别是当传递参数直接拼接到SQL语句中的时候,会导致SQL注入

缺点:

  • 容易引起SQL注入
  • 代码维护性差,特别是当参数增多时

2. 通过简单字符串传递参数(不推荐)

将参数拼接成字符串传递,虽然能够避免一些简单场景下的拼接问题,但如果参数量较多或者包含特殊字符,就不太适用了

  • 缺点:

  • 参数较多时,字符串拼接会变得不堪重负
  • 维护和阅读性差。

3. 封装类接收参数(推荐)--有效防止SQL注入

通过使用封装类(POJO,Plain Old Java Object),可以将多个参数封装到一个对象中传递。这种方法不仅能提高代码的可读性和可维护性,还能有效防止SQL注入。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 代码随想录算法刷题训练营day49:LeetCode(42)接雨水、LeetCode(84)柱状图中最大的矩形
  • Less 教程:从入门到精通
  • Golang | Leetcode Golang题解之第329题矩阵中的最长递增路径
  • 如何有效构建企业微信私域流量池并提升用户粘性?
  • LinuxC++(10):调用可执行程序
  • 【实现100个unity特效之16】unity2022之前或者之后版本实现全屏shader graph的不同方式 —— 适用于人物受伤红屏或者一些其他状态效果
  • 2024年8月8日(python基础)
  • 开源应用:AI监测如何成为社会安全的智能盾牌
  • 【Week-G7】Semi-Supervised GAN 实践,使用MNIST数据集
  • Oracle DBA常用 sql
  • AI时代,我们还可以做什么?
  • android系统中data下的xml乱码无法查看问题剖析及解决方法
  • C++ 11 for 循环和容器
  • Linux安全与高级应用(七)深入Linux Shell脚本编程:循环与分支结构的高级应用
  • 【算法】装箱问题
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • @jsonView过滤属性
  • 30天自制操作系统-2
  • create-react-app做的留言板
  • extract-text-webpack-plugin用法
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • JavaScript设计模式之工厂模式
  • js面向对象
  • Laravel Mix运行时关于es2015报错解决方案
  • laravel 用artisan创建自己的模板
  • React-生命周期杂记
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 对JS继承的一点思考
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 聊聊directory traversal attack
  • 每天10道Java面试题,跟我走,offer有!
  • 三分钟教你同步 Visual Studio Code 设置
  • 实现菜单下拉伸展折叠效果demo
  • 网页视频流m3u8/ts视频下载
  • 用 Swift 编写面向协议的视图
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​zookeeper集群配置与启动
  • ​你们这样子,耽误我的工作进度怎么办?
  • #LLM入门|Prompt#3.3_存储_Memory
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (1)Nginx简介和安装教程
  • (13):Silverlight 2 数据与通信之WebRequest
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (附源码)php投票系统 毕业设计 121500
  • (利用IDEA+Maven)定制属于自己的jar包
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (转)视频码率,帧率和分辨率的联系与区别
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .NET Core 2.1路线图
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET Standard 的管理策略
  • .NET 动态调用WebService + WSE + UsernameToken