00:00
来啊,那么这样的话呢,我们就把第一个对象啊,就是要给大家去介绍的JD bc template就给大家介绍完了啊,那么其实我们使用这个对象呢,就已经完完全全可以进行我们JDBC的一个开发了啊,就是这个DAO的一个开发了啊啊那么这个里面的话呢,我在word里面是吧?呃,还提供到了一个东西叫做什么呀,句名参数的一个JD v template啊,本来这个是不讲的是吧,但书不写出来了,那就得讲啊啊,要不我说什么你也不信是吧?来吧,那我们就花点时间把它说一下啊,这个东西还挺有意思啊,看一下呃,有一个最零参数的JD的参,它是个什么东西呢?啊,这个句这一句话你就不用去看了哈,因为我们也不知道什么have ne的HQL对吧,你就直接来听我讲,呃,现在我们写搜狗语句的时候,我的参数是不是都是通过站位符问号来去做的?OK,那我们就来分析这个问号。
01:01
啊,它有什么好的地方,有什么不好的地方,好的地方的话就是什么呀,这种方式是通过预变异的,可以避免一些搜狗注入是不是啊,OK,那不好的地方是什么呢?就是它那个问号吧,它要严格的去区分什么呀,你问号的一个什么位置顺序,嗯,大家来想一想,比如说我在一个搜口语句里面,我有这个五六个问号,那么每一个问号它其实主要都要去对应一个具体的字段吧,我们将来在给值的时候,我是不是就得根据你问号的顺序来去给你这个值啊,大家来想一想,你在设置那个问号的值的时候,第一个问号不就是一吗?第二个问号不就是二吗?第三个问号不就是三吗?是不是?OK,它是有这个顺序的,那我们再来想,假如说我的这个问号呢,哎,颠倒了一下顺序,比如说跟我这个前面的那个字段啊,对应的那个顺序呢,颠倒了一下了,那我在给值的时候,我是不是也要对应的去把这个顺序给它颠倒。
02:01
下能明白我说的意思吗?对吧?哎,就是反正你就记住问号写到,那它是要什么严格的去注意它的什么位置的,就是它这个顺序是什么,我们得去注意的,好那么这个死破就说了,那么假如说你这个问号特别多的情况下,你这样操作起来就不方便了,你得去死死的盯住那个位置来去操作,听懂了吧,所以说呢,他为了去解决这个问号,很多的情况下,我们得去严格的按照位置来去给值的啊这个这个问题它怎么解决的呢?它通过一个聚名参数来帮你去解决,那这个聚名参数的语法是什么呢?注意就是我们再在SQL语句里面写的时候,我们就不写这个问号了,而是写一个冒号,冒号后面呢,你再随便写上一个参数名字,注意这个参数名你是随便去定义的,这个就叫做一个句名参数,就是具体名字的一个参数来代。
03:01
定你之前的那个问号能明白吧,OK,那么写成这样以后呢,我们将来给它赋值的时候,就是怎么给它传值呢?诶,我们可以通过一个map来传值,那么在map里面呢,我就可以把map里面的K啊,就使用你这个居名参数,而K呢会对应一个V,将来这个缀名参数的这个模板,它就会把这个V啊,根据你具体的这个K就给到你具体的这个哎,占位服这个位置了,这样的话呢,我们就不必要再去管你这个参数在哪个位置,我只需要去对你的名字就行了。能明白这个意思吧,OK,这是它的第一种用法啊,好吧,那我们现在把第一种用法呢给大家去写一写,研究研究,然后呢,我们再看看能不能有更好的一些用法,好来,接下来我们就来做,呃,那么现在我们用到的这个G民参数的GDPC模板,它的全名叫做name的parameter GDP temperaturelate,我们在使用之前呢,也需要啪达配到我们的LC容器中,就是跟那个gdb template是一样的,听懂了吧?来,我们来把它配一下,好回到我们的这个配置文件中啊,找到我们的AJDDC啊在这,然后呢,这里面我们来配置一个叫做name的是吧,J d bc temperature啊,这个家伙咋配啊,一样的道理嘛,BID,好,Class name的j dvc table,来把它写到这名字比较长啊。
04:38
好,但是配置起来的话都是一样的,OK,那我们把这个写出来以后,大家注意了哈,你看我这写出来以后,他居然在报错对吧,报错的话我们就得看了啊,报什么错呀,他说我找不到一个零一个参数的构造器。啥原因大家知道吗?因为你这么写的话,默认情况下是不是要通过那个无参构造器去创建对象的,但是人家说我找不到无参数的构造器,那么也就意味着这个类它没有帮我们提供无参数的构造器,那如果说你想把它创建出来,你是不是就得使用它的有参数的构造器了吧,对不对?诶,那我们就要去看一看了啊,那么在这个里面的话,我们点进来,点进来以后的话呢,你可以不用去看具体的类啊,你就直接找到谁啊,找到我们的嗯,跑哪去了,关了是吧?好找到我们的afterline是吧,那么这个地方的话,我们就能看到带C的,这不就是构造器吗?
05:37
看到没有,诶,他就支持我们通过构造器的方式去注入一个data source,好,那么其实我们也必须要给人家去注入一个数据源嘛,就跟它是一个道理嘛,对吧,只不过呢,它不支持在的方式了,它必须得使用构造器的方式了,来construct up ref就等于什么呀,Data source这就可以了。明白了吧,所以说这个地方我们需要特殊的注意一下啊,它没有帮我们提供无参数构造器,因此我们必须得按照什么呀,有参数的构造器这种方式来去啊,创建这个并对项啊,这个给大家说一下,那么有了以后呢,我们在接下来在我们的测试类里面,注意我们还是一样的道理,先把它定义出来,Name叫para major JD bc complete啊,那我就叫什么呀,NPGT吧,简简写一下好吧,写那么长也麻烦啊,然后那么哎,NBGT啊,然后呢,把这个呢也给它初始化一下,NBGT等于什么呀,Ctx。
06:39
Get b啊,我们叫什么呀?Name的para jdbc哈,终于写完了class把它写到这看明白了吧,能看懂了吧?OK,有了它以后呢,那么接下来我们在最下面啊给大家去测试,我们来测试我们的啊聚名参数的模板类啊居名参数模板类模板是吧啊模板类啊来吧,我们来写一个方法public啊,Word ts,我们的啊叫做什么NPGT吧,好吧,就它来加上一个at ts呃,那我们也是来做一个插入操作啊,来写一个搜狗L语句,呃,那么这个搜狗L语句在写的时候大家要注意了啊insert into,然后呢,T。
07:39
然后employee这里面我们要给last下划下name email,真的插入数据value,注意以前我们写的都是问号吧,对不对?那现在呢,注意不写问号了,而是通过一个冒号,后面的这个名字是你随便写的啊,比如说last name,我就叫LN email的就是冒号,比如说em可以吧,真正的比如说冒号GE,嗯,写好了,看到了吧,那么这个名字很明显就是我随便写的了,那么接下来我们再去做的时候,大家注意啊,你看我的NPGT点啊,它里面肯定也有update,你看我们在调方法的时候呢,第一个就是支持我们传个搜索语句,传一个map,对吧,那你就去想这个值我应该怎么给它呢?我们就需要通过一个map来去给,好,我们就调第一个方法来叫做什么para map,那我们就把这个map给它创建出来字符串。
08:39
类型的object类型的什么map等于new一个哈西map OK,那这里面的话呢,我们来看看应该怎么去写啊,那我们在这个map里面呢,我们只需要使用什么呀?Map put,我们只需要使用句名参数来当成什么呀,当成K,然后呢,你再给上一个具体的值,能听懂吗?那么将来他就会把这个具体的值呢,根据你的这个K找到你的居名参数,把这个值就给你放到这个位置了,听明白了吗?这样的话,大家想一下,我还需要在赋值的时候去关心你这个顺序是什么吗?需不需要,不需要对吧?我只需要对你的名字就行了。
09:30
听懂了吧,哎,对,你的名字就可以了啊好吧,来,那我们就写一下啊啊,我们再来写个啊,写个什么老师啊啊不要写老师了是吧,随便写个吧,写个啊这怎么出来了啊,写个这里面有谁了,看看哈,好多重复的数据了是吧,Tom啊,那我就给个死对头是吧,Jerry是吧,OK,来,再来写part map.put比如说email,那我就是em吧啊那就是Jerry at特新浪。com随便写一个啊好,Pma map put,然后呢,再写个GE啊那么这里面呢,我们写的就是啊比如说零吧女的能看明白吗?同学们可以吧,然后呢,诶,你直接把这个map呢,就给到他这个什么方法里面,那么他就能帮我们完成一个插入操作了,来吧,测试一下。
10:28
好,这是没有任何问题的,我们再回到数据库里面,我们来刷新一下,大家来看这个数据是不是进来了,嗯,没有任何问题吧,OK,好,那么我们把这个说完以后呢,我们再来分析分析啊,呃,你说我们现在写的这个东西好还是不好?肯定是有好有不好的地方吧,对吧。好在哪,不好在哪,好在好在就是不需要再去记那个站位服的顺序了,对吧?但是不好的地方就是,假如说你看了啊,我这个比较少的情况下,如果你这么做的话,其实啊也比较麻烦,你还得去创建一个map啥的,对吧?像我以前的话怎么做呀,我就直接把你的这个值往这里面一放,是不是就可以了,对吧?就是相当于现在我们这种写法呢,相对于来讲呢,比较啰嗦那么一点点了,对不对?哎,比较啰嗦那么一点点了啊,但是我告诉你这种用法呢,不是我们最终的一个用法,接下来我要给你讲的才是我们最终的一个用法,对吧,很霸道的啊,我们来看一下,那么首先呢,要给大家分析一下,我们实际上在这个DAO中操作的时候,比如说我的DAO中,我提供了一个插入的方法,那么这个方法我一般都需要让你传入了一个具体的对象吧。
11:51
你想想是不是啊,我们在设计这个do方法的时候,比如说一个插入方法,我的参数是不是就是一个具体的对象,将来你调我do的时候,你想插入什么数据好,你把那个对象给我传过来,是这样的吗?能理解什么意思吗?不理解啊,可以的吧,对吧?就是比如说我一个对象有四个参数行吧,一个对象有四个这个属性吧,那你讲,呃,如果说我做一个插入操作,我去调这个do方法了,那你这个do方法在设计的时候,你是宁愿设计成一个对象类型的参数呢?还是说把那四个参数都写到哪?
12:28
对对象怎么写啊,肯定传个对象方便吧,对吧,你面向对象,面向对象嘛,你肯定要封装成对象去传了,OK,所以说我们就来模拟什么呀,模拟当你传给我一个对象的时候,我应该怎么去操作,好说是接下来我们再来写啊好test NP GT啊,比如说object,你直接给我传一个对象过来,好,那么我们就来什么呀,模拟好直接传入就是模拟什么呀,模拟我们的这个呃,Service城吧,好service层啊,直接传递给DAO成一个什么呀,具体的啊,这个对象好呃,那么这个对象的话呢,我们先来自己写一写啊,这是一个引employ易对象,好等于你有一个不一对象,那么这里面的话呢,我们好像没有构造器是吧?来,我把构造器加一加,加上一个构造器啊,加上一个构造器。
13:28
OK,来都把它加上,然后呢,注意一定要提供上一个无参数的啊,加上以后呢,我们再回到这个位置,我们来去调用一下这个构造器,好ID我不想给你,对吧,以数据库去维护去,然后名字呢,好,我们再来随便写一个啊嗯,看看这里面。啊,三风吹山对吧,那写个无忌是吧,好吧,啊,写个他啊,然后email呢,我们就叫什么张无忌是吧,爱新浪调com是吧,好,真的呢,就是一个伊朗,OK,那你看我这个对象是不是跟你一样写好了,注意了啊,这就是我模拟传递给我DAO的一个对象,那么在DAO里面来讲啊,就是在什么在DAO的DAO的什么呀,这个插入方法中啊,那么其实我们现在就可以使用一个匿名,呃,这个句名参数的这个模板类直接去完成了啊,那如果说你要是根根据这种方式来做的话,那么你需要先把这个对象呢,给它拆分成一个Mac集合,对吧,就是把这个对象拆出来,重新构造一个Mac集合,往里面传还是比较麻烦的,我们这个地方有一个特别好用的办法,大家注意了啊好,先写一个搜高语句,搜高语句的话呢,我暂时还是写成它。
14:47
能看到吧,还是写成它,然后呢,这里面我们可以直接怎么做呢?注意了啊,我可以直接通过一个NP gt.update好,这里面大家注意它支持我们去传一个叫做circle source这个对象大家能看到没?Circle permit source看到没有?翻译一下什么意思啊,So,参数的一个来源吧,对不对,那就意味着我直接给你传一个那个对象,只要那个对象里面是有这些值的,是不是可以了?
15:19
能听懂吗?所以说你看了哈,现在我要做的就是我去插入的时候给他一个p source,那么这个类型是叫做什么circle para什么呀,好circlemeter source就是它好,然后呢,比如我也叫做什么para source好,但是呢,我们来看哈,这个东西啊,它也是一个接口,所以说不能直接用,我们在下面呢,就看到一个并property so permit source,看到没有什么东西啊。是不是并对象的一个什么属性所对应的这个so source吧,对吧?OK,那也就什么意思呢,我直接给你一个并对象,然后呢,你从并对象里面去取我的这个几个值是不就行了,能明白什么意思吗?来,那你就看了哈,我要怎么写的呢?我去new一个叫做b pro,然后呢,So permit source,然后呢,把我们传过来的employee对象放进去,然后呢,再把这个放到这儿,那么其实它就能直接帮你完成一个插入操作了,但是现在如果你要这么做的话,我们必须要去注意一个问题,什么问题呢?就是我一定得保证让spring呢,能通过这些key到我的对象里面找到对应的那个值,但是你现在这么做绝对是不行的,我们就有一个要求,你的句名参数必须要跟我的属性名是。
16:51
一样的,能理解什么意思了吗?那么这样的话呢,他就能拿上这个值,到我的这个对象里面去找到它,拿上这个值呢,到我的这个对象里面去找到他,拿上这个名字呢,到我的这个对象里面去找到他了,我们就不需要再去封装那个map了,能明白了吗?那么大家来想一下,假如说这种方式是可以的,那么它是不是还是很有意义的呀,对吧?因为我们最终将来肯定是直接给你传对象的,对吧?哎,所以说我们来测试一下吧,啊,他肯定是没有任何问题的,好,成功了,成功以后我们来看这个位置刷新一下,大家来看这个数据是不是进来了。
17:34
明白了吗?所以说呢啊,如果说就拿上面的这种方式来讲,它可能不是那么完美,但是呢,下面的这种用法来讲,是不是就特别好用啊,对吧,你就想嘛,我们的三层里面,比如说这是我的呃,Service层,这是我的DAO,在service里面呢,接收到一个对象,对吧?把这个对象呢,直接传到我的DAO里面,那么对于DAO的这个方法来讲,我就直接基于你这个传过来的对象去操作,是不是就可以了。
18:03
还需要再去封装这个map吗?不需要,听明白什么意思了吧?OK啊,所以说呢,这就是我们居民参数的一个模板类啊,给大家去说一下,学会了吧,OK。
我来说两句