00:00
好,然后下面呢,咱们就来看一下my be获取参数值的两种方式,好然后这个到底是什么意思,然后刚才呢,也跟大家说过,其实就是我们的map接口方法中的这个参数呀,我们在映射文件中该如何来获取,因为大家都知道,当我们去当我们去调用我们map接口中的方法的时候,它会去匹配到一个SQL语句,并且来执行,那所以说我们当前咱们的SQL语句中呢,就可以来获取map接口方法的这个参数中的内容,然后来拼接咱们的SQL语句,那其实呢,我们之前在JDBC的过程中,我们就学习过这样的一个过程,比如说呢,咱们原来的JDBC中,咱们是不是就有两种方式来拼接S口尾句,第一种方式就是普通的字符串拼接,第二种方式呢,是占位符赋持,这个大家还有印象吧?好,然后下面大家来看,在这呢,给大家来写一个方法,叫做A的test,咱们再来回顾一下我们GDBC中是如何来实现的啊,比如说咱们的方法就叫做test gd bc,大家注意这个过程呢,我简单给大家写一下啊,Class for name,然后其中来写的是咱们的驱动名称,也就是com.my circle.gdbc.driver。
01:16
好,然后在这呢,咱们把这个异常给它声明出去啊,OK,然后把它给设置为最大的异常,然后再往下的话,然后我们第二步应该是来创建谁呀,咱们的链接对象,然后用的是driver manager.get connection,其中第一个是咱们的链接地址,然后第二个是用户名,然后第三个是密码。好然后设置完之后,咱们就可以获取到咱们的链接对象,再通过咱们的链接对象,然后来创建咱们的预编译对象,叫prepare statement OK吧,好,那我们在这咱们是需要来写词口语句的,比如说我们这样去写啊,Select星,然后比如说咱们来模拟一个登录的功能,或者说是根据用户,根据用户名来查询用户信息的功能,From t_user,然后well well username等于谁对吧?如果我们现在要用字符串拼接的话。
02:17
比如说啊,大家看好,我们在这儿有一个string类型的username对吧,等于谁等于order me没问题吧?好,然后呢,这个时候如果我们要把这个username给拼接到我们当前的so口语句中,咱们应该有两种方式,首先第一种方式就是简单的字符串拼接,那怎么写?大家说应该因因为我们呢,咱们的SQL语句里面,咱们如果说用到了字符串类型的这个数据,要去拼接一个字符串类型的数据的话,那我们是要加单引号的,那所以说如果我们现在用的是字符串拼接,大家就得手动把咱们的单引号给它加上,然后再把咱们的这个变量呢给拼接进去,然后是加加,把咱们的username给写进来。
03:04
这个大家能看懂吧,那在这咱们就可以获取一个预编译对象对不对,但是呢,如果咱们用这种方式的话,首先第一点大家会发现它非常的麻烦,然后这个地方咱们的单引号是不是需要我们自己手动去加,对不对,而且呢,然后它还会造成circle口注入,所以说我们一般情况下,咱们是不会来使用我们的字符串拼接的,因为毕竟呢,它的缺点呢,也非常的明显啊好,然后呢,这个时候我们就可以来使用什么,咱们是不是就可以来使用咱们的第二种方式,然后叫做什么叫做占位符赋持,大家来看connection.prepared statement,然后把咱们的circle去写一下,Select,然后share from t_user,然后while username,等于问号是不是就可以了,对不对,那当我们来获得了咱们的预编译对象之后,大家来看啊,获得了咱们的预编译。
04:05
对象之后,咱们是不是就可以通过预编译对象中的S的方法,然后来为我们当前咱们所赋的值,来来为我们当前SQL语句中的占位符来进行赋值,对吧?比如说我们现在,那我们的username是不是应该是字符串类型?那所以说我们现在应该用的方法应该是set string方法对不对?然后括号里面的两个参数,首先第一个参数表示的是我们的参数的一个个数,也就是说我们要为第几个占位符来进行赋值,而第二个参数表示的是我们当前咱们要为占位符所赋的值是什么?比如说在这咱们来写个一,然后第二个咱们是不是要把user name给放进去,对不对?那这个时候大家会发现就简单很多了,首先咱们的占位符赋值呢,它可以来解决单引号的问题,大家会发现在这个地方咱们并没有手动加单引号,那换句话来说,在预编译对象通过占位符来进行赋值的时候,它是不是会自动加单引号,大家说是不是?
05:10
哎,这个大家一定要注意啊,好,然后再往下的话,就是我们当前咱们的占位服赋值可以来避免咱们的SQ注入的问题,所以说我们在实现GDBC的过程中,如果遇到的字符串拼接,那我们用的最多的方式应该就是占位符赋值了,这个大家注意啊,行,那我们当前咱们的my be呢,大家来看,咱们就写到咱们的测试类中啊来,然后咱们的my be,然后获取参数值,获取参数值的两种方式。两种方式大家注意啊,好,首先第一种呢是Dollar大括号,哎,然后第二种呢,然后是咱们的井号打括号,然后这两种分别对应了我们刚才所讲的两种方式,第一种大家来看Dollar大括号其实它的本质是什么?它的本质其实就是什么?字符串拼接,哎,字符串拼接,而咱们的井号大括号它的本质呢,其实就是占位符负值,哎,这个大家注意好,那所以说咱们的多大括号,大家想一想,那如果我们在通过买杯体子获取参数值的时候,咱们用了多大括号,那大家都需要注意什么问题?
06:29
首先第一个问题是不是可能会造成circle口注入,然后第二个问题,然后是不是可能会出现什么?然后咱们的单引号大家是不是都需要手动去拼接,对不对?然后而咱们的井号大括号相当于占位符赋值的话,那咱们是不是只需要把我们所需要获取的值放在相对应的位置上,是不是就可以了,对不对?单引号问题需要处理吗?不需要,然后咱们的这个circle注入的问题会出现吗?也不会,所以说大家看好my be。
07:00
获取参数值的这两种方式啊,然后我们以后能用井号大括号。那咱们就不用do打括号,但是呢,咱们也有一些circle,我们是必须要使用这个do打括号的,这个大家注意好,OK,那这个呢,大家一定要看好了,我们当前井号和井号,大括号和多大括号,它们两个之间的区别,它们分别来对应了我们JDBC中最原生的这两种方式,一种是字符串拼接,然后还有一种呢是占位符赋值,那当然呢,在我们使用这两种方式的时候呢,咱们也有各种各样的情况,比如说呢,如果我们传输过去的是单个的字面量类型的数据,然后我们应该怎么来获取,如果我们的map接口中的方法,然后它是多个字面量类型的数据,我们该如何获取?如果我们传输过去的是一个map集合,该如何获取?如果我们传输过去的是一个什么?如果我们传输过去的是一个数组,是一个集合,该怎么过去?大家注意,我们只知道这两种方式不行,我们还需要来看各种各样的。
08:08
情况,然后情况不一样,那我们当前咱们这两种方式的用法也是不一样的,这个大家注意啊,好OK。
我来说两句