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应用的多个框架组合而心生畏惧,不知如何下手 ...
随机推荐
- Stable Diffusion WebUI详细使用指南
Stable Diffusion WebUI(AUTOMATIC1111,简称A1111)是一个为高级用户设计的图形用户界面(GUI),它提供了丰富的功能和灵活性,以满足复杂和高级的图像生成需求.由于 ...
- uniapp 输入有值后按钮变色
我们在开发中难免会遇到一些登录注册输入框中的值为空时,按钮的状态变成为不可点击的状态,当输入框有值后就把按钮变为可点击的状态 代码部分: <input placeholder="请输入 ...
- c# 语音识别 | 智能对话
在.NET4.0中,我可以借助System.Speech组件让电脑来识别我们的声音. 以上,当我说"name",显示"Darren",我说"age&q ...
- Linu部署服务启停脚本
Linux项目部署启停 WEB应用(WAR包)部署 实际开发中,难免遇见新业务项目构建.项目重构(重新优化整个项目的架构,相当于重写),也可能是项目拆分多个模块,也可能部分拆分,但项目的模块化分离,就 ...
- php简单登录
<?php // 1,php接收参数 $userName = $_POST['userName']; $userPwd = $_POST['userPwd']; // 2,PHP需要操作数据库 ...
- LeetCode 207. Course Schedule 课程表 (C++/Java)
题目: There are a total of n courses you have to take, labeled from 0 to n-1. Some courses may have pr ...
- iOS11之后刷新tableview会出现漂移的现象解决办法
首先要注意这只是在iOS11下会出现的bug,如果iOS10以及以下也有问题的情况不属于此列 问题的动图如下所示,如果要做每隔一段短时间就刷新一个section甚至整个tableview的操作的时候会 ...
- Pytorch复制现有环境
一,在本机上,打开anaconda Prompt直接使用 conda create -n 新环境名 --clone 旧环境名
- 实验8.Vlan Hybrid实验
# 实验8.Vlan Hybrid实验 本实验用于测试华为独有的混合式接口类型hybrid 实验组 配置交换机 对交换机sw1与sw2做具体配置 SW1 vlan ba 10 20 100 int g ...
- WAV音频文件按秒切片段
wav音频文件按秒切片段 import wave def split_wav_by_seconds(input_file, output_file, start_second, end_second) ...