00:00
再看一个知识点,这个知识点呢。是一个井号和Dollar的一个区别,井号和Dollar的区别。我们现在呢,在使用过程中,我们绝大多数用的是这个井号。减化掉的占位符,它能代替呢,实际的参数的。啊,进行实际的参数的替代的,就是说它代表实际的参数的。当你使用井号之后,My be在内部它执行三轨队用的是普repair死定对象,那么这种对象呢?它的实行效率高,而且能够避免CQ注入,它更安全,这是首选方案。所以我们在用的时候要用的是井号这种站位符的语法格式。用井号,它对应的是repair的死定对象的执行SQ。那么这种方式中。这就变成了问号,我们把105替换到这里,这种方式。
01:03
安全性更高,避免了cycle注入啊,避免ccle注入,而且呢,我们的prop对象,它的执行效率要更高啊,所以我们建议你呢,用的是井号这种战略服务。除此之外呢?还有一种方式叫做Dollar,它用叫Dollar在这里啊,我们先来明确一下井号这个占位符,它占位的是什么位置呢?它你看它位置放在哪儿。井号这个井号占用符,它是放在你等号列名的,这个应该说放在你这个列名后面这块是不是列值啊。啊,是列值吧,是等号的,右侧的是列值是ID等于。说1001,这是不是值啊。井号占用符,它代表的是直的啊,是直的。
02:04
除了这种以外呢,还有一种叫Dollar。Do的语法格式跟井号这个完全一样,就是说你能用井号的地方。用这个Dollar呢,也可以实现语法格式一模一样,包括你上面的这些地方。能用井号这种方式用的都可以把井号替换成Dollar,这是可以的啊,这是可以的。那这个Dollar它是一种什么样的方式呢?Dollar的方式它是做它的连接和替换,它不是占位符,就是说刀的这种方式,它用的不是这种问号,这么说啊。Dollar的这种方式,它在直行塞过的时候用的不是问号。不是它,它用的是奏串的连接和替换。这在连接和替换。那这个什么意思呢?就是这样。
03:01
嗯,给大家写一个小例子,大家明白了啊。那我们这呢,先来用一下之前的,嗯,我们在map文件中。最上面看这个是不是有一个是根据这个。ID来进行查询的,我把这个方法给它调一下啊调一下。对比下看有什么区别,没看这个,这是根据主键ID来查询值嘛,看它。长结果我们看这块是不是一个YID等于问号是站位的方式啊,这站位符用的是这个井号。它用的是问号来代替这个井号的位置啊。这种方式就是井号,这块是站位符,是个问号,哦,是这样的。那现在呢,我们用Dollar代替一下,看看是什么样,用Dollar代替一下啊,Dollar代替一下,我把刚才那个语句保存一下,看一看啊,这个拿不来。
04:05
我呢放在这儿啊,放在这这块,我们要讲的这个知识点呢,我们就写一个五吧,五呢这讲的是井块和这个Dollar啊,和这个Dollar的一个区别。把这个拷过来,这是井号的结果,结果啊,井号呢,是这个样子的。然后我换成一个刀了。刀了,就这啊,就换一下就完了,所以换成这样就完了啊,别的都不用改。然后代码再执行。好,结束之后呢,还有错误。有错了,是说什么呢?没有这个ID。好,那这块呢,哎,没有不好使。
05:01
这块不好使呢,那怎么办呢?我看一下改造的方式啊。我这块用的是ID,找不到它,那好吧。那我就把这个名字考下来。我在我们的第一个方法中,给他命一下名就好了,T加进去命一下名啊。再来执行。问一下名,再来执行。好,此时没问题了,然后你看宇宙变成这个样子了。这边呢,看啊。到了的结果好,你看有什么区别没有啊。我们现在做的这个赛科语句实际上是同样的。同样的三。
06:01
就这句话。那像井号呢,是这个样子的,我们分一下啊,这个是井号。然后下面这个Dollar的是这个样子的。那对比着看吧,你看有什么区别?这个井号,这是变成问号了。然后刀的时候你们注意看这一块是不是直接ID连上了这个值啊。他并没有进行一个问号的替代吧。那就是说。当你是刀的时候,它处理方是这样的,就相当于是我们有一个扎塞宇坠。前面这一部分。放到这儿,然后加上谁呢?加上你传过来那个1001。是这样的。所以这种方式它叫做字符串的。
07:00
连接奏事的连接啊,连接是这个意思,你看。这不字符串的连接吗?连接符号把它连在一块儿吗?是这种方式。那对于只用这样的语句。它对应的。这些位置就没有问号了,所以它执行这种字符串连接塞口语句,它使用的是是们的对象。然后使用它来执行的thankyou。这种对象在执行时呢,它的效率啊。它的效率要比这个普。Statement要低要要低,效率要低一些。再一个呢,这种方式,它这个数据的安全性低,数据的安全性低。
08:04
有可能会造成呢,叫做cycle注入引起呢,我们对这条C口执行时会出现一些。问题或者安全性的方面的一些,呃,异常情况,所以呢,我们不建议呢,用这种叨的方式,说能不用叨呢,你就不用叨,最好还是用这种井号的方式,井号的方式。那这里我们说这个刀它怎么能有安全性方面的问题呢?我给大家写一个例子,大家就明白了。我再再写一个啊,写在下面这吧,下面这块,比方说你在做一个查询,嗯,Select。然后这块呢,我们要用use这个刀啊。参数这块呢,我来写一个名字,它需要给它命名一下,那我们叫拍。我叫做my name,然后选择他。
09:01
嗯,我把这个拿过来啊,放到MY文件里边去。那这块呢,我们说说要使用这个刀的战略服,这样的战略符,写这个ID,后面的代码呢,我们还是用这个student里边写这个select,下面呢,我写的是select qha from和name等于某某值。我对应写的是my name啊。因为我接口中。这什么吗?现在我来调用这个方法调用它。调用它,那我们把这个代码呢,拷贝一份,稍加改造一下。这是select use,然后Dollar。
10:03
这些都不要了,我们现在就调用方法,DAO的select在到了那个呢,在这比方说我们这块呢,是李四。是李四。然后这一块是离子student,好,这样好了。然后我来执行代码。代码呢,我们看啊。这块是李四,然后你注意看啊,这块李四有有点问题。我写的时候呢,得这样写,得加一个单引号,因为它这块你可以看到name等于李四,正常它的字算式得加上一个李四啊,得加单引号啊,这样才行啊。在这,我什么家人?这是刀的使用时候你得注意,因为它是一个字,连接的方式。
11:00
就是说你得连着它一个正确与反格式才行啊,你看这样才可以吧。好,那这样有数据没有呢?有没问题。因为这是连接字符串,你得保证你提供这个值得是符合塞口语法的才行,所以用的时候它比较麻烦,好,这是例四。现在这种方式呢,是连接字符串,结果也正确,那它怎么有安全隐患呢?看一下,如果现在我在代码中,我传的这个值呢,不这么写,我这么写,我写了一个分号,然后我写了一个job table job,哎,我写这么一个宇宙啊。当然这语句现在不一定有效,我只是说这个语句如果经过精心的这个调整是可以执行的,看着啊。嗯,我们看它现在变成这个样子了,看到了吧,哎,这是name等于然后job table,当然你可以再改进一下。
12:03
变成什么呢?变成这是这个李四,然后这打一个分号。哎,这么做。后面这个不要了。再来执行。看变成什么样了,看到没?这时候变成两个语句,第一个是查询,第二个是删除了吧,看到了吗。我把这个分号也去掉。再来执行。好,出错了没有不关心啊,我只是关心呢,这个语坠你看。这是一部分,然后job你看现在是不是两条语句了。变成两条了吧,那如果说这个代码假如我调试通过了,是不是会导致我们只能查询之后导致了这个表可能会被删掉啊。那你看这个参数啊,李四这个值就这部分的值,它可能是用户通过我们的JP表单提交上来的数据,那么这个数据如果用户经过这样的模拟。
13:13
可能会导致是这样情况产生呢,那你想如果说你这个数据是由用户提供的,就是说你在互联网上这个用户你也没见过面,你也不知道是谁,他可能是就通过一些这样的一些操作,是会破坏你的这个数据库,或者能够把你数据库中一些。敏感数据获取到啊。比如说他写了这样一个查询,然后呢,他又写了一个select。信号让你的U色是不是都有可能啊,那会造成你的数据有可能会被泄露呗,所以说它就有安全隐患了,所以呢,我们不建议呢,你这么做啊,这就是Dollar一个最大的一个隐患的问题在这。
14:00
那刀是不是没有用呢?有用,当然有啊,有用的地方。Dollar能用在哪呢?Dollar在用的时候,它一般可以来替换列名或者表名。到了。那我们来说这个Dollar啊,Dollar它一般地方是可以替换,可以替换表明或者是列名或者是列名啊,还有情况就是说你能。确定就是说数据是安全的啊,但这时候你可以使用这个刀了,是这样的。Dollar呢,一般替换的是列名或者表名啊,还有就是说你能确定数据安全的时候,可以用这个Dollar啊。可以替换表名或者列名啊,来达到一个效果。
15:00
那这个呢,给大家举个例子啊,来说一下怎么替换列名或者表明呢?
我来说两句