00:00
好,那我们刚才呢,讲了买杯体子该如何动态设置表明,那下面咱们来看下一个问题啊,叫做添加功能呢,来获取自动递增的这个主件。那首先呢,咱们在讲这个问题之前啊,然后我们先来说一下我们当前这个功能的一个应用场景,就是咱们什么时候呢才会用到这样的一个功能,然后咱们再来分析一下这个功能咱们该如何去实现啊,比如说我们现在呢,咱们有一个一对多的表关系,咱们有一个班级表,然后有一个学生表,而我们的一个班级中呢,可以有多个学生,那所以说班级对应学生的话,应该是一对多的关系,OK吧,而咱们的一对多的关系和多对一的关系,我们都要把表关系设置在哪啊,设置在多的这一方,这个大家注意,所以说我们需要在学生表里面来设置它所对应的班级的ID。OK啊好,那下面呢,那我们再往下看,比如说我们现在有这样的一个功能,我要去添加班级信息,那我要添加班级信息的时候,我是不是可以来为当前的班级来分配学生,大家想一下可不可以,比如说我们现在咱们有一个页面对吧?然后这个页面里面呢,咱们在这有一个文本框,这是班级名称,然后再往下,咱们在这儿有一系列的复选框,而这个复选框来表示的是什么?来表示的就是我们当前没有班级的学生,或者说是待分配班级的学生,对吧?然后这个时候大家想在我添加这个班级的时候,我是不是就可以直接为这个班级分配学生信息啊,对不对?比如说咱们为他分配了几个,分配了四个,那当我们现在来点击提交按钮的时候,大家说这个功能该如何去实现呀?
01:50
大家想一下,那首先咱们是不是要来添加班级信息,那班级信息添加完之后,我们是不是还需要来为班级分配学生,而为班级分配学生呢?其实不就是来为我们当前咱们的学生去设置班级吗?因为我们当前咱们的表关系是在我们的学生表中,OK吧?但是大家想我添加完班级之后,如果我要来为学生设置他当前所在的这个班级,就是我们刚才添加的这个班级的话,但是咱们知道这个班级的ID吗?咱们并不知道,那所以说我们现在咱们是不是需要在这中间再加上一个步骤,是来获取我当前添加的这个班级的ID的,然后才能为这些学生去分配啊,才能为我们当前的班级去分配学生,或者说是为学生来设置班级IDOK吧。
02:46
好,那这个功能咱们该如何去实现呢?其实也就是说我们该如何去获取我们当前咱们所添加的这个班级的ID,咱们该如何去实现,那其实之前呢,我们在讲GDBC的时候,大家注意GDBC中本身呢,就有这样的一个功能来获取我们添加的时候自动递增的这个主件该如何去实现,下面大家来看,我在这呢给大家来写一段GDBC的代码,Test public void叫做test gd bc OK,啊行,大家来看,首先呢,我简单给大家写一下这个步骤,class.full name OK,写完之后呢,然后咱们是不是就可以来声明一下异常,然后再往下咱们来获取我们当前咱们的链接对象,叫做driver manager get connection,好,第一个参数,第二个参数,第三个啊好,获取完成之后,咱们就可以来获取我们的预编译对象了,对不对啊行。
03:49
直接把它换成是最大的啊。然后下面呢,大家来看咱们通过connection点,然后prepared statement的,在这咱们可以写一个,写完之后我们是不是就可以来执行咱们的circle语句了,叫做Q的update,比如说这里面咱们来写的就是一个添加的操作,对不对?当我们执行完这个circle之后,下面咱们是不是还可以有一个方法叫做get generated get generated key,大家注意,这个就是来获取自动递增的主键的,它的返回值呢,是一个result set结果集,我们只需要来遍历结果集就可以来获取自动递增的主键了,OK吧,当然呢,在这大家注意,如果你这样去写,那咱们是获取不到的,因为在我们的GDBC中,原生的GDBC里面,它默认是不允许我们来获取自动递增的主键的,那我们需要干什么?大家看一下,在我们当前咱们的获取域编译对象的这个方法里面。
04:52
其实还有一个参数就是什么?就是大家来看一下,在这儿呢,啊,这个东西叫做int类型的auto To Generateerd kids什么意思?是否能够获取自动递增的主键,而这个值呢,大家注意它在我们的statement里面,然后被设置成了一个什么呢?被设置成了一个常量。首先呢,如果我们可以来获取自动递增的主键,就叫做return generate的case,如果我们不能来获取自动递增的主键,那我们在这使用的就是no generated case。
05:27
好,这个大家注意,或者说大家直接写一和二也是可以的啊,行,那所以说呢,我们的买be体封装了JDBC,那所以GDBC中咱们可以来获取自动递增的主件,那我们的my be封装之后呢,买be也是可以的啊,那我们该如何去写呢?首先大家来看咱们先来写一个添加的操作,来咱们在这来添加用户信息,然后呢,返回值咱们就设置为int,或者说大家直接设置为VO啊,咱们叫做insert user。
06:02
好,在这咱们需要传进去一个U的对象,OK吧,好,然后咱们把这个方法复制。然后在映射文件中来写它的SQL语句。这应该是一个添加操作,然后ID呢,要跟方法名一致,那下面大家再来看我们现在该如何来获取自动递增的主键呢?来,咱们先把circle语句写出来啊,Insert into表明其下划线user,然后values括号好,第一个是自动递增的主键,然后第二个应该是咱们的username,然后第三个的话应该是password密码啊,再往下应该是年龄A级。年龄,然后再往下是井号sex性别,再往下是井号emil里面对吧,因为我们传输过来的是一个实体类对象嘛,对不对,而我们要想来获取实体类对象中,然后指定属性的值,咱们只需要通过井号大括号或者说Dollar大括号,通过属性名就可以来获取属性值啊。
07:09
行,那我们写完之后,下面大家再来看,那在这儿我们还需要再来设置两个属性,因为我们现在要干什么呀,我们要来获取添加功能,添加这条数据之后来获取它自动递增的主键,所以说我们现在需要用到的第一个属性就是use generate的key等于true来表示我们当前咱们的这个circle,我们的这个标签中要执行的circle,它使用了自动递增的主键,然后再往下咱们还需要再设置一个属性叫key property。那这个是用来干什么的呢?大家想啊,我现在我是不是在这来执行的circle,那我该如何获取咱们自动递增的主键呢?大家想一下,我们能不能来把这个方来把我们当前自动递增的主键作为这个方法的返回值进行获取啊,可不可以啊,大家注意不行啊,为什么?因为增删改的SQ5句的返回值是固定的。
08:09
就是受影响的行数,那所以说我们现在既然不能把它作为方法的返回值,那我们就只能把我们自动递增的ID,然后来放在我们所传输过来的这个参数的某一个属性中了。这个大家注意啊,因为方法的返回值是固定的。那我们没有别的办法,大家只能把我们的某个数据放在我们所传输过来的这一个用户对象的某一个属性中,比如说那既然咱们是获取自动递增的主键,那不就是ID吗?咱们就把它给放到我们的ID属性里面就可以了。OK吧,好,下面大家来看我们现在咱们来测试一下这个功能啊,来咱们直接一个复制。好,然后这个是我们的啊,不要复制它啊行,然后咱们在这呢,把这个方法来复制一下啊好,这个是我们的testt insert usert insert user好然后首先咱们先来创建一个user对象对吧?User user等于六一个user,好第一个ID,那咱们同样是自动递增对吧?然后第二个的话,好,第二个的话,那我们来写一个张三李四王五,然后密码123,然后性别23,然啊年龄23,性别是男,再往下咱们再写个邮箱123@163.com啊行,那我们写完之后,下面咱们是不是就可以调用map接口中的insert user方法把user对象传输过来。
09:50
OK吧,然后下面大家看我在这当我再次输出U的时候,咱们的U本身它的ID是没有值的,但是现在我执行完添加操作之后,当我再把U的输出,大家会发现它的U它的ID就有值了,为什么?因为我们在买be去实现添加功能的时候,咱们就已经设置好了,要把我们当前自动递增的这个主件来放到我们所传输过来的user对象的ID属性中,那换句话来说,当我们执行了添加操作之后,咱们user这个对象它的ID属性是不是就有值了呀,对吧?好,下边大家看好啊,我们来一个执行。
10:33
好,大家看咱们就执行成功了,我们上面在这这个U的对象ID是不是都没有值啊,但是咱们执行完之后,大家看ID有值没有值了,有值了来现在咱们这里面是不是最大的是六,所以说我们再添加一条ID是不是就是七。对不对,所以说大家看好这个就是来获取咱们自动递增的这个主键啊,所以说呢,咱们在这个地方把这里面的两个属性呢,然后来写一下啊,首先大家看第一个属性叫做use generated case,这东西是干嘛的,是表示啊,或者说设置当前,然后咱们的标签中的circle,然后使用了自增的ID,或者说自增的主键,然后第二个属性叫key proper,那这个东西是干什么的呢?来将咱们自增的ID的值,或者说自增的主见,因为自增的主键它不一定就叫ID,对不对,所以说咱们叫自增的主键啊,然后将自增的主键的值对吧?好,然后赋值给谁呢?赋值给传输。
11:45
到映射文件中,传输到咱们的映射文件中,对吧,然后呢,这个参数的某个属性,哎,这个大家注意将自增的主键的值赋值给传输到映射文件中的这个参数的某个属性,比如说那我们现在获取的是自动自动递增的主件,那不就是对应我们用户信息的ID嘛,所以说咱们只要把它复制给咱们的ID属性就可以啊。
12:18
好,OK,所以说大家要注意我们当前咱们的这个功能啊,它是有一定的应用场景的,OK吧,好,就比如说呀,然后我们刚才给大家举的这个例子,对吧,或者说是我们以后咱们在遇到一对多或者说是多对多的情况的时候,比如说咱们的多对多有中间表对不对,对吧?然后我现在我添加了主表的一条信息,并且我也来为当前的主表分配了我们当前的一个从表的信息,那我现在是不是要把它们两个之间的关系添加到咱们的中间表中,而这个时候我是不是就要知道我刚才所添加的这条数据的ID是什么,因为在咱们的中间表里面记录的信息不多,一般情况下都是咱们这两张表中的主键对不对?好,这个大家注意啊。
13:08
行,那这个就是我们的my be,然后来获取咱们的添加功能,然后自增的这个主件OK啊。
我来说两句