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注入的更多相关文章

  1. mybatis如何防止sql注入(2)

    Mybatis框架下SQL注入漏洞修复建议1. 模糊查询like SQL注入修复建议按照新闻标题对新闻进行模糊查询,可将SQL查询语句设计如下:select * from news where ti ...

  2. MyBatis怎么防止SQL注入

    SQL注入是一种代码注入技术,用于攻击数据驱动的应用,恶意的SQL语句被插入到执行的实体字段中(例如,为了转储数据库内容给攻击者).[摘自] SQL injection - Wikipedia SQL ...

  3. java持久层框架mybatis如何防止sql注入

    看到一篇很好的文章:http://www.jfox.info/ava-persistence-framework-mybatis-how-to-prevent-sql-injection sql注入大 ...

  4. MyBatis如何防止SQL注入

    转自:http://www.myexception.cn/sql/1938757.html SQL注入是一种代码注入技术,用于攻击数据驱动的应用,恶意的SQL语句被插入到执行的实体字段中(例如,为了转 ...

  5. Mybatis下的sql注入

    以前只知道mybatis框架下,order by后面接的是列名是不能用#{},这样不起效果,只能用${},这样的话就可能产生sql注入.后来发现其实还有另外两种情况也是类似的: 1.order by ...

  6. 【转】mybatis如何防止sql注入

    sql注入大家都不陌生,是一种常见的攻击方式,攻击者在界面的表单信息或url上输入一些奇怪的sql片段,例如“or ‘1’=’1’”这样的语句,有可能入侵参数校验不足的应用程序.所以在我们的应用中需要 ...

  7. mybatis如何防止sql注入(1)

    sql注入大家都不陌生,是一种常见的攻击方式,攻击者在界面的表单信息或url上输入一些奇怪的sql片段,例如“or ‘1’=‘1’”这样的语句,有可能入侵参数校验不足的应用程序.所以在我们的应用中需要 ...

  8. 简单说说mybatis是防止SQL注入的原理

    mybatis是如何防止SQL注入的 1.首先看一下下面两个sql语句的区别: <select id="selectByNameAndPassword" parameterT ...

  9. Mybatis下的SQL注入漏洞原理及防护方法

    目录 一.前言 二.SQL 注入漏洞原理 1.概述 2.漏洞复现 3.修复建议 三.Mybatis 框架简介 1.参数符号的两种方式 2.漏洞复现 四.Mybatis 框架下的 SQL 注入问题及防护 ...

  10. Mybatis 框架下 SQL 注入攻击的方式

    前言 SQL注入漏洞作为WEB安全的最常见的漏洞之一,在java中随着预编译与各种ORM框架的使用,注入问题也越来越少. 新手代码审计者往往对Java Web应用的多个框架组合而心生畏惧,不知如何下手 ...

随机推荐

  1. wpf 自定义轮播图组件

    轮播图组件代码: [Localizability(LocalizationCategory.None, Readability = Readability.Unreadable)][TemplateP ...

  2. C# 实现中文转颜色 - 实现根据名字自动生成头像

    一.C#实现中文转颜色 - 实现根据名字自动生成头像 原理说明: 由于名字图像是自动生成,背景颜色不一样,可以考虑一下几种方法: 1)使用随机数来自动生成一个16进制颜色字符串,作为头像的背景颜色: ...

  3. ubuntu下openCV-Haar特征分类器训练

    ubuntu下openCV-Haar特征分类器训练 这段时间在学openCV,准备做一个头部检测,但是openCV自带的分类器只有人脸检测的,而且准确度不高,就准备自己训练一个分类器.在网上看了很多的 ...

  4. 微信iOS消息拦截插件教程-手机越狱环境搭建

    微信iOS消息拦截插件教程-手机越狱环境搭建 标签(空格分隔): ios越狱开发 环境 背景介绍 本教程所有内容免费 本教程来源于一次知识分享,如果有需要了解更多的 请联系QQ:480071411 i ...

  5. Python依据遥感影像的分幅筛选出对应的栅格文件

      本文介绍基于Python语言,结合已知研究区域中所覆盖的全部遥感影像的分幅条带号,从大量的遥感影像文件中筛选落在这一研究区域中的遥感影像文件的方法.   首先,先来明确一下本文所需实现的需求.现已 ...

  6. .NET开源、跨平台、使用简单的面部识别库

    前言 今天给大家分享一个.NET开源(MIT License).免费.跨平台(适用于 Windows.MacOS 和 Linux ).使用简单的面部识别库:FaceRecognitionDotNet. ...

  7. NOIP模拟62

    T1 Set 解题思路 抽屉原理 发现对于前缀和向 \(n\) 取模之后一定是右两个值相等的(包括什么都不选的 0 ). 假设 \(pre_j=pre_i\) 那么 \([j+1,i]\) 之间这一段 ...

  8. 「C++」论高精度

    大家好,我是Charzie.在编程领域,高精度计算是一个常见的问题.当标准的整型或浮点型无法满足我们的计算需求时,高精度计算就显得尤为重要.在C++中,虽然标准库没有直接提供高精度数据类型,但我们可以 ...

  9. kettle从入门到精通 第三十四课 kettle 错误处理

    1.我们在平常写应用程序的时候,需要主动捕获异常或者错误,不然程序有可能异常退出.同样kettle 也支持异常或者错误处理,下图展示的是在批量插入数据的时候捕获异常,如唯一健冲突,死锁等,并将错误信息 ...

  10. SMB3.0多通道叠加双网卡提速

    SMB3.0多通道叠加双网卡提速 (双网卡.多网卡,NAS,局域网共享速度) WIN8及以上是默认开启的.(WIN10.WIN11 默认开启) 只需要同规格的网卡,比如你一张是1Gbps的,另一张网卡 ...