目录
第01章 初识mybatis
第02章 SQL映射文件
第03章 动态SQL
第04章 Spring核心概念
第05章 IoC和AOP使用扩展
第06章 MyBatis与Spring的整合
第07章 Spring配置补充
第08章 Spring MVC-1
第09章 Spring MVC-2
第10章 Spring MVC扩展和SSM框架整合
问题1:什么是框架?
解答:
问题2:使用框架有什么好处?
解答:
问题3:mybatis有哪些特点?
解答:
问题4:什么是持久化?
解答:持久化是程序数据在瞬时状态和持久状态间转换的过程,最终会存储在具体的物理介质当中。
问题5:什么是ORM?
解答:
ORM(Object Relational Mapping)
问题6:ORM解决方案包含哪些部分?
解答:
问题7:MyBatis开发环境步骤
解答:
问题8:mybatis的优缺点。
解答:
优点
缺点
问题9:mybatis的核心类以及核心配置文件有哪些?
解答:
MyBatis的核心类
核心配置文件
问题10:SqlSessionFactoryBuilder的特点。
解答:
问题11:如何创建一个会话工厂?
解答:
String resource = "mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
问题12:SqlSession的获取方式.。
解答:
SqlSession的两种使用方式
问题13:mybatis-config.xml 系统核心配置文件的重要元素。
解答:
configuration 配置
properties 可以配置在Java 属性配置文件中
settings 修改 MyBatis 在运行时的行为方式
typeAliases 为 Java 类型命名一个别名(简称)
typeHandlers 类型处理器
objectFactory 对象工厂
plugins 插件
environments 环境
environment 环境变量
transactionManager 事务管理器
dataSource 数据源
mappers 映射器
注意先后顺序。
问题14:配置properties元素有几种方式?
解答:
配置properties元素的两种方式:
问题15:typeAliases元素的作用?
解答:
使用别名,不需要书写全类名,可以一定程度简化工作量。
问题16:environments元素简单说明。
解答:
environments元素
问题17:transactionManager类型
解答:
Jdbc , managed
问题18:dataSource配置
解答:
Type可以选 pooled,unpooled,JNDI。
问题19:如何将mapper映射文件加入到系统核心配置文件中
解答:
方式一:使用类资源路径获取资源
方式二:使用URL获取资源
问题1:SQL映射文件的几个顶级元素
解答:
mapper - namespace
cache - 配置给定命名空间的缓存
cache-ref – 从其他命名空间引用缓存配置
resultMap –用来描述数据库结果集和对象的对应关系
sql – 可以重用的SQL块,也可以被其他语句引用
insert – 映射插入语句
update – 映射更新语句
delete – 映射删除语句
select – 映射查询语句
问题2:namespace作用。
解答:namespace和子元素的id联合保证唯一,区别不同的mapper。
问题3:mapper中select之类的子元素id有什么要求,作用是什么?
解答:接口中的方法与映射文件中SQL语句id一一对应,作用是mybatis动态代理能够准确执行对应的方法。
问题4:select元素属性说明。
解答:
id
命名空间中唯一的标识符
接口中的方法与映射文件中的SQL语句id一一对应
parameterType
传入SQL语句的参数类型
resultType
SQL语句返回值类型的完整类名或别名
问题5:parameterType说明。
解答:
基础数据类型
int、String、Date等
只能传入一个,通过#{参数名}即可获取传入的值
复杂数据类型
Java实体类、Map等
通过#{属性名}或者#{map的keyName}即可获取传入值
问题6:resultMap简单属性书写。
解答:
通知mybatis如何将property与column映射即可。
比如:
问题7:resultType 与resultMap 。
解答:
resultType :直接表示返回类型
基本数据类型
复杂数据类型
resultMap :对外部resultMap的引用
应用场景:
数据库字段信息与对象属性不一致
复杂的联合查询,自由控制映射结果
二者不能同时存在,本质上都是Map数据结构
问题8:resultMap如何自动映射?
解答:
字段名与属性名一致
resultMap的自动映射级别-autoMappingBehaviorPARTIAL(默认):自动匹配所有
问题9:如何禁止自动匹配?
解答:
问题10:insert、update、delete举例。
解答:
insert into smbms_user (userCode,userName,userPassword)
values ( #{userCode},#{userName},#{userPassword})
update smbms_user set userCode = #{userCode},
userName = #{userName},
userPassword = #{userPassword} where id = #{id}
delete from smbms_user where id = #{id}
问题11:resultMap说明。
解答:
resultMap属性
id:
resultMap的唯一标识
type:
Java实体类
resultMap子元素
id
一般对应数据库中该行的主键id,设置此项可提高MyBatis性能
result
映射到JavaBean的某个“简单类型”属性
association
映射到JavaBean的某个“复杂类型”属性,比如JavaBean类
collection
映射到JavaBean的某个“复杂类型”属性,比如集合
问题12:association说明?
解答:
复杂的类型关联,一对一
内部嵌套
映射一个嵌套JavaBean属性
属性
property:映射数据库列的实体对象的属性
javaType:完整Java类名或者别名
resultMap:引用外部resultMap
子元素
id
result
property:映射数据库列的实体对象的属性
column:数据库列名或者别名
问题13:collection元素说明。
解答:
复杂类型集合,一对多
内部嵌套
映射一个嵌套结果集到一个列表
属性
property:映射数据库列的实体对象的属性
ofType:完整Java类名或者别名(集合所包括的类型)
resultMap:引用外部resultMap
子元素
id
result
property:映射数据库列的实体对象的属性
column:数据库列名或者别名
问题14:缓存如何配置?
解答:
MyBatis缓存
一级缓存
二级缓存
二级缓存的配置
MyBatis的全局cache配置
在Mapper XML文件中设置缓存,默认情况下是没有开启缓存的
在Mapper XML文件配置支持cache后,如果需要对个别查询进行调整,可以单独设置cache
问题1:用于实现动态SQL的元素主要有哪些?
解答:
if
trim
where
set
choose(when、otherwise)
foreach
问题2:trim元素说明。
解答:
属性
prefix
suffix
prefixOverrides
suffixOverrides
更灵活地去除多余关键字
替代where和set
问题3:foreach使用说明?
解答:
迭代一个集合,通常用于in条件
属性
item
index
collection:必须指定
list
array
map-key
open
separator
close
问题4:choose元素内部有哪些元素?
解答:
问题5:MyBatis分页功能如何实现?
解答:
分页-DAO层实现
limit(起始位置,页面容量)
查询用户列表的方法增加2个参数
from
pageSize
问题1:Spring是一个什么样的框架?
解答:轻量级框架, Java EE的spring,当前主流框架。
问题2:spring主要包含的内容。
解答:
问题3:Spring设计理念。
解答:Spring是面向Bean的编程。
问题4:spring两大核心技术?
解答:
问题5:Spring的优点。
解答:
问题6:什么是控制反转 / 依赖注入
解答:
问题7:编写一个简单的spring例子的步骤。
解答:
问题8:使用Spring IoC的步骤是什么?
解答:
问题9:AOP相关术语。
解答:
问题10:怎样使用AOP。
解答:
问题11:如何定义切入点。
解答:
问题12:execution表达式说明。
解答:
execution(public * *(..))
execution(* set*(..))
AccountService 接口的任意方法的执行:
execution(* com.xyz.service.AccountService.*(..))
execution(* com.xyz.service.*.*(..))
execution(* com.xyz.service..*.*(..))
execution(* com.test.spring.aop.pointcutexp..JoinPointObjP2.*(..))")
***> 最靠近(..)的为方法名,靠近.*(..))的为类名或者接口名,如上例的JoinPointObjP2.*(..))
问题13:织入增强处理举例。
解答:
问题1:spring注入方式有几种?
解答:
问题2:
解答:
1、一个
2、通过
3、
问题3:p命名空间注入属性说明。
解答:
问题4:注入不同数据类型说明。
解答:
问题5:异常增强处理说明?
解答:
问题6:最终增强?
解答:
问题7:环绕增强说明。
解答:
问题8:如何使用注解实现IoC?
解答:
注解方式将Bean的定义信息和Bean实现类结合在一起,Spring提供的注解有
@Component:实现Bean组件的定义
@Repository :用于标注DAO类
@Service :用于标注业务类
@Controller :用于标注控制器类
问题9:自动注入使用哪个注解?
解答: @Autowired
问题10:自动注入精确指定使用哪个注解?
解答: @Qualifier指定Bean的名称。
问题11:如何使用注解信息启动Spring容器?
解答:
问题12:如何使用Java标准注解完成装配?
解答:
使用@Resource注解实现组件装配,默认按名称匹配
问题13:如何使用注解定义切面?
解答:@AspectJ
问题14:如何启动对注解@Aspectj生效?
解答:
问题15:使用aspectj使用前置后置等增强使用什么注解?
解答:@Before @After @AfterThrowing @Around @AfterReturning
问题1:整合关键类?
解答:
为整合应用提供SqlSession对象资源
负责管理MyBatis的SqlSession,调用SQL映射语句,实现对数据库的访问
根据指定Mapper接口生成Bean实例
根据指定包批量扫描Mapper接口并生成实例
问题2:整合步骤?
解答:
配置SqlSessionFactoryBean
使用SqlSessionTemplate实现数据库的操作
编写业务逻辑代码并测试
问题3:事务属性有哪些,各自说明。
解答:
propagation:事务传播机制
REQUIRED(默认值)
REQUIRES_NEW 、MANDATORY、NESTED
SUPPORTS
NOT_SUPPORTED、NEVER
isolation:事务隔离等级
DEFAULT(默认值)
READ_COMMITTED
READ_UNCOMMITTED
REPEATABLE_READ
SERIALIZABLE
imeout:事务超时时间,允许事务运行的最长时间,以秒为单位。默认值为-1,表示不超时
read-only:事务是否为只读,默认值为false
rollback-for:设定能够触发回滚的异常类型
Spring默认只在抛出runtime exception时才标识事务回滚
可以通过全限定类名指定需要回滚事务的异常,多个类名用逗号隔开
no-rollback-for:设定不触发回滚的异常类型
Spring默认checked Exception不会触发事务回滚
可以通过全限定类名指定不需回滚事务的异常,多个类名用英文逗号隔开
问题4:如何使用注解实现事务处理?
解答:
问题1:在Spring中引用属性文件。
解答:
比如:
classpath:database.properties
问题2:如何使用JNDI数据源?
解答:
比如:
java:comp/env/jdbc/smbms
问题3:Spring中Bean的作用域有哪些,各自特点是什么?
解答:
单例(singleton) (默认)每一个Spring IoC容器都拥有唯一的一个实例对象
原型(prototype) 一个Bean定义,任意多个对象
请求(request) 一个HTTP请求会产生一个Bean对象,也就是说,每一个HTTP请求都有自己的Bean实例。只在基于web的Spring ApplicationContext中可用
会话(session) 限定一个Bean的作用域为HTTPsession的生命周期。同样,只有基于web的Spring ApplicationContext才能使用
全局会话(global session) 限定一个Bean的作用域为全局HTTPSession的生命周期。通常用于门户网站场景,同样,只有基于web的Spring ApplicationContext可用
应用(application) 限定一个Bean的作用域为ServletContext的生命周期。同样,只有基于web的Spring ApplicationContext可用
问题4:如何使用注解指定Bean的作用域?
解答:@Scope
问题5:Spring自动装配有哪几种,各自说明?
解答:
no 默认值。Spring 默认不进行自动装配,必须显式指定依赖对象
byName 根据属性名自动装配。Spring 自动查找与属性名相同的id,如果找到,则自动注入,否则什么都不做
byType 根据属性的类型自动装配。Spring 自动查找与属性类型相同的Bean,如果刚好找到唯一的那个,则自动注入;如果找到多个与属性类型相同的Bean,则抛出异常;如果没找到,就什么也不做
constructor 和byType 类似,不过它针对构造方法。如果 Spring 找到一个Bean和构造方法的参数类型相匹配,则通过构造注入该依赖对象;如果找不到,将抛出异常
问题6:拆分配置文件—拆分策略?
解答:
问题7:拆分配置文件引入有几种方式?
解答:
两种方法
问题1:什么是MVC设计模式?
解答:
问题2:Spring MVC架构是怎样的?
解答:
问题3:springmvc环境搭建步骤?
解答:
问题4:注解驱动控制器如何配置?
解答:
问题5:Spring MVC请求处理流程?
解答:
1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;
2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI, 调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler 对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;
3. DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成 功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)
4. 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填 充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:
HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换 为指定的响应信息
数据转换:对请求消息进行数据转换。如String转换成Integer、Double等
数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等
数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error 中
5. Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;
6. 根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring 容器中的ViewResolver)返回给DispatcherServlet ;
7. ViewResolver 结合Model和View,来渲染视图
8. 将渲染结果返回给客户端。
问题6:Spring MVC体系结构?
解答:
问题7:Spring MVC框架特点?
解答:
问题8:参数传递使用哪个注解?
解答:
@RequestParam
问题9:@RequestMapping如何使用?
解答:
问题10:ModelAndView简单说明。
解答:
问题11:Model使用说明?
解答:
Model.addAttribute(String attributeName,Object attributeValue);
问题12:视图解析器使用说明?
解答:
例子:
问题11:Model使用说明?
解答:
问题12:如何使用转发与重定向?
解答:
问题13:静态资源文件如何引用?
解答:
问题14:异常如何处理?
解答:
问题1:Spring表单标签如何引入使用?
解答:
<%@ taglib prefix="fm"
uri="http://www.springframework.org/tags/form" %>
问题2:Spring常用表单标签?
解答:
渲染表单元素
输入框组件标签
密码框组件标签
隐藏框组件标签
多行输入框组件标签
单选框组件标签
复选框组件标签
下拉列表组件标签
显示表单数据校验所对应的错误信息
问题3:数据校验简单说明。
解答:
注意:
问题4:数据校验步骤?
解答:
问题5:什么是REST风格?
解答:
REST即表述性状态传递(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。
目前在三种主流的Web服务实现方案中,因为REST模式的Web服务与复杂的SOAP和XML-RPC对比来讲明显的更加简洁,越来越多的web服务开始采用REST风格设计和实现。例如,Amazon.com提供接近REST风格的Web服务进行图书查找;雅虎提供的Web服务也是REST风格的。
问题6:如何实现单文件?
解答:
问题7:如何实现多文件上传?
解答:改为MultipartFile处理即可。
问题1:JSON对象如何处理?
解答:
问题2:如何解决JSON数据传递的中文乱码问题?
解答:
@RequestMapping(value="/view",
method=RequestMethod.GET,
produces={"application/json;charset=UTF-8"})
问题3:数据转换处理日期如何完成?
解答:
推荐使用方式二。
问题4:如何配置多视图解析器?
解答:
问题5:自定义转换器如何实现?
解答:
问题6:数据绑定如何使用?
解答:
问题7:SSM框架整合步骤。
解答:
SSM框架搭建
新建Web Project,导入相关jar文件
配置web.xml
配置文件(/resources)
database.properties
log4j.properties
mybatis-config.xml
配置typeAliases
设置全局性懒加载
applicationContext-mybatis.xml
数据源相关配置
配置sql心跳包
在校验连接的同时,解决数据库重新连接的问题,从而确保连接池中连接是真实有效的连接
initialSize
maxActive
maxIdle
minIdle
maxWait
removeAbandoned
removeAbandonedTimeout
事务管理
配置SqlSessionFactoryBean
配置MapperScannerConfigurer
springmvc-servlet.xml
配置 标签(包括消息转换器配置)
通过 标签配置静态文件访问
配置支持文件上传- multipartResolver
配置多视图解析器-ContentNegotiatingViewResolver
配置拦截器-interceptors
基于HandlerMapping,对请求实施拦截,根据业务需求,基于不同的HandlerMapping定义多个拦截器
HandlerInterceptor接口
preHandle()
postHandle()
afterCompletion()
自定义拦截器的配置-SysInterceptor