00:00
大家好,我是上硅谷张婉艺学科的韩延冰,接下来和大家分享一道面试题,这道题是买贝体四中,当时体类中的属性名和表中的字段名不一样怎么办?那么这个问题呢?有三种解决方案。我们先把这个现象来演示一下,哎。来,我现在呢,有一个in play类,诶里边呢,这个有ID last name email salary,还有DEPTD有这样一些属性,那么我们数据库里边,诶来看数据库里边的last nameme和我这个play类里边这个last nameme呢,它不一致,我们类里边这个lastname呢,是这个驼峰命名规则,但是我数据库里边这个lastna是下划线,包括最后这个department ID。我这个是de PT_ID但是我in play类里边呢是de p t ID也是驼峰命名规则,那这种情况下,我们在查询的时候呢,就会这个出现last name为now。
01:00
第一批也会闹的,这种情况我们来演示一下。哎,右键。测试。哎,我们发现查询得到的in play对象里边last nameme为now DEP did呢也为now,那对于这个问题我们来怎么解决呢?有三种解决方案,我们来说一下。解决方案。第一个。第一,干什么呢?我们来写circle口句的时候呢,起别名。起别名,好,我们来试一下第一种解决方案,找到我们my be的这个map映射文件,在这块呢,我们不写select,我们写select ID last_name起一个别名,Last name跟我们的类的这个类名呢保持一致,这个类的这个属性名保持一致。好,下一个呢,是这个email salary。
02:01
De PT_IDDEPTD同样给它起个别名,好,我们起完别名之后呢,再来测试一次。邮件。走。诶,我们发现这个时候我们的last STEM呢就有值,而且我们的第一批第一批didd也有值,诶与我们数据库里边这个呢是一致的啊一致的这是第一种解决方案起别名,哎,还有第二种解决方案。第二种解决方案什么呢?哎,在这个my babies。的这个全局配置文件。文件中干什么呢?开启这个驼峰命名规则。怎么来开启呢?来来,找到我们的买贝体的一个全球配置文件,我把这个呢给注释给打开。有一个setting标签里边,我们通过这个settings就可以开启这个同步命名规则,当然啊,这个name呢,这个属性名呢,也是从我们官方文档上面查出来的,它默认的这个value呢是false,我们把它改成true就可以了,但是呢,这个有个前提啊。
03:09
这个开启驼峰命名规则是什么意思呢?我们来看一下啊,开启驼峰,开启驼峰命名规则可以将数据库中的下划线映射为驼峰命名,例如last name_name,可以映射为last name,但是这个时候你要注意,你数据库里边必须得是last name last_name呃,跟我们这个呃。映射为图风命名的时候啊,一定要是这个拉STEM,当然了,你这块如果不是拉,是一个其他的属性,肯定是没办法实现的,所以这一点要注意啊,也就是说我这个数据库里边。是你这个头发,秘密规矩都在。前一个单词跟后一个单词中间用的下划线这个分格,这样才可以,如果你要这块表示一个,其他的是什么脏三啊,李三啊等等,那这个时候呢,他就没办法映射了,所以这一点要注意啊,诶开启了模驼峰命名规则之后呢,他就可以将数据库里边我这个last下文name这个字段呢,给映射为这个last name就是驼峰命名规则,好我们把这个开启之后呢,我们把这个map映射文件呢,再给它修改为select新。
04:08
刚开始我们没有起别名的时候,S拉星的时候呢,拉这个拉name和我们的de p Di呢,是没有值的,那现在我们开启驼风命名规则之后,我们再来测试一次,看有没有值。哎,右键走。诶没问题,诶,那这个时候啊,我们就可以在map映射文件里边来写这个select型,就不需要把每个字段呢都写出来了,这是第二种解决方案,那下面呢,我们来说第三种解决方案。干什么呢?在这个map映射文件。中使用,使用什么呢?这个result type。Map,诶来什么呢,指定这个。自定义来自定义映射。规则。
05:00
好诶,也可以使用这种方式,在这个map映射文件中,什么意思呢?来打开我们这个map映射文件,好,那现在这样啊,我把我这个图风命名规则呢,再给它注掉。不要了。才注掉,那注掉之后呢,我们再来测一下,这个时候呢,我这个map映射文件还是select的星,我们来看现在在测试。Last name和我们的第一批D还有没有值?来注意,现在呢又变成闹了,那现在我们怎么来解决呢?用第三种方案,在map in射文件里面来自定义这个映射规则来找到它,那这块呢,我们就不能用type了,我们得用map,我们先来自定义这个。结果及嗯。自定义,我们称这个什么呢?哎,这个高级映射。高级射怎么来自定义呢?有个标签叫result map。绕。好,这块没有提示啊,没有提示呢,我们先把这个。这个DDDDD文件呢,先加一下CTRLC。
06:03
我来window选最后一项。找到我们的叉ML catalog。那这块呢,这个好像没有了,对吧,我们来编辑一下啊,这是这个map映射文件。编辑一下。哎,找不到了啊,找不到了,我们重新浏览一下啊。把它。来找一下。My beat。资料my bet。D TD map打开。OK。好,就是这个,那这个全局配置文件,我们顺便呢,也给它改掉吧。这个也找不到了,全局配置文件。打开好。OK。OK,应用好,那这个改成功之后呢,我们result,那来看一下,哎,当然啊。
07:01
这这个时候呢,它就有提示了,Map,好tap现在呢,我们同样。来映射为这个in play类型,CTRLC,把这个粘过来,我需要给map呢,给这个map起一个ID,作为一个唯一的标识啊,唯一的一个标识my map,那这块我们就不能用request type这个属性了。来把这个删掉,我们得改成V。Without a map。好,这块呢,就引用我们下边这个my map map map,好,那在这里边我就需要自定义这个映射规则了,来,我们先映射这个主键。来映射主键。怎么来艺视频呢?有一个标签叫ID标签。ID好,里边呢有一个column,你要将数据库里边哪一列映射为哪一个属性,我们要将ID映射为employ里边这个ID,所以呢,我们来自己写这个。
08:01
这是表里边的这个列property,我们要映射为里边哪个属性,当然了是给ID,好,这是映射主键,那下面呢,我们来映射其他列。映射其他链。好来这块呢,用的是result这个标签。来column,哎,比如呢,我们该映射第二个列式last name last_name我要映射为property,我要映射为play里边这个lastname,哎,要给他同样还有几个,我们来复制一下。下一个呢,是email。映射给email。哎,再往下看一下,还有salary和DEPT,所以呢,这块,哎,Salary。
09:00
Salary。好,最后一个呢,我们数据库里边是第1PC_ID。我要映射为,哎,我们这个DPTD。所以啊,这块因为有两个字段不一样,我们数据库里边这个是last下线name是depd下ID,所以这块我就指定告诉他,你把数据库里边的last划线name映射为我的lastname。第1PD_ID映射我的第1PTD,那这样哎,它就能按照我们指定的规则来实现这个映射了,好,那这个写完之后呢,我们来测试一下,看能不能实现我们想实现那个功能,来右键run as。测试一下。诶来看这个时候呢,我们这个last name呢和de PB也有值了诶。哎,我们来看一下啊,最后呢,总结一下,在MY媒体中,当实体中的属性名和表中的字段不一样的时候,我们怎么来处理,有三种解决方案,第一种呢,是我们给写色口句的时候呢,给不一样的这个属性名和表中字段不一样的时候呢,给它起一个别名就可以了。
10:07
起一个边名,这是第一种方案,第二种方案,我们在买背的全局配置文件中呢,开启这个驼峰命名规则,但是有个前提,必数据数据库里边的字段必须得是你这个属性的驼峰命名规则的两个单词中间加一个下划线啊,必须得是这样,如果两个这个名字不挨着,那这种方式是不可取的啊,不可取的。第三种方案,诶,我们在这个map映射文件中,使用这个result map这个标签来实现这个自定义的一个映射规则,也就是我们。称的这个高级映射,好,哎,这是我们这个,呃,这个面试题我们就讲解到这里。
我来说两句