Mybatis十八连坏问 java 招聘面试

日期:2021-04-05 类型:科技新闻 

关键词:培训互动游戏h5,微信群互动大转盘,h5安全互动游戏,报名抽奖能互动的,微信互动游戏摇一摇

Contents

1 1、#{}和${}的差别是啥?2 2、Xml投射文档中,除开普遍的select|insert|updae|delete标识以外,也有什么标识?3 3、最好实践活动中,一般一个Xml投射文档,都是写一个Dao插口与之相匹配,我想问一下,这一Dao插口的工作中基本原理是啥?Dao插口里的方式,主要参数不一样时,方式能轻载吗?4 4、Mybatis是怎样开展分页查询的?分页查询软件的基本原理是啥?5 5、概述Mybatis的软件运作基本原理,及其怎样撰写一个软件。6 6、Mybatis实行大批量插进,能回到数据信息库主键目录吗?7 7、Mybatis动态性sql是干什么的?都是有什么动态性sql?能概述一下动态性sql的实行基本原理不?8 8、Mybatis是怎样将sql实行結果封裝为总体目标目标并回到的?都是有什么投射方式?9 9、Mybatis能实行一对一、一对多的关系查寻吗?都是有什么完成方法,及其他们中间的差别。10 10、Mybatis是不是适用延迟时间载入?假如适用,它的完成基本原理是啥?11 11、Mybatis的Xml投射文档中,不一样的Xml投射文档,id是不是能够反复?12 12、Mybatis中怎样实行批处理命令?13 14、Mybatis中怎样特定应用哪种Executor实行器?14 15、Mybatis是不是能够投射Enum枚举类型类?15 16、Mybatis投射文档中,假如A标识根据include引入了B标识的內容,我想问一下,B标识可否界定在A标识的后边,還是说务必界定在A标识的前边?16 17、概述Mybatis的Xml投射文档和Mybatis內部数据信息构造中间的投射关联? 1、#{}和${}的差别是啥?

