关于spring,springMVC,hibernate,mybatis面试题
2018-03-08 13:53
357 查看
1.关于spring
1.谈谈你对spring IOC和DI的理解,它们有什么区别?
IoC反转控制,就是将原本在程序中手动创建对象的控制权,交由Spring框架管理。DI:依赖注入,在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件
面试题: IoC 和 DI的区别?
IoC 控制反转,指将对象的创建权,反转到Spring容器 , DI 依赖注入,指Spring创建对象的过程中,将对象依赖属性通过配置进行注入
2.BeanFactory 接口和 ApplicationContext 接口有什么区别 ?
①ApplicationContext 接口继承BeanFactory接口,Spring核心工厂是BeanFactory ,BeanFactory采取延迟加载,第一次getBean时才会初始化Bean, ApplicationContext是会在加载配置文件时初始化Bean。②ApplicationContext是对BeanFactory扩展,它可以进行国际化处理、事件传递和bean自动装配以及各种不同应用层的Context实现
3.spring配置bean实例化有哪些方式?
1)使用类构造器实例化(默认无参数)<bean id="bean1" class="cn.itcast.spring.b_instance.Bean1"></bean>
2)使用静态工厂方法实例化(简单工厂模式)
<bean id="bean2" class="cn.itcast.spring.b_instance.Bean2Factory" factory-method="getBean2"></bean>
3)使用实例工厂方法实例化(工厂方法模式)
<bean id="bean3Factory" class="cn.itcast.spring.b_instance.Bean3Factory"></bean>
<bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean>
4.简单的说一下spring的生命周期?
1)在配置 <bean> 元素,通过 init-method 指定Bean的初始化方法,通过 destroy-method 指定Bean销毁方法需要注意的问题:
* destroy-method 只对 scope="singleton" 有效
* 销毁方法,必须关闭ApplicationContext对象(手动调用),才会被调用
5.请介绍一下Spring框架中Bean的生命周期和作用域
(1)bean定义在配置文件里面用<bean></bean>来进行定义。
(2)bean初始化
有两种方式初始化:
A.在配置文件中通过指定init-method属性来完成
B.实现org.springframwork.beans.factory.InitializingBean接口
(3)bean调用
有三种方式可以得到bean实例,并进行调用
(4)bean销毁
销毁有两种方式
A.使用配置文件指定的destroy-method属性
B.实现org.springframwork.bean.factory.DisposeableBean接口
##作用域
singleton
当一个bean的作用域为singleton, 那么Spring IoC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。
prototype
Prototype作用域的bean会导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean() 方法)时都会创建一个新的bean实例。根据经验,对所有有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用 singleton作用域
request
在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例, 它们依据某个bean定义创建而成。该作用 域仅在基于web的Spring ApplicationContext情形下有效。
session
在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
global session
在一个全局的HTTP Session中,一个bean定义对应一个实例。典型情况下,仅在使用portlet context的时候有效。该作用域仅在基于 web的Spring ApplicationContext情形下有效。
6.Bean注入属性有哪几种方式?
spring支持构造器注入和setter方法注入构造器注入,通过 <constructor-arg> 元素完成注入
setter方法注入, 通过<property> 元素完成注入【开发中常用方式】
7.什么是AOP,AOP的作用是什么?
面向切面编程。它是为解耦而生的.Spring的一个关键的组件就是AOP框架,允许用户实现自定义切面,用AOP来完善OOP的使用,可以把Spring AOP看作是对Spring的一种增强8.Spring的核心类有哪些,各有什么作用?
BeanFactory:产生一个新的实例,可以实现单例模式BeanWrapper:提供统一的get及set方法
ApplicationContext:提供框架的实现,包括BeanFactory的所有功能
9.Spring里面如何配置数据库?
10.Spring里面applicationContext.xml文件能不能改成其他文件名?
ContextLoaderListener是一个ServletContextListener, 它在你的web应用启动的时候初始化。缺省情况下, 它会在WEB-INF/applicationContext.xml文件找Spring的配置。 你可以通过定义一个<context-param>元素名字为”contextConfigLocation”来改变Spring配置文件的位置。示例如下:<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/xyz.xml</param-value>
</context-param>
</listener-class>
</listener>
11.Spring里面如何定义hibernate的session工厂?
<bean id="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" /><!--数据源-->
<property name="packagesToScan" value="com.**" /><!-- 扫描并加载基于JPA注解PO类目录(此目录下所有带注解的实体类) -->
<property name="hibernateProperties"><!-- 指定Hibernate的属性信息 -->
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<!--加载实体类的映射文件位置及名称 -->
<property name="mappingLocations" value="classpath:config:/*.hbm.xml"></property>
</bean>
12.Spring如何处理线程并发问题?
Spring使用ThreadLocal解决线程安全问题ThreadLocal和线程同步机制都是为了解决多线程中相同变量的访问冲突问题。
在同步机制中,通过对象的锁机制保证同一时间只有一个线程访问变量。这时该变量是多个线程共享的,使用同步机制要求程序慎密地分析什么时候对变量进行读写,什么时候需要锁定某个对象,什么时候释放对象锁等繁杂的问题,程序设计和编写难度相对较大。
而ThreadLocal则从另一个角度来解决多线程的并发访问。ThreadLocal会为每一个线程提供一个独立的变量副本,从而隔离了多个线程对数据的访问冲突。因为每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了。ThreadLocal提供了线程安全的共享对象,在编写多线程代码时,可以把不安全的变量封装进ThreadLocal。
概括起来说,对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式。前者仅提供一份变量,让不同的线程排队访问,而后者为每一个线程都提供了一份变量,因此可以同时访问而互不影响。
13.为什么要有事物传播行为?
14.介绍一下Spring的事物管理
Spring既支持编程式事务管理,也支持声明式的事务管理,但其亮点在于声明式事务管理,即允许通过声明方式,在IoC配置中指定事务的边界和事务的属性。1.Spring为不同的持久化框架提供了PlatformTrancationManager接口的实现类,不同的持久化技术对应不同的事务管理器实现类。
2.Spring为不同的持久化技术提供了一套从TransactionSynchronizationManager中获取对应线程绑定资源的工具类。
15.解释一下Spring AOP里面的几个名词
切面(Aspect):一个关注点的模块化,这个关注点可能会横切多个对象。事务管理是J2EE应用中一个关于横切关注点的很好的例子。 在Spring AOP中,切面可以使用通用类(基于模式的风格) 或者在普通类中以 @Aspect 注解(@AspectJ风格)来实现。连接点(Joinpoint):在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。 在Spring AOP中,一个连接点 总是 代表一个方法的执行。 通过声明一个org.aspectj.lang.JoinPoint类型的参数可以使通知(Advice)的主体部分获得连接点信息。
通知(Advice):在切面的某个特定的连接点(Joinpoint)上执行的动作。通知有各种类型,其中包括“around”、“before”和“after”等通知。 通知的类型将在后面部分进行讨论。许多AOP框架,包括Spring,都是以拦截器做通知模型, 并维护一个以连接点为中心的拦截器链。
切入点(Pointcut):匹配连接点(Joinpoint)的断言。通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行(例如,当执行某个特定名称的方法时)。 切入点表达式如何和连接点匹配是AOP的核心:Spring缺省使用AspectJ切入点语法。
引入(Introduction):(也被称为内部类型声明(inter-type declaration))。声明额外的方法或者某个类型的字段。 Spring允许引入新的接口(以及一个对应的实现)到任何被代理的对象。例如,你可以使用一个引入来使bean实现 IsModified 接口,以便简化缓存机制。
目标对象(Target Object): 被一个或者多个切面(aspect)所通知(advise)的对象。也有人把它叫做 被通知(advised) 对象。 既然Spring AOP是通过运行时代理实现的,这个对象永远是一个 被代理(proxied) 对象。
AOP代理(AOP Proxy): AOP框架创建的对象,用来实现切面契约(aspect contract)(包括通知方法执行等功能)。 在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。 注意:Spring 2.0最新引入的基于模式(schema-based)风格和@AspectJ注解风格的切面声明,对于使用这些风格的用户来说,代理的创建是透明的。
织入(Weaving):把切面(aspect)连接到其它的应用程序类型或者对象上,并创建一个被通知(advised)的对象。 这些可以在编译时(例如使用AspectJ编译器),类加载时和运行时完成。 Spring和其他纯Java AOP框架一样,在运行时完成织入。
16. spring aop通知(advice)有哪些类型?
spring aop通知(advice)分成五类:前置通知[Before advice]:在连接点前面执行,前置通知不会影响连接点的执行,除非此处抛出异常。
正常返回通知[After returning advice]:在连接点正常执行完成后执行,如果连接点抛出异常,则不会执行。
异常返回通知[After throwing advice]:在连接点抛出异常后执行。
后置[b]通知[After (finally) advice][/b]:在连接点执行完成后执行,不管是正常执行完成,还是抛出异常,都会执行返回通知中的内容。
环绕通知[Around advice]:环绕通知围绕在连接点前后,比如一个方法调用的前后。这是最强大的通知类型,能在方法调用前后自定义一些操作。环绕通知还需要负责决定是继续处理join point(调用ProceedingJoinPoint的proceed方法)还是中断执行。
2.关于springMVC
1.简单的谈一下SpringMVC的工作流程?
1、用户发送请求至前端控制器DispatcherServlet2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、DispatcherServlet调用HandlerAdapter处理器适配器
5、HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6、Controller执行完成返回ModelAndView
7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9、ViewReslover解析后返回具体View
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、DispatcherServlet响应用户
2. SpringMVC与Struts2的主要区别?
①springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过虑器。②springmvc是基于方法开发,传递参数是通过方法形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。
③Struts采用值栈存储请求和响应的数据,通过OGNL存取数据, springmvc通过参数解析器是将request对象内容进行解析成方法形参,将响应数据和页面封装成ModelAndView对象,最后又将模型数据通过request对象传输到页面。 Jsp视图解析器默认使用jstl。
3. 关于hibernate
1.为什么要使用Hibernate开发你的项目呢?Hibernate的开发流程是怎么样的?
为什么要使用①.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
②.Hibernate 是一个基于JDBC的主流持久化框架,是一个优秀的ORM 实现。他很大程度的简化DAO层的编码工作
③.hibernate 的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。
开发流程
2.什么是延迟加载?
延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。在Hibernate中提供了对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载。3.说一下hibernate的缓存机制
hibernate 共有两个级别的缓存* 一级缓存,保存Session中, 事务范围的缓存
* 二级缓存,保存SessionFactory
,进程范围的缓存
二级缓存好处: 将数据库或者硬盘数据,保存在内存中,减少数据库查询次数,减少硬盘交互,提高检索效率。
Hibernate支持哪些二级缓存技术?
* EHCache (主要学习,支持本地缓存,支持分布式缓存)
可作为进程范围内的缓存, 存放数据的物理介质可以是内存或硬盘, 对 Hibernate 的查询缓存提供了支持。
* OSCache
可作为进程范围内的缓存, 存放数据的物理介质可以是内存或硬盘, 提供了丰富的缓存数据过期策略, 对 Hibernate 的查询缓存提供了支持
* SwarmCache
可作为集群范围内的缓存, 但不支持 Hibernate 的查询缓存
* JBossCache
可作为集群范围内的缓存, 支持 Hibernate 的查询缓存
4.Hibernate的查询方式有哪些?
本地SQL查询、Criteria、Hql5.如何优化Hibernate?
1.使用双向一对多关联,不使用单向一对多2.灵活使用单向一对多关联
3.不用一对一,用多对一取代
4.配置对象缓存,不使用集合缓存
5.一对多集合使用Bag,多对多集合使用Set
6. 继承类使用显式多态
7. 表字段要少,表关联不要怕多,有二级缓存撑腰
6.Hibernate中GET和LOAD的区别?
session.get 方法, 查询立即执行 , 返回类对象session.load 方法,默认采用延迟加载数据方式,不会立即查询,返回类子类对象 (动态生成代理对象)。但如果PO类使用final修饰,load无法创建代理对象,返回目标对象本身 (load效果和 get效果 相同 )
7.说说在 hibernate中使用Integer做映射和使用int做映射之间有什么差别?
Integer是对象,对象可以为空;int 是普通类型,不可能=null。8.SQL和HQL有什么区别?
sql 面向数据库表查询 ;hql 面向对象查询 。hql:from 后面跟的 类名+类对象 where 后 用 对象的属性做条件
sql:from 后面跟的是表名
where 后 用表中字段做条件
在Hibernate中使用查询时,一般使用Hql查询语句。
9.Hibernate的分页查询
例如:从数据库中的第20000条数据开始查后面100条记录Query q =
session.createQuery("from Cat as c");;
q.setMaxResults(100);;
List l = q.list();;
q.setFirstResult(20000);;
10.Hibernate中Java对象的状态以及对应的特征有哪些?
OID 指与数据表中主键对应 PO类中属性Hibernate框架使用OID来区分不同PO对象
* 例如内存中有两个PO对象,只要具有相同 OID, Hibernate认为同一个对象
*
Hibernate 不允许缓存同样OID的两个不同对象
持久化对象的三种状态:
①瞬时态(临时态、自由态):不存在持久化标识OID,尚未与Hibernate
Session关联对象
②持久态:存在持久化标识OID,与当前session有关联
③脱管态(离线态、游离态):存在持久化标识OID,但没有与当前session关联,
区分三种状态:判断对象是否有OID,判断对象是否与session关联(被一级缓存引用)
①瞬时态对象:通过new获得
瞬时----->持久
save、saveOrUpdate(都是session)
瞬时----->脱管
book.setId(1) 为瞬时对象设置OID
②持久态对象:通过get/load 、Query查询获得
持久----->瞬时
delete (被删除持久化对象 不建议再次使用 )
持久----->脱管
evict(清除一级缓存中某一个对象)、close(关闭Session,清除一级缓存)、clear(清除一级缓存所有对象 )
③脱管态对象 无法直接获得
脱管----->瞬时
book.setId(null); 删除对象OID
脱管----->持久
update、saveOrUpdate、 lock(过时)
11.Hibernate中怎样处理事务?
Hibernate是对JDBC的轻量级对象封装,Hibernate本身是不具备Transaction 处理功能的,Hibernate的Transaction实际上是底层的JDBCTransaction的封装,或者是JTA
Transaction的封装。
12.简单的介绍一下Hibernate的核心API?
1.Configuration用于加载hibernate配置
①加载核心属性配置hibernate.properties和hibernate.cfg.xml
②手动加载hbm映射配置,持久化类与数据表的映射关系(*.hbm.xml 文件)
2.SessionFactory
3.Session代表hibernate操作会话对象,相当于Connection
4.Transaction
事务操作
5.Query :session.createQuery()获得
6.Criteria
接口(QBC查询 Query By Criteria )
13.update与saveOrUpdate有什么区别?
save() 方法很显然是执行保存操作的,如果是对一个新的刚new出来的对象进行保存,自然要使用这个方法了,数据库中没有这个对象。update() 如果是对一个已经存在的托管对象进行更新那么肯定是要使用update()方法了,数据中有这个对象。
saveOrUpdate() 这个方法是更新或者插入,有主键就执行更新,如果没有主键就执行插入。【此方法慎用】
14.Hibernate的inverse和cascade属性的作用?
1.明确inverse和cascade的作用inverse 决定是否把对对象中集合的改动反映到数据库中;
cascade决定是否把对对象的改动反映到数据库中,所以cascade对所有的关联关系都起作用(因为关联关系就是指对象之间的关联关系)。
2.inverse属性 :inverse所描述的是对象之间关联关系的维护方式。
inverse只存在于集合标记的元素中 。Hibernate提供的集合元素包括<set/>
<map/> <list/> <array /> <bag />
3.cascade属性
级联操作:指当主控方执行某项操作时,是否要对被关联方也执行相同的操作。
cascade属性的作用是描述关联对象进行操作时的级联特性。因此,只有涉及到关系的元素才有cascade属性。具有cascade属性的标记包括<many-to-one /> <one-to-one /> <any
/> <set /><bag /> <idbag /> <list /> <array />
注意:<one-to-many
/>和 <many-to-many />是用在集合标记内部的,所以是不需要cascade属性的。
4.inverse和cascade的区别
作用的范围不同:
Inverse是设置在集合元素中的。
Cascade对于所有涉及到关联的元素都有效。
<many-to-one/><ont-to-many/>没有inverse属性,但有cascade属性
执行的策略不同
Inverse 会首先判断集合的变化情况,然后针对变化执行相应的处理。
Cascade 是直接对集合中每个元素执行相应的处理
执行的时机不同
Inverse是在执行SQL语句之前判断是否要执行该SQL语句
Cascade则在主控方发生操作时用来判断是否要进行级联操作
执行的目标不同
Inverse对于<ont-to-many>和<many-to-many>处理方式不相同。
对于<ont-to-many>,inverse所处理的是对被关联表进行修改操作。
对于<many-to-many>,inverse所处理的则是中间关联表
Cascade不会区分这两种关系的差别,所做的操作都是针对被关联的对象。
总结:
<one-to-many>
<one-to-many>中,建议inverse=”true”,由“many”方来进行关联关系的维护
<many-to-many>中,只设置其中一方inverse=”false”,或双方都不设置
Cascade,通常情况下都不会使用。特别是删除,一定要慎重。
操作建议:
一般对many-to-one和many-to-many不设置级联,这要看业务逻辑的需要;对one-to-one和one-to-many设置级联。
many-to-many关联关系中,一端设置inverse=”false”,另一端设置为inverse=”true”。在one-to-many关联关系中,设置inverse=”true”,由多端来维护关系表
4.Hibernate支持哪些二级缓存技术?
* EHCache (主要学习,支持本地缓存,支持分布式缓存)
可作为进程范围内的缓存, 存放数据的物理介质可以是内存或硬盘, 对
Hibernate 的查询缓存提供了支持。
* OSCache
可作为进程范围内的缓存, 存放数据的物理介质可以是内存或硬盘, 提供了丰富的缓存数据过期策略, 对
Hibernate 的查询缓存提供了支持
* SwarmCache
可作为集群范围内的缓存, 但不支持
Hibernate 的查询缓存
* JBossCache
可作为集群范围内的缓存, 支持
Hibernate 的查询缓存
4. 关于mybatis
1.为什么要使用 MyBatis开发你的项目?
1.在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。2.将Sql语句配置在XXXXmapper.xml文件中与java代码分离。
3.Mybatis自动将java对象映射至sql语句。
4.Mybatis自动将sql执行结果映射至java对象。
2.MyBatis编程步骤是什么样的?
① 创建SqlSessionFactory② 通过SqlSessionFactory创建SqlSession
③ 通过sqlsession执行数据库操作
④ 调用session.commit()提交事务
⑤ 调用session.close()关闭会话
3.MyBatis与Hibernate有哪些不同?
Mybatis和hibernate不同,是一个半自动框架,因为它需要手工匹配提供POJO,sql和映射关系,而全表映射的Hibernate只需要提供pojo和映射关系即可。Mybatis学习门槛低,简单易学,程序员直接编写原生态sql,可严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发。
Hibernate对象/关系映射能力强,数据库无关性好,开发量小。
4.使用MyBatis的mapper接口调用时有哪些要求?
① Mapper接口方法名和mapper.xml中定义的每个sql的id相同② Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
③ Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
④ Mapper.xml文件中的namespace即是mapper接口的类路径。
5.SqlMapConfig.xml中配置有哪些内容?
SqlMapConfig.xml中配置的内容和顺序如下:properties(属性)
settings(配置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境集合属性对象)
environment(环境子属性对象)
transactionManager(事务管理)
dataSource(数据源)
mappers(映射器)
6.简单的说一下MyBatis的一级缓存和二级缓存?
7.Mapper编写有哪几种方式?
①接口实现类继承SqlSessionDaoSupport使用此种方法需要编写mapper接口,mapper接口实现类、mapper.xml文件
1、在sqlMapConfig.xml中配置mapper.xml的位置
<mappers>
<mapper
resource="mapper.xml文件的地址" />
<mapper
resource="mapper.xml文件的地址" />
</mappers>
2、定义mapper接口
3、实现类集成SqlSessionDaoSupport
mapper方法中可以this.getSqlSession()进行数据增删改查。
4、spring 配置
<bean id=" " class="mapper接口的实现">
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
②使用org.mybatis.spring.mapper.MapperFactoryBean
1、在sqlMapConfig.xml中配置mapper.xml的位置
如果mapper.xml和mappre接口的名称相同且在同一个目录,这里可以不用配置
<mappers>
<mapper
resource="mapper.xml文件的地址" />
<mapper
resource="mapper.xml文件的地址" />
</mappers>
2、定义mapper接口
注意
1、mapper.xml中的namespace为mapper接口的地址
2、mapper接口中的方法名和mapper.xml中的定义的statement的id保持一致
3、 Spring中定义
<bean id="" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="mapper接口地址" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
③使用mapper扫描器
1、mapper.xml文件编写,
注意:
mapper.xml中的namespace为mapper接口的地址
mapper接口中的方法名和mapper.xml中的定义的statement的id保持一致
如果将mapper.xml和mapper接口的名称保持一致则不用在sqlMapConfig.xml中进行配置
2、定义mapper接口
注意mapper.xml的文件名和mapper的接口名称保持一致,且放在同一个目录
3、配置mapper扫描器
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="mapper接口包地址"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
4、使用扫描器后从spring容器中获取mapper的实现对象
扫描器将接口通过代理方法生成实现对象,要spring容器中自动注册,名称为mapper 接口的名称。
相关文章推荐
- Java中的面试题 [2] --- Java框架、SpringMVC、Spring、mybatis、hibernate等
- 刚有人问面试题咋答,一时兴起回了下,关于对 Struts2, Spring 和 Hibernate 的理解 推荐
- SSH(Struts,Spring,Hibernate)和SSM(SpringMVC,Spring,MyBatis)的区别
- SSH(Struts,Spring,Hibernate)和SSM(SpringMVC,Spring,MyBatis)的区别
- SpringMVC,Spring,Hibernate,Mybatis架构开发搭建之SpringMVC部分
- 刚有人问面试题咋答,一时兴起回了下,关于对 Struts2, Spring 和 Hibernate 的理解
- 纯代码(基于注解和代码,零xml)整合SSHM(Spring、SpringMVC、Hibernate、Mybatis)
- Spring+SpringMvc+MyBatis(Hibernate) 中关于时间格式的问题总结
- Mybatis,Spring,SpringMVC框架面试题
- SSH(Struts,Spring,Hibernate)和SSM(SpringMVC,Spring,MyBatis)的区别
- Eclipse编写spring(4.3.9)+springMVC(4.3.9)+Mybatis(3.4.1)/Hibernate(4.3.11)+mysql(5.7)+log4j2项目
- SSH(Struts,Spring,Hibernate)和SSM(SpringMVC,Spring,MyBatis)之间区别
- SSH(Struts,Spring,Hibernate)和SSM(SpringMVC,Spring,MyBatis)的区别
- 关于spring springmvc mybatis的初步整合
- SSH(Struts,Spring,Hibernate)和SSM(SpringMVC,Spring,MyBatis)的区别
- SSH(Struts,Spring,Hibernate)和SSM(SpringMVC,Spring,MyBatis)的区别(详解)
- struts、hibernate、spring、 mybatis、 spring boot 等面试题汇总
- Spring SpringMvc 3.0 + MyBatis 整合--补充关于.properties文件的读取
- 基于maven的多框架和多视图融合技术(Struts1、Struts2、Spring、SpringMVC、Hibernate、Ibatis、MyBatis、Spring Data JPA、DWR)