有哪些不同类型的IOC (依赖注入)方式?
构造器依赖注入: 构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖。
Setter方法注入: Setter方法注入是容器通过调用无参构造器或无参static工厂 方法实例化bean之后,调用该bean的setter方法,即实现了基于setter的依赖注入。
Hibernate是如何延迟加载?
Hibernate从数据库获取某一个对象数据、获取某一个对象的集合属性时,获取某一个对象所关联的另一个对象时,由于没有使用该对象的数据,hibernate并不从数据库加载真正的数据。而是为该对象创建一个代理对象来代表这个对象,这个对象上的所有属性都为默认值,只有在真正的需要该对象的数据时才创建这个真实的对象,真正的从数据库中加载数据。
简述SpringMvc的执行流程
- 用户发起请求到前端控制器(DispatcherServlet),该控制器会过滤出哪些请求可以访问Servlet、哪些不能访问。就是url-pattern的作用,并且会加载springmvc.xml配置文件。
- 前端控制器会找到处理器映射器(HandlerMapping),通过HandlerMapping完成url到controller映射的组件,简单来说,就是将在springmvc.xml中配置的或者注解的url与对应的处理类找到并进行存储,用map<url,handler>这样的方式来存储。
- HandlerMapping有了映射关系,并且找到url对应的处理器,HandlerMapping就会将其处理器(Handler)返回,在返回前,会加上很多拦截器。
- DispatcherServlet拿到Handler后,找到HandlerAdapter(处理器适配器),通过它来访问处理器,并执行处理器。
- 执行处理器
- 处理器会返回一个ModelAndView对象给HandlerAdapter
- 通过HandlerAdapter将ModelAndView对象返回给前端控制器(DispatcherServlet)
- 前端控制器请求视图解析器(ViewResolver)去进行视图解析,根据逻辑视图名解析成真正的视图(jsp),其实就是将ModelAndView对象中存放视图的名称进行查找,找到对应的页面形成视图对象
- 返回视图对象到前端控制器。
- 视图渲染,就是将ModelAndView对象中的数据放到request域中,用来让页面加载数据的。
- 通过第8步,通过名称找到了对应的页面,通过第10步,request域中有了所需要的数据,那么就能够进行视图渲染了。最后将其返回即可。
最住实践中,通常个Xnl映射文件,都会写一个Dao接口与之对应,请问。这个Dao 工作原
创建Dao接口
public interface smbms_userdao {
public smbms_user getuser(smbms_user smbms_users);
}
创建xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace需要指向接口全路径-->
<mapper namespace="com.smbms.dao.smbms_userdao">
<select id="getuser" resultType="smbms_user">
select * from smbms_user where userCode=#{userName}
</select>
</mapper>
通过在大配置文件定义的全局或者单个的实体类路径可以可以直接在resultType里写实体类名
<typeAliases>
<!--单个-->
<!--<typeAlias type="com.smbms.entity.smbms_user" alias="smbms_user"/>-->
<!--全局-->
<package name="com/smbms/entity"/>
</typeAliases>
Mybatis是如何进行分页的?分页插件的原理是什么?
数据库里面的索引和约束是什么?
数据库使用索引定位表中的行,与普通的的数据表不同,索引是一种以特定顺序保存的专用表。索引并不包含表中的所有数据,而是那些用于定位表中行的列,以及描述这些行的物理位置的信息。因此索引的作用就是便携化检索表中行和列的子集,而不需要检索表中的每行。