答:${}是Properties文档中的自变量占位性病变符,它能够用以标识特性值和sql內部,归属于静态数据文字更换,例如${.mysql.jdbc.Driver。#{}是sql的主要参数占位性病变符,Mybatis会将sql中的#{}更换为?号,在sql实行前会应用PreparedStatement的主要参数设定方式,按顺序给sql的?号占位性病变符设定主要参数值,例如ps.setInt(0, parameterValue),#{item.name}的赋值方法为应用反射面从主要参数目标中获得item目标的name特性值,非常于param.getItem().getName()。

2、Xml投射文档中,除开普遍的select|insert|updae|delete标识以外,也有什么标识?

答:也有许多别的的标识, resultMap 、 parameterMap 、 sql 、 include 、 selectKey ,再加动态性sql的9个标识,trim|where|set|foreach|if|choose|when|otherwise|bind等,在其中为sql片断标识,根据 include 标识引进sql片断, selectKey 为不兼容自增的主键转化成对策标识。

3、最好实践活动中,一般一个Xml投射文档,都是写一个Dao插口与之相匹配,我想问一下,这一Dao插口的工作中基本原理是啥?Dao插口里的方式,主要参数不一样时,方式能轻载吗?

答:Dao插口,便是大家常说的Mapper插口,插口的全限名,便是投射文档中的namespace的值,插口的方式名,便是投射文档中MappedStatement的id值,插口方式内的主要参数,便是传送给sql的主要参数。Mapper插口是沒有完成类的,当启用插口方式时,插口全限名+方式名拼凑标识符串做为key值,可唯一精准定位一个MappedStatement,

举例说明:
com.mybatis3.mappers.StudentDao.findStudentById,能够唯一寻找namespace为
com.mybatis3.mappers.StudentDao下边id = findStudentById的MappedStatement。在Mybatis中,每个

Dao插口里的方式,不是能轻载的,由于是全限名+方式名的储存和找寻对策。Dao插口的工作中基本原理是JDK动态性代理商,Mybatis运作时候应用JDK动态性代理商为Dao插口转化成代理商proxy目标,代理商目标proxy会阻拦插口方式,继而实行MappedStatement所意味着的sql,随后将sql实行結果回到。

4、Mybatis是怎样开展分页查询的?分页查询软件的基本原理是啥?

答:Mybatis应用RowBounds目标开展分页查询,它是对于ResultSet結果集实行的运行内存分页查询,并非物理学分页查询,能够在sql内立即撰写含有物理学分页查询的主要参数来进行物理学分页查询作用,还可以应用分页查询软件来进行物理学分页查询。分页查询软件的基本概念是应用Mybatis出示的软件插口,完成自定软件,在软件的阻拦方式内阻拦待实行的sql,随后重新写过sql,依据dialect土话,加上相匹配的物理学分页查询句子和物理学分页查询主要参数。

举例说明:select from student,阻拦sql后重新写过为:select t. from (select * from student)t limit 0,10

5、概述Mybatis的软件运作基本原理,及其怎样撰写一个软件。

答:Mybatis仅能够撰写对于ParameterHandler、ResultSetHandler、StatementHandler、Executor这4种插口的软件,Mybatis应用JDK的动态性代理商,为必须阻拦的插口转化成代理商目标以完成插口方式阻拦作用,每每实行这4种插口目标的方式时,便会进到阻拦方式,实际便是InvocationHandler的invoke()方式,自然,总是阻拦这些你特定必须阻拦的方式。

完成Mybatis的Interceptor插口并复写intercept()方式,随后在给软件撰写注释,特定要阻拦哪个插口的什么方式就可以,记牢,别忘记在配备文档中配备你撰写的软件。

6、Mybatis实行大批量插进,能回到数据信息库主键目录吗?

答:能,JDBC都能,Mybatis自然也可以。

7、Mybatis动态性sql是干什么的?都是有什么动态性sql?能概述一下动态性sql的实行基本原理不?

答:Mybatis动态性sql可让大家在Xml投射文档内,以标识的方式撰写动态性sql,进行逻辑性分辨和动态性拼凑sql的作用,Mybatis出示了9种动态性sql标识trim|where|set|foreach|if|choose|when|otherwise|bind。其实行基本原理为,应用OGNL从sql主要参数目标中测算表述式的值,依据表述式的值动态性拼凑sql,为此来进行动态性sql的作用。

8、Mybatis是怎样将sql实行結果封裝为总体目标目标并回到的?都是有什么投射方式?

答:第一种是应用标识,逐一界定列名和目标特性名中间的投射关联。第二种是应用sql列的别称作用,将列别称撰写为目标特性名,例如T_NAME AS NAME,目标特性名通常为name,小写,可是列名不区别尺寸写,Mybatis会忽视列名尺寸写,智能化寻找与之相匹配目标特性名,你乃至能够写出T_NAME AS NaMe,Mybatis一样能够一切正常工作中。

拥有列名与特性名的投射关联后,Mybatis根据反射面建立目标,同时应用反射面给目标的特性逐一取值并回到,这些找不着投射关联的特性,是没法进行取值的。

9、Mybatis能实行一对一、一对多的关系查寻吗?都是有什么完成方法,及其他们中间的差别。

答:能,Mybatis不但能够实行一对一、一对多的关系查寻,还能够实行多对一,多对多的关系查寻,多对一查寻,实际上便是一对一查寻,只必须把selectOne()改动为selectList()就可以;多对多查寻,实际上便是一对多查寻,只必须把selectOne()改动为selectList()就可以。关系目标查寻,有二种完成方法,一种是独立推送一个sql去查寻关系目标,赋给主目标,随后回到主目标。

另外一种是应用嵌套循环查寻,嵌套循环查寻的含意为应用join查寻,一一部分列是A目标的特性值,此外一一部分列是关系目标B的特性值,益处是只发一个sql查寻,便可以把主目标和其关系目标查出来来。那麼难题来啦,join查寻出去100条纪录,怎样明确主目标是五个,而并不是一百个?其去重复复的基本原理是标识内的子标识,特定了唯一明确一条纪录的id列,Mybatis依据列值来进行100条纪录的去重复复作用,能够有好几个,意味着了协同主键的语意。

一样主目标的关系目标,也是依据这一基本原理去重复复的,虽然一般状况下,仅有主目标会出现反复纪录,关系目标一般不容易反复。

举例说明:下边join查寻出去6条纪录,一、二列是Teacher目标列,第三列入Student目标列,Mybatis去重复复解决后,結果为一个教师6个学员,而并不是6个教师6个学员。t_idt_names_id

1teacher381teacher391teacher401teacher411teacher421teacher43

10、Mybatis是不是适用延迟时间载入?假如适用,它的完成基本原理是啥?

答:Mybatis仅适用association关系目标和collection关系结合目标的延迟时间载入,association指的便是一对一,collection指的便是一对多查寻。在Mybatis配备文档中,能够配备是不是开启延迟时间载入lazyLoadingEnabled=true|false。

它的基本原理是,应用CGLIB建立总体目标目标的代理商目标,当启用总体目标方式时,进到阻拦器方式,例如启用a.getB().getName(),阻拦器invoke()方式发觉a.getB()是null值,那麼便会独立推送事前储存好的查寻关系B目标的sql,把B查寻上去,随后启用a.setB(b),因此a的目标b特性就会有值了,然后进行a.getB().getName()方式的启用。这便是延迟时间载入的基本概念。

自然了,不仅是Mybatis,基本上全部的包含Hibernate,适用延迟时间载入的基本原理全是一样的。

11、Mybatis的Xml投射文档中,不一样的Xml投射文档,id是不是能够反复?

答:不一样的Xml投射文档,假如配备了namespace,那麼id能够反复;假如沒有配备namespace,那麼id不可以反复;终究namespace并不是务必的,仅仅最好实践活动罢了。

缘故便是namespace+id是做为Map String, MappedStatement 的key应用的,假如沒有namespace,就剩余id,那麼,id反复会造成数据信息相互之间遮盖。

拥有namespace,当然id便可以反复,namespace不一样,namespace+id当然也也不同。

12、Mybatis中怎样实行批处理命令?

答:应用BatchExecutor进行批处理命令。

13、Mybatis都是有什么Executor实行器?他们中间的差别是啥?
答:Mybatis有三种基本的Executor实行器,SimpleExecutor、ReuseExecutor、BatchExecutor。SimpleExecutor:每实行一次update或select,就打开一个Statement目标,用完马上关掉Statement目标。ReuseExecutor:实行update或select,以sql做为key搜索Statement目标,存有就应用,不会有就建立,用完后,不关掉Statement目标,只是置放于Map String, Statement 内,供下一次应用。

简而言之,便是反复应用Statement目标。BatchExecutor:实行update(沒有select,JDBC批处理命令不兼容select),将全部sql都加上到批处理命令中(addBatch()),等候统一实行(executeBatch()),它缓存文件了好几个Statement目标,每一个Statement目标全是addBatch()结束后,等候逐一实行executeBatch()批处理命令。与JDBC批处理命令同样。

功效范畴:Executor的这种特性,都严苛限定在SqlSession性命周期时间范畴内。

14、Mybatis中怎样特定应用哪种Executor实行器?

答:在Mybatis配备文档中,能够特定默认设置的ExecutorType实行器种类,还可以手动式给DefaultSqlSessionFactory的建立SqlSession的方式传送ExecutorType种类主要参数。

15、Mybatis是不是能够投射Enum枚举类型类?

答:Mybatis能够投射枚举类型类,不光能够投射枚举类型类,Mybatis能够投射一切目标到表的一列上。

投射方法为自定一个TypeHandler,完成TypeHandler的setParameter()和getResult()插口方式。TypeHandler有2个功效,一是进行从javaType至jdbcType的变换,

二是进行jdbcType至javaType的变换,反映为setParameter()和getResult()2个方式,各自意味着设定sql疑问占位性病变符主要参数和获得列查寻結果。

16、Mybatis投射文档中,假如A标识根据include引入了B标识的內容,我想问一下,B标识可否界定在A标识的后边,還是说务必界定在A标识的前边?

答:尽管Mybatis分析Xml投射文档是依照次序分析的,可是,被引入的B标识仍然能够界定在一切地区,Mybatis都可以以恰当鉴别。

基本原理是,Mybatis分析A标识,发觉A标识引入了B标识,可是B标识并未分析到,尚不会有,这时,Mybatis会将A标识标识为未分析情况,随后再次分析余下的标识,包括B标识,待全部标识分析结束,Mybatis会再次分析这些被标识为未分析的标识,这时再分析A标识时,B标识早已存有,A标识也便可以一切正常分析进行了。

17、概述Mybatis的Xml投射文档和Mybatis內部数据信息构造中间的投射关联?

答:Mybatis将全部Xml配备信息内容都封裝到All-In-One净重级目标Configuration內部。在Xml投射文档中,

标识会被分析为ParameterMap目标,其每一个子原素会被分析为ParameterMapping目标。

标识会被分析为ResultMap目标,其每一个子原素会被分析为ResultMapping目标。每个、、、标识均会被分析为MappedStatement目标,标识内的sql会被分析为BoundSql目标。

#### 18、为何说Mybatis是半全自动ORM投射专用工具?它与自动式的差别在哪儿里?
答:Hibernate归属于自动式ORM投射专用工具,应用Hibernate查寻关系目标或是关系结合目标时,能够依据目标关联实体模型立即获得,因此它是自动式的。

而Mybatis在查寻关系目标或关系结合目标时,必须手动式撰写sql来进行,因此,称作半全自动ORM投射专用工具。




HTTPX 基础教程-新乡seo|网站优化,网站建设_微信公众号:zeropython—昊天博客