00:01
那么呢,我们这个参数封装,我们总结起来,呃,就是这句话,哎,我们说参数多的时候啊,贝蒂斯会把它封装一个map。那我们为了不混乱呢,我们可以用an p这个注解来指定封装时使用的K,这样我们井号大括号就可以取出map中的值了,也就是说MY贝蒂它最终用的这些参数,哎,多的话它就是一个map,哎,这块大家注意一下。接下来呢,我们再来说一个重要的事情。咱们这个参数的。数值的获取。那么呢,我们之前一直看的是一个井号大括号,井号大括号可以。啊,可以获取map中的值。值啊或者呢,咱们这个PU对象属性的值。来咱们一直是井号大括号进行取值的。
01:03
那么对于马贝蒂斯来说,它还支持另外一种取取值方式,叫Dollar打号。它呢,取值效果跟井号大括号都是一样的,但是呢有什么区别,我们来可以看一下。区别。那么呢,我们就直接来演示,我来来到这个map映射文件中。好,那么这里边儿呢,我把参数封装在map里边,我来把第一个ID,我用Dollar符大括号取出来。那么第二个呢,用井号大括号取出来。我来运行我们的测试方法。看下有什么效果走。哎。效果呢出来了,他要查一条数据,呃,这个数据二号是没有没有是没有,但是呢,大家来看这个查询语句。
02:01
我们ID是用Dollar大括号取的值,那么这一块值呢,会直接取出来放在SQL语句上。而呢,我们用井号大括号取得值,诶,你看last name用井号大号取得。我们这一块井号大号取的,它在这一块会是我们之前学DBC的站位服务。而刀乐福大括号它在这取着,直接就是S口拼串,所以说呢,这就是这两个取值的区别,那么除过这个区别,哎,他们在没有什么其他方面的区别。大号。他呢?它是以咱们这个呢,预编译的形式。将咱们这个呃,参数设置到。语句中。哎,这就像我们原生DBC使用咱们这个。
03:04
这样操作一样。而我们这个德福大括号大家刚才也看到了。我把。这个SQ语句拿过来,我们放在这儿。好,这是这个蛇,这是我们后来改的。SQ映射文件。这两个对比,也就是说呢,我们这个Dollar大括号取的值直接就平装在矩上。取出的值。直接哎拼装。在咱们这个circle语句中。比方说呢,如果是井号大括号,那预编译的形式呢?啊,我们这个就能防止SQ注入等一些问题。而我们这个Dollar大括号,因为它是直接拼circle的,所以说呢,没法啊,会有安全问题。
04:04
没法防止我们这个色口注入。那么既然是这样,以后啊,同样这么说,那一定是都使用井号大括号吗?哎,不是的,大多情况下。情况下。我们。取参数的值。都应该。去使用。咱们这个井号大括号。那么这个井号大括号呢,就是对于这些条件的取值查询条件里带的这些值。那么在某些情况下,比如比如我们项目中呢,可能会有分表。分表操作分库分表,那么这样的话呢,查询我们这个表。少来。三乱声。哎,假设呢,我们这是这是一个财务,这个财务表里边呢,保存了我们公司,诶员工每一年度的这个薪水,那这样的话呢,我们希望这一块保存的时候,财务表按年,如果按年。
05:13
按照。咱们这年份。年份分表拆分了。那这样的话呢,我就想动态的查出我们这个表,比如呢,它是薪资表。但是这个薪资表呢,我一六年那就是2016年的这个薪资表,一七年就是2017的薪资表。那这样的话呢,我们表明这一块它没法,哎进行预编译的,你这块不能写井块打括号。啊,即使我们原生circle口这块也不能是有占位符的,所以说呢,对于我们原生色口不支持占位符的地方。原生。Circle支持咱们这个原生,咱们这JDBC。
06:00
不支持站位服的地方。我们就可以使用,哎,咱们这个Dollar符大括号进行取值,比如我们这个表,哎,我这个Dollar符大括号,我把哪一年我传进来。哎。我把这个年份传进来,然后呢,表明我给它拼上,哎,我们这个salary。薪资表,然后呢,V尔还是我们后来遗遗传条件就说呢,后来我们这个大课号,哎,可能用于分表操作,那么呢,还有我们这个排序哎,比如s select芯等等等等,只要是。原声也不支持预变异的。然后呢,我们这个order。奥办哪个字段呢?哎,我们假设把这个字段名传过来,哎,比如我们这个,哎。Name。然后呢,把我们这个呃,要排序的升序还是降序传过来,Decc或者AESC,把我们这个order顺序传进来,这样的话呢,我们都是进行直接取出来拼在口上,因为这一处即使是原生的JDBC也不支持站位符,那么这一块呢,大家注意哎,比如分表。
07:20
还有啊。分表啊,咱们这个排序哎,排序等等啊,各种不支持的都可以这么来做。我们就把刚才的这个方法啊,我们再改造一下,让它的这个表名我们也动态取值出来好。这个表明呢,原来的ID我们用Dollar大括号取值了,Last name井号大括号取值了,那这块表名我也给你动态传过来。怎么取值呢?假设我们先用井号大括号来看一下。好,我们呢,就给map中放一个参数table name来在这测试。
08:04
这个map我们来给里边再放一个。表明。这表明呢,就是我们要查询的TBL1这张表。好,我们现在来看。这种方式行不行?走。哎,出错了,出错呢,是咱们这个circle sentence error啊,语法异常。来到我们这个插麦文件中,那么我们说井号、大括号,它只能取出参数未知中的值进行予以变异,而这一块它不是参数,对于SQL语句来说。它就是一个普通的位置,不是参数好,那么呢,我们这一块呢,就用Dollar大括号进行取值。再来。测试走。现在就是成功的表明拿到剩下的也都OK,所以说呢,大家在后边使用两种取值方式的时候注意一下,如果原生接DBC也不支持预变异的位置,比如这些表明排序等等,那么呢,我们就用Dollar大括号进行去。
我来说两句