mybatis:映射方式与SQL注入
1.映射方式有两种,一种是resultType
这个是有一个实体类其成员与数据库中表字段一一对应,下例中就是User类对应了user表
<mapper namespace="com.example.mapper.UserMapper">
<select id="selectUserById" resultType="com.example.model.User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
一种是resultMap
他对应了更复杂的应用场景:
表中列名与实体类的成员变量对应不上,并且没有使用注解@TableField进行标记。下例中我们的实体类中的password对应了表中的pwd
<resultMap id="blogResult" type="Blog">
<id column="id" property="id"/><!--主键映射-->
<result column="pwd" property="password"/><!--数据库表字段到实体类属性的映射-->
<result column="name" property="name"/>
</resultMap> <select id="selectBlogById" parameterType="int" resultMap="blogResult">
select * from blog where id=#{id}
</select>
要实现一对多的关联,进行多表联查(阿里规范中要求不可以使用多表联查,这里仅作为例子,实际使用中还是老实写两个SQL再拼接)
有Order表与OrderDetail表,他们是一对多的关系
<mapper namespace="com.example.mapper.OrderMapper">
<resultMap id="orderResultMap" type="com.example.model.Order">
<id property="id" column="order_id" />
<collection property="orderDetails" column="order_id" foreignColumn="order_id" ofType="com.example.model.OrderDetail"
select="getOrderDetailsByOrderId" />
</resultMap> <select id="selectOrderById" resultMap="orderResultMap">
SELECT * FROM order WHERE id = #{id}
</select> <select id="getOrderDetailsByOrderId" resultType="com.example.model.OrderDetail">
SELECT * FROM order_detail WHERE order_id = #{orderId}
</select>
</mapper>
上例中,我们对order进行select时,会使用resultMap,Map指定了我们创建的entity,其中有一个id,一个List<OrderDetails>,我们使用collection元素将List映射到了getOrderDetailsByOrderId这个子查询上。这样就实现了一次多表联查
SQL注入:
在mybatis中,有#{}与${}两种参数替换方法,但是他们是不同的:
#{}是预编译参数,他使用参数占位符?来替换。提高了性能,同时防止了SQL注入
${}是字符串替换,很容易发生SQL注入,很危险。如果使用请同时使用<if> <when> <choose>等标签保证其安全性
mybatis:映射方式与SQL注入的更多相关文章
- mybatis如何防止sql注入(2)
Mybatis框架下SQL注入漏洞修复建议1. 模糊查询like SQL注入修复建议按照新闻标题对新闻进行模糊查询,可将SQL查询语句设计如下:select * from news where ti ...
- MyBatis怎么防止SQL注入
SQL注入是一种代码注入技术,用于攻击数据驱动的应用,恶意的SQL语句被插入到执行的实体字段中(例如,为了转储数据库内容给攻击者).[摘自] SQL injection - Wikipedia SQL ...
- java持久层框架mybatis如何防止sql注入
看到一篇很好的文章:http://www.jfox.info/ava-persistence-framework-mybatis-how-to-prevent-sql-injection sql注入大 ...
- MyBatis如何防止SQL注入
转自:http://www.myexception.cn/sql/1938757.html SQL注入是一种代码注入技术,用于攻击数据驱动的应用,恶意的SQL语句被插入到执行的实体字段中(例如,为了转 ...
- Mybatis下的sql注入
以前只知道mybatis框架下,order by后面接的是列名是不能用#{},这样不起效果,只能用${},这样的话就可能产生sql注入.后来发现其实还有另外两种情况也是类似的: 1.order by ...
- 【转】mybatis如何防止sql注入
sql注入大家都不陌生,是一种常见的攻击方式,攻击者在界面的表单信息或url上输入一些奇怪的sql片段,例如“or ‘1’=’1’”这样的语句,有可能入侵参数校验不足的应用程序.所以在我们的应用中需要 ...
- mybatis如何防止sql注入(1)
sql注入大家都不陌生,是一种常见的攻击方式,攻击者在界面的表单信息或url上输入一些奇怪的sql片段,例如“or ‘1’=‘1’”这样的语句,有可能入侵参数校验不足的应用程序.所以在我们的应用中需要 ...
- 简单说说mybatis是防止SQL注入的原理
mybatis是如何防止SQL注入的 1.首先看一下下面两个sql语句的区别: <select id="selectByNameAndPassword" parameterT ...
- Mybatis下的SQL注入漏洞原理及防护方法
目录 一.前言 二.SQL 注入漏洞原理 1.概述 2.漏洞复现 3.修复建议 三.Mybatis 框架简介 1.参数符号的两种方式 2.漏洞复现 四.Mybatis 框架下的 SQL 注入问题及防护 ...
- Mybatis 框架下 SQL 注入攻击的方式
前言 SQL注入漏洞作为WEB安全的最常见的漏洞之一,在java中随着预编译与各种ORM框架的使用,注入问题也越来越少. 新手代码审计者往往对Java Web应用的多个框架组合而心生畏惧,不知如何下手 ...
随机推荐
- Android 13 - Media框架(12)- MediaCodec(二)
关注公众号免费阅读全文,进入音视频开发技术分享群! 前面一节我们学习了 MediaCodec 的创建以及配置过程,了解部分设计机制以及功能,这一节我们将继续学习其他方法. 1.start start ...
- 利用docker 搭建File Browser 文件管理系统
File Browser就是一个文件浏览器,因为linux并不方便桌面管理,所以Filebrowser就是帮助我们管理linux服务器上文件的程序,你可以称他为网盘程序,可以管理文件.可以分享文件,另 ...
- iOS线程While-True死循环会发生什么
一.在工作的代码有一段while-True轮训的逻辑,循环中主要的工作是阻塞的IO 代码大概如下: dispatch_async(dispatch_get_global_queue(0, 0), ^{ ...
- C# 指针简单使用
1. 使用unsafe C# 支持 unsafe 上下文,你可在其中编写不可验证的代码. 在 unsafe 上下文中,代码可使用指针.分配和释放内存块,以及使用函数指针调用方法. C# 中的不安全代码 ...
- P7448
problem & 双倍经验 & blog 低配版本 没有 Ynoi 标志性算法卡常,这点差评. 拆解问题 定义 \(lst_i\) 为上一个和 \(i\) 号点相同的位置. 由于几个 ...
- EF 从设计器改为 DB First时遇到 Keyword not supported: 'data source'.
EF 从设计器改为 DB First时遇到 Keyword not supported: 'data source'. 解决方法: 把providerName="System.Data.En ...
- raksmart服务器部署SSL报错:ERR_CERT_COMMON_NAME_INVALID
背景:raksmart服务器 下篇 部署项目 SSL报错:ERR_CERT_COMMON_NAME_INVALID 安装certbot sudo apt update sudo apt install ...
- 基于 Swagger 增强 UI FytApi.MUI
FytApi.MUI 介绍 基于swagger的轻量级,注入化的api-ui组件 支持netcore 3.1/5.0/6.0 特点 零浸入.轻量.简单.好看.好用 可配置权限认证以及Header,支持 ...
- 高德的API来查询行政区域查询
高德的API来查询行政区域查询 1.api接口文档地址 https://lbs.amap.com/api/webservice/guide/api/district GET https://resta ...
- FFmpeg frei0r插件使用学习
背景 ffmpeg做基本的音视频编辑还是比较简单的,但要做一些滤镜及特效就比较麻烦了.接下来看看借用frei0r插件怎么做: 简介 你可以将frei0r看作是一个"视频特效工具箱" ...