一、为什么学习框架技术
优势如下:
1、不用再考虑公共问题,框架已经帮我们做好了
2、可以专心于业务逻辑,保证核心业务逻辑的开发质量
3、结构统一,便于学习和维护
4、框架中集成了前人的经验,可以帮助新手写出稳定、性能优良而且结构优美的高质量程序
二、框架的概念
框架(Framework)是一个可重用的公共结构的半成品,它为我们构建新的应用程序提供了极大的便利。一方面提供了可以拿来就用的工具,更重要的是,提供了可重用的设计
三、主流框架的介绍
Struts 2框架
Struts2 以WebWork 优秀的设计思想为核心,吸收了Struts框架的部分优点,提供了一个更加整洁的基于MVC设计模式实现的Web应用程序框架。它应用了几个新的框架特性;从逻辑中分离出横切关注的拦截器,减少或者消除配置文件,贯穿整个框架的强大表达式语言,支持可变更和可重用的基于MVC模式的标签API等,Struts 2 充分利用了从其他MVC框架学到的经验和教训,使整个框架更加清晰更加灵活。
Hibernate框架
Hibernate是一个优秀的持久化框架,负责将对象数据保存到数据库中,或从数据库中读取数据并封装DAO对象的工作。Hibernate通过简单配置和编码即可替代JDBC烦琐的程序代码。Hibernate已经成为当前主流的数据库持久化框架,被广泛应用。
Spring框架
String是一个开源框架,他的目标是使现有的JavaEE技术更容易使用和促进良好的编程习惯。它是一个轻量级的框架,渗透了JavaEE技术的方方面面。他的主要作用作为依赖注入容器和AOP实现存在还提供了声明式事务,对DAO层的支持等简化开发的功能。String还可以很方便地与StringMVC、Struts、MyBatis、Hibernate等框架集成,其中大名鼎鼎的SSM集成框架指的就是基于StringMVC+String+MyBatis的技术框架,使用这个集成框架将使我们的应用程序更加健壮、稳固、轻巧和优雅,这也是当前最流行的Java技术框架
SpringMVC
StringMVC是String框架提供的构建Web应用程序的全功能MVC模块,属于StringFrameWork的后续产品,已经融合在String Web Flow 里面,是结构最清晰的MVC Model2的实现,并且拥有高度呃可配置性,支持多种视图技术。还可以进行定制化开发,相当灵活
MaBatis框架
MyBatis是一个优秀的数据库持久层框架,在实体类和SQL语句之间建立映射关系,是一种半自动化的ORM实现。其封装性要低于Hibernate,性能优秀,并且小巧
数据持久化概念
数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。例如,文件的存储、数据的读取等都是数据持久化操作。数据模型可以是任何数据结构或对象模型,存储类型可以是关系模型、XML、二进制流等。
持久化是程序数据在瞬时状态和持久状态间转换的过程
MyBatis框架及ORM
1、MyBatis框架简介
MyBatis有Batis是一个开源的数据持久化框架。它内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射,几乎消除了所有的JDBC代码和参数的手工设置以及结果集的检索。主要思想是将程序中的大量SQL语句剥离出来,配置在配置文件中实现SQL的灵活配置
2、什么是ORM
ORM(Object/Relational Mapping) 即对象关系映射,是一种数据持久化技术。它会在对象模型和数据库之间建立起对应关系,并且提供了一种机制,通过JavaBean对象去操作数据库表中的数据
基于SQL语法,简单易学
能了解底层封装过程
SQL语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度
方便程序代码调试
3、MyBatis是ORM解决方案
基于ORM,MyBatis在对象模型和数据库的表之间建立了一座桥梁,通过MyBatis建立SQL关系的映射,以便捷地实现数据存储、查询、更改和删除等操作
MyBatis环境搭建
1、下载mybatis-3.2.2.jar包并导入工程
2、编写MyBatis核心配置文件(configuration.xml)
3、创建实体类-SmbmsUser
4、DAO层-SQL映射文件(mapper.xml)
5、创建测试类
6、读取核心配置文件mybatis-config.xml
7、创建SqlSessionFactory对象,读取配置文件
8、创建SqlSession对象
9、调用mapper文件进行数据操作
项目结构如图所示:
pom.xml
mybatis-config.xml——核心配置文件
jdbc.properties 数据库接连的相关配置
.
ISmbmsUserDao.xml
测试类
MyBatis框架优缺点
优点
与JDBC相比,减少了50%以上的代码量
最简单的持久化框架,小巧并简单易学
SQL代码从程序代码中彻底分离,可重用
提供XML标签,支持编写动态SQL
提供映射标签,支持对象与数据库的ORM字段映射
缺点
SQL语句编写工作量大,对开发人员有一定要求
数据库移植性差
MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案,适用于性能要求较高或者需求多变的互联网项目
4.MyBatis基本要素
01.MyBatis的核心对象 SqlSessionFactoryBuilder 、 SqlSessionFactory 、SqlSession
02.mybatis-config.xml 系统核心配置文件
03.mapper.xml SQL映射文件
核心对象:
1.SqlSessionFactoryBuilder用过即丢,其生命周期只存在于方法体内可重用其来创建多个 SqlSessionFactory 实例负责构建SqlSessionFactory,并提供多个build方法的重载
2.SqlSessionFactory是每个MyBatis应用的核心
作用:创建SqlSession实例
作用域:Application
生命周期与应用的生命周期相同
单例
存在于整个应用运行时,并且同时只存在一个对象实例
3.SqlSession
包含了执行SQL所需的所有方法
对应一次数据库会话,会话结束必须关闭
线程级别,不能共享
mybatis-config.xml 系统核心配置文件
configuration 配置
properties可以配置在Java属性配置文件中
settings修改MyBatis在运行时的行为方式
typeAliases为Java类型命名一个别名(简称)
typeHandlers 处理器
objectFactory 对象工厂
Plugins 插件ip: /blog, csdn.net/qq_36074113
environments 环境
environment环境变量
transaction Ma nag er 事务管理器
dataSource 数据源
mappers映射器
配置properties元素的两种方式
1.通过外部指定的方式(database.properties),实现动态配置
2.直接配置为xml,实现动态配置
Setting元素
用来修改MyBatis运行时的行为方式
主要是MyBatis的一些全局配置属性的设置
typeAliases元素
类型别名
仅仅只关联XML配置,简写冗长的Java类名
//方式一
<typeAliases>
<typeAlias alias="User" type="chen.smbms.User"/>
</typeAliases>
//方式二:
<typeAliases>
<package name ="chen.smbms.pojo" />
</typeAliases>
MyBatis与Hibernate的区别
一、拦截机制的不同
Struts2是类级别的拦截,每次请求就会创建一个Action,和Spring整合时Struts2的ActionBean注入作用域是原型模式prototype,然后通过setter,getter吧request数据注入到属性。Struts2中,一个Action对应一个request,response上下文,在接收参数时,可以通过属性接收,这说明属性参数是让多个方法共享的。Struts2中Action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了,只能设计为多例。
SpringMVC是方法级别的拦截,一个方法对应一个Request上下文,所以方法直接基本上是独立的,独享request,response数据。而每个方法同时又何一个url对应,参数的传递是直接注入到方法中的,是方法所独有的。处理结果通过ModeMap返回给框架。在Spring整合时,SpringMVC的Controller Bean默认单例模式Singleton,所以默认对所有的请求,只会创建一个Controller,有应为没有共享的属性,所以是线程安全的,如果要改变默认的作用域,需要添加@Scope注解修改。
Struts2有自己的拦截Interceptor机制,SpringMVC这是用的是独立的Aop方式,这样导致Struts2的配置文件量还是比SpringMVC大。
二、底层框架的不同
Struts2采用Filter(StrutsPrepareAndExecuteFilter)实现,SpringMVC(DispatcherServlet)则采用Servlet实现。Filter在容器启动之后即初始化;服务停止以后坠毁,晚于Servlet。Servlet在是在调用时初始化,先于Filter调用,服务停止后销毁。
三、性能方面
Struts2是类级别的拦截,每次请求对应实例一个新的Action,需要加载所有的属性值注入,SpringMVC实现了零配置,由于SpringMVC基于方法的拦截,有加载一次单例模式bean注入。所以,SpringMVC开发效率和性能高于Struts2。
四、配置方面
spring MVC和Spring是无缝的。从这个项目的管理和安全上也比Struts2高。
附注:拦截器与过滤器的区别:
1、拦截器是基于java的反射机制的,而过滤器是基于函数回调。
2、拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次