继上次阶段测试最低分85分,我又一次刷新了自己的最低分数线,这次才考了72分,比平均分还低了1点多分.粗略看了一下,感觉有的地方老师还多给分了.我觉得我该面壁思过,奈何还有一堆代码等我写!唉,我太难了.
1.Mybatis常用的动态SQL的标签有哪些
我的答案:(满分10分,得分8分)
1.if
2.where
3.set
4.foreach
答案解析:
if,choose,when,otherwise,trim,set,where,foreach
个人批注:emmm,这个题的答案其实除了那个trim没记住之外,其实别的我都记得,不过我写的时候只写了四个老师讲的,最常用的.emmm,按照答案来看的话,扣分也是应该的.
2.Mybatis的Xml映射文件中,不同Xml映射文件,id是否可以重复
我的答案:(满分10分,得分6分)
不同的映射文件,id是可以重复的.
因为这里映射文件的id,指代的其实是mapper接口中的方法名.既然是不同的映射文件,那么肯定也是不同的mapper.后续调用的时候,是不同的对象去调用各自的方法.即使方法名相同也无所谓.
答案解析:
不同的Xml映射文件,如果配置了namespace,那么id可以重复;如果没有配置namespace,那么id不能重复.
个人批注:这个题真的是我理解有问题了.因为老师一开始写这个映射文件的时候,就全都写了namespace,我就以为这个namespace是必须写的,只有写了namespace,才能对应上那些类和方法.刚刚问了下助教老师,其实这个namespace是可以不写的,不写的时候,也可以直接读到id值.这个时候,如果两个映射文件都没配置namespace,又有重复id,那就很尴尬了,两个一样的不知道用那个.
3.当实体类中的属性和表中的字段名不一样,如何实现对象的封装
我的答案:(满分10分,得分6分)
使用resultMap对对象进行封装
<resultMap id="resultMap的值">
设置属性名和对应的字段名
</resultMap>
写返回参数的时候写resultMap="resultMap的id值"
答案解析:
1. 通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致
2.通过<resultMap>来映射字段名和实体类属性名的一一对应的关系
个人批注:这个题的两种方式其实我都知道,不过一开始纠结于,问题中的"如何实现对对象的封装".一开始就觉得Java和MySQL是两块东西,而我们的对象封装是在Java里面学的.封装成resultMap显然实现了对对象的封装,而sql语句起别名的方式总觉得差点儿意思.所以就没写.
但是刚刚问了助教老师,突然明白.两种方式其实本质是相同的,不过就是一个写了一个resultMap,到插入语句执行的时候其实跟起别名的方式没什么区别.只是起别名的方式直接就起了别名.而resultMap是先写了一下,然后运行的时候其实是一样的.就是一个是显式封装,一个是隐式封装而已.
4.ResultMap和ResultType的差别?
我的答案:(满分10分,得分7分)
当实体类中的属性名和数据库表中的字段名一致的时候,可以使用ResultMap,也可以使用ResultType.
当实体类中的属性名和数据库表中的字段名有不一致的地方的时候,只能使用ResultMap.
当有扩展属性的时候,也只能使用ResultMap
答案解析:
两者都是表示查询结果集与java对象之间的一种关系,处理查询结果映射到java对象.
resultMap:表示将查询结果集中的列一一映射到bean对象的各个属性.
ResultType:表示的是bean中的对象类,此时可以省略掉resultMap标签的映射,但是必须保证查询结果集中的属性和bean对象类中的属性是一一对应的,此时大小写不敏感,但是有限制.
个人批注:emm,虽然知道是怎么回事儿吧,但是自个儿写就是写不出来,啧啧啧,多看看吧!
5.JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?
我的答案:(满分10分,得分10分)
1.JDBC编程会提高程序的耦合性
2.JDBC编程会提高代码的重复性
3.JDBC编程不利于事务控制
4.将数据库查询语句跟Java代码写在一起,程序的可读性差
5.不便于维护
MyBatis设计好了一个框架,将数据库查询语句与Java代码分开.写在一个xml文件中,提供了一个mapper层去实现对数据库的增删改查.便于维护和修改.提高了程序可读性,并且提供了事务控制的方法.
答案解析:
1.数据库链接创建,释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题.
解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接
2.Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码
解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离.
3.向sql语句传参麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应.
解决:Mybatis自动将java对象映射至sql语句.
4.对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象(---POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称---)解析比较方便.
解决:Mybatis自动将sql执行结果映射至java对象.
个人批注:emmm,这个答案也太长了,不过理解起来倒是不困难,我虽然写的比较宽泛,老师也给了满分,还可以吧.就是答案的第一个到底是连接还是链接啊,有没有区别,可惜助教老师已经走咯,明天再问吧!
6.常用的动态sql语句标签有哪些?
我的答案:(满分10分,得分8分)
1.<select></select>
2.<delete></delete>
3.<update></update>
4.<insert></insert>
答案解析:
if,choose,when,otherwise,trim,set,where,foreach
个人批注:这个题我真的无语了,我翻来覆去的看了好几遍,除了第一题写的是SQL,这个写的是小写的sql,完全没区别好吧.但是觉得老师怎么会出两个重复的题呢,答案肯定不一样,所以瞎写了一个......,其实跟第一题就是一样,虽然我写风马牛不相及,但老师给了满分.估计都给了满分,啧啧啧.
7.什么是Maven本地仓库?Maven到底有哪些仓库?它们有什么关系?
我的答案:(满分10分,得分8分)
maven的本地仓库:存储在本地磁盘上的仓库,默认路径在c盘,可以修改
maven的中央仓库:存储在服务器上,所有仓库中的文件都来源于此,是最核心的仓库
私服:一些公司内部的仓库
私服与本地仓库中的文件都来自中央仓库
加载某个依赖的时候,会先从本地仓库中寻找,本地仓库没有,会从私服寻找,私服没有,会去中央仓库下载
答案解析:
本地仓库路径配置(????这什么鬼)
所以本地仓库就是相当于加了一次呢jar包缓存,先到这里来查,如果这里查不到,那么就去私服上找,如果私服也找不到,那么去中央仓库去找,找到jar后,会把jar的信息同步到私服和本地仓库中.
私服,就是公司内部局域网的一台服务器而已.
中央仓库:该仓库存储了互联网上的jar,由Maven团队俩维护.
个人批注:这个题我答的还行,我只能说理解万岁了.不过有一些小细节没有理解到位.多看看吧.
8.maven项目中servlet和jsp的依赖范围是哪个?它有什么作用?
我的答案:(满分10分,得分0分)
servlet和jsp的依赖范围都是compile
它的作用是指,servlet和jsp在编译时需要,运行时不需要,因为服务器中有servlet和jsp
答案解析:
provided:编译期有效,运行期不需要提供,不会打入包中。
个人批注:刚看到这个题,愣是没想起来这东西还有依赖范围??????黑人问号脸!懵逼了一下,反应过来是scope,复习的时候,主要看了mybatis的内容(虽然也没记住多少),maven粗略的过了一下.这个题我记得老师讲过,但是只记得是编译时需要,运行时不需要.忘了scope对应的那个值了.在苦痛与挣扎中,我成功的选择了错误答案.唉,是我菜,是我菜.但是老师给0分,也太无情了吧,唉~.蓝瘦,香菇!
1.Maven坐标是那三个要素
我的答案:(满分10分,得分10分)
1.groupId 组Id
2.name 项目名称
3.version 版本号
答案解析:
groupID,artifactId,version
个人批注:一看到这个题,我内心就在想,这个我知道我知道我知道,然后死活想不起来中间那个是什么.考完试再看,唉,是我英语烂,当时看着不认识,也没在意.现在我记住你了!
10.Mybatis使用mapper接口开发,需要遵循的一些约束条件
我的答案:(满分10分,得分10分)
1.命名空间namespace的值必须是mapper接口的全路径名
2.增删改查方法的id必须是mapper接口中对应的方法名
答案解析:
(全限定名有绝对路径的意思,比如一个文件file的存放路径,其绝对路径可能是/usr/local/sbin/file; 这个名词也用在其他地方,比如Java类包的定名:com.linux.struct.sort.bubblesort,从最原始最上层的地方援引到具体的对象,这就是全限定名了)