Ibatis基础知识:#与$的区别

背景

	Ibatis是一个轻量级、非侵入式的持久层框架,适用于范围较广、较轻便……当然,无论J2EE中哪一个持久层框架,都会基于JDBC(不细究JNDI方式)。我们在SqlMap中编写SQL,利用各种SqlMap标签处理业务逻辑,利用参数标记传递参数。
	在实际开发过程中,弄明白#号$号的区别很重要,下面我们就来分析一下这两个SqlMap参数标记。

参数标记

#号方式

	解析以#号标记的参数时,Ibatis直接利用JDBC提供的参数标记(?号),将内存中的参数传递给数据库。这时,我们须要保证Java对象参数的数据类型,与数据库字段的参数类型相匹配。
	优点:自适应数据类型;防注入式攻击
	缺点:受JDBC参数标记限制,只能用于Where条件、Case...When语句

$号方式

	解析以$号标记的参数时,Ibatis将Java对象参数以字符串方式进行替换,相当于直接写在SQL语句里。
	优点:灵活简便;不受JDBC参数标记限制,可用于任意SQL语句位置
	缺点:需要注意数据类型,也就是自己添加单引号;需要防范注入式攻击

小结

	这两种参数标记相辅相成,为了解决不同问题而生,我们会用对、用好。

Ibatis基础知识:#与$的区别

时间: 2024-08-27 19:03:19

Ibatis基础知识:#与$的区别的相关文章

iBatis基础知识

iBatis简介: 特点:结构性好,小巧,容易上手 搭建环境: 1.创建java 项目 2.导入(3个)jar包:ibatis-2.3.0.667.jar,mysql驱动包,Junit测试包 3.配置iBatis的主配置文件 SqlMapConfig.xml 配置由jdbc管理事务 配置数据源 SIMPLE 配置编写sql语句的xml文件  <sqlMap resource="cn/Stu.xml"/> 4.编写Jdbc 连接的属性文件  SqlMap.properties

java基础知识回顾之java Thread类学习(九)--wait和notify区别

wait和sleep区别:  相同点:调用wait,sleep方法都可以是线程进入阻塞状态,让出cpu的执行权. 不同点:1.sleep必须指定时间,但是wait方法可以指定时间,也可以不指定时间. 2.wait方法必须在同步中使用,但是sleep不一定在同步中使用. 3.在同步中,调用sleep方法释放CPU执行权,但是不会释放锁,即使让出了CPU执行权,其它线程也无法进入同步锁,不能得到执行.但是wait  方法不仅释放CPU执行权,而且释放同步锁,进入阻塞状态.也就是说其它等待此锁的线程可

(转)2.4.1 基础知识--添加服务引用与Web引用的区别

<Web服务开发学习实录>第2章构建ASP.NET Web服务,本章我们将学习创建Web服务的各种方法,并重点对使用Visual Studio创建ASP.NET Web服务和修改Web服务的属性进行介绍.本节为大家介绍基础知识--添加服务引用与Web引用的区别. AD: 2.4.1  基础知识--添加服务引用与Web引用的区别 由于.NET Framework 4默认不再推荐Web服务,而是通过WCF来实现Web服务的功能.而.NET Framework 3.5两者都支持,因此在添加时存在一些

java基础知识回顾之---java StringBuffer,Stringbuilder与String的区别

public class StringBuilderTest { /** * StringBuffer和Stringbuilder :使用与内容可以被修改的字符串 * 与String的区别:String是内容不可以修改的字符串.根据下面的例子知道, * 当你知道字符数据要改变的时候用StringBuffer和Stringbuilder,效率高 */ public static void main(String[] args) { int[] arr = {3,1,5,3,8}; String s

框架 day65 Mybatis入门(基础知识:框架原理,入门[curd],开发dao层,全局与映射配置)

Mybatis 基础知识(一) 第一天:基础知识(重点) mybatis介绍 mybatis框架原理(掌握) mybaits入门程序(掌握) 用户信息进行增.删.改.查 mybatis开发dao层方法:(掌握) 原始dao开发方法(dao接口和实现类需要程序员编写) mapper代理开发方法(程序员只需要编写接口) SqlMapConfig.xml(mybatis全局配置文件)(掌握) mybatis输入映射(掌握) mybatis输出映射(掌握) mybatis动态sql(掌握)   1   

线程基础知识

什么是线程: 在一个程序里的一个执行路线就叫做线程(thread).更准确的定义是:线程是"一个进程内部的控制序列" 一切进程至少都有一个执行线程 进程与线程 进程是资源竞争的基本单位 线程是程序执行的最小单位 线程共享进程数据,但也拥有自己的一部分数据 线程ID 一组寄存器 栈 errno 信号状态 优先级 fork和创建新线程的区别 当一个进程执行一个fork调用的时候,会创建出进程的一个新拷贝,新进程将拥有它自己的变量和它自己的PID.这个新进程的运行时间是独立的,它在执行时几乎

【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识

前面几篇文章采用的案例的方法进行介绍的,这篇文章主要介绍Python常用的扩展包,同时结合数据挖掘相关知识介绍该包具体的用法,主要介绍Numpy.Pandas和Matplotlib三个包.目录:        一.Python常用扩展包        二.Numpy科学计算包        三.Pandas数据分析包        四.Matplotlib绘图包 前文推荐:       [Python数据挖掘课程]一.安装Python及爬虫入门介绍       [Python数据挖掘课程]二.K

音频开发基础知识简介

在现实生活中,音频(audio)主要用在两大场景中:语音(voice)和音乐(music).语音主要用于沟通通信,如打电话,现在由于语音识别的发展,人机语音交互也是语音的一个应用,目前正在风口上,好多大厂都推出了智能音箱.音乐主要用于欣赏,如音乐播放. 下面简单介绍音频的基础知识: 采样和采样频率:现在是数字时代,在音频处理时要先把音频的模拟信号变成数字信号,这叫A/D转换.要把音频的模拟信号变成数字信号,就需要采样,或者叫抽样.当要把音频播放出来时则需要把数字信号转换成模拟信号,这叫D/A转换

前端团队成长计划(一):基础知识梳理

一个月前我开始了前端团队的成长计划,主要主语两方面的考虑:校招应届生能快速进入工作的状态达到一个能支撑业务的技能水平,提前学习主流前端技术,为未来的业务代码重构做储备.5月是整个计划的第一个阶段,主要的任务是,梳理常规前端基础知识和开发技能. 5月的计划如下:(偏基础) 1.js和css的一些规范以及常规功能如何实现: 2.了解现有业务工程的开发,部署,上线流程以及原理,做到可交叉维护: 3.初步了解gulp,为下一阶段做准备. 4.了解PC开发中常见的问题以及IE浏览器的兼容方式(IE8+)