初识框架 MyBatis
1:什么是框架?
框架是一个提供了可重用的公共结构的半成品,它为我们构建新的应用程序提供了极大的便利,不仅提供了可以拿来就用的工具,更重要的是,它还提供了可重用的设计。
框架技术: 是一个应用程序的半成品 提供可重用的公共结构 按一定规则组织的一组组件
分析优势 :不用再考虑公共问题 专心在业务实现上 结构统一,易于学习、维2护 新手也可写出好程
2:当前的主流框架
2.1 :Struts2框架:以WebWork优秀的设计师思想为核心,吸收了Struts框架的部分优点,提供了一个更加整洁的基于MVC设计模式实现的Web应用程序框架。它引入了几个新的框架特性,从逻辑中分离出横切关注点的拦截器,减少或消除配置文件,贯穿整个框架的强大表达式语言,支持可变更和可重用的基于MVC模式的便签API等,Struts2充分利用了从其他MVC框架学到的经验和教训,是整个框架更加清晰、灵活。
2.2:Hibernate框架:是一个优秀的持久化的框架,负责简化讲对象数据保存到数据库中,或从数据库中读取数据并封装到对象的工作;Hibernate通过简单配置和编码就能替代JDBC烦恼的程序代码。Hibernate已经成为当前主流的数据库持久化框架,被广泛应用在实际框架中。ORM,简化数据库操作 DAO层
2.3:Spring框架:是一个开源框架,它的目标是使现有的JavaEE技术更容易使用和养成良好的编程习惯。它是一个轻量级的框架,渗透了JavaEE技术的方方面面。它主要作为依赖注入容器和AOP实现存在,它还提供声明式事务、对DAO层的支持等简化开发的功能。Spring可以很方便地与SpringMVC、Struts2、MyBatis、Hibernate等框架集成,大名鼎鼎的 SSM集成框架指的就是基于 SpringMVC+Spring+MyBatis技术框架,使用这个集成框架使我们的应用程序更加健壮、稳固、轻巧和优雅,这也是当前最流行的Java技术框架。
2.4: Spring MVC框架:是Spring框架提供的构建Web应用程序的全功能MVC模块,属于Spring Framework的后续产品,已经融合在Spring Web Flow里面,是结构最清晰的MVC Model2的实现。它拥有高度的可配置性,支持多种视图技术,支持多种视图技术,还可以进行定制化开发,相当灵活。此外,Spring整合SpringMVC 可以说是无缝集成,是一个高性能的架构模式。现在已越来越广泛地应用于互联网应用程序中。
2.5:MyBatis框架:是一个优秀的数据持久层框架,在实现类和SQL语句之间建立映射关系,是一种半自动化得ORM实现。其封装性要低于Hibernate,性能优越,并且小巧、简单易学,应用也越来越广泛。DAO层 动态SQL
3:什么是持久化? ORM
持久化是程序数据在瞬时状态和持久状态间转换的过程
ORM(Object Relational Mapping) 编写程序的时候,以面向对象的方式处理数据 保存数据的时候,却以关系型数据库的方式存储 ORM解决方案包含下面四个部分 在持久化对象上执行基本的增、删、改、查操作 对持久化对象提供一种查询语言或者API 对象关系映射工具 提供与事务对象交互、执行检查、延迟加载以及其他优化功能
4:MyBatis简介
MyBatis前身是iBatis,本是Apache的一个开源的项目 官方网站 http://mybatis.org ORM框架 实体类和SQL语句之间建立映射关系
特点 基于SQL语法,简单易学
能了解底层封装过程
SQL语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度
方便程序代码调试
5:搭建MyBatis开发环境
使用MyBatis的开发步骤
5.1:下载mybatis-3.2.2.jar包并导入工程
5.2:编写MyBatis核心配置文件(sqlMapConfig.xml)
5.3:创建实体类-POJO
5.4:DAO层-SQL映射文件(mapper.xml)
5.5:创建测试类
读取核心配置文件mybatis-config.xml ;创建SqlSessionFactory对象,读取配置文件;
创建SqlSession对象 ;调用mapper文件进行数据操作
6:MyBatis框架优缺点
优点 :与JDBC相比,减少了50%以上的代码量 最简单的持久化框架,小巧并简单易学 SQL代码从程序代码中彻底分离,可重用 提供XML标签,支持编写动态SQL 提供映射标签,支持对象与数据库的ORM字段映射
缺点 :SQL语句编写工作量大,对开发人员有一定要求 数据库移植性差
MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案,适用于性能要求较高或者需求多变的互联网项目
7:MyBatis基本要素
MyBatis的核心对象 :SqlSessionFactoryBuilder SqlSessionFactory SqlSession
mybatis-config.xml 系统核心配置文件
mapper.xml SQL映射文件
8:核心接口和类的结构
9:核心对象
SqlSessionFactoryBuilder: 用过即丢,其生命周期只存在于方法体内 可重用其来创建多个 SqlSessionFactory 实例 负责构建SqlSessionFactory,并提供多个build方法的重载
SqlSessionFactory :SqlSessionFactory是每个MyBatis应用的核心 作用:创建SqlSession实例 作用域:Application 生命周期与应用的生命周期相同 单例 存在于整个应用运行时,并且同时只存在一个对象实例
SqlSession 包含了执行SQL所需的所有方法 对应一次数据库会话,会话结束必须关闭 线程级别,不能共享。
注意:在SqlSession里可以执行多次SQL语句,但一旦关闭了SqlSession就需要重新创建
SqlSession的获取方式 :SqlSession的两种使用方式
9.1:通过SqlSession实例直接运行映射的SQL语句
9.2:基于Mapper接口方式操作数据
10:小结
非集成环境下的最佳实践
SqlSessionFactoryBuilder 用过即丢,推荐作用域范围:方法体内
SqlSessionFactory 最佳作用域范围:应用的全局作用域 生命周期与应用的生命周期相同
SqlSession 线程级 一个request请求期间
11:系统核心配置文件
mybatis-config.xml 系统核心配置文件
configuration 配置
properties 可以配置在Java 属性配置文件中
settings 修改 MyBatis 在运行时的行为方式
typeAliases 为 Java 类型命名一个别名(简称)
typeHandlers 类型处理器
objectFactory 对象工厂
plugins 插件
environments 环境
environment 环境变量
transactionManager 事务管理器
dataSource 数据源
mappers 映射器
配置properties元素
配置properties元素的两种方式 通过外部指定的方式(database.properties),实现动态配置 直接配置为xml,实现动态配置:
1:通过外部指定的方式(database.properties),实现动态配置 配置properties的resource属性
2:直接配置为xml,实现动态配置 配置property的name和value
3:若两种方式同时都用了,那么哪种方式优先? 配置properties的resource指定 配置property的name和value
结论:resource属性值的优先级高于property子节点配置的值
typeAliases元素
类型别名 仅仅只关联XML配置,简写冗长的Java类名
environments元素
environments元素 表示配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上 。 子元素节点:environment,是必须指定其中一个为默认运行环境(通过default指定)每个SqlSessionFactory实例只能选择一个运行环境
transactionManager-事务管理器
语法:<transactionManager type="[ JDBC | MANAGED ]" />
dataSource dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源 有三种内建的数据源类型
语法:<dataSource type=" [UNPOOLED | POOLED | JNDI]" />
示例:<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</dataSource>
mappers元素
映射器,定义SQL映射语句 须在配置中引用mapper映射文件
方式一:使用类资源路径获取资源
<!-- 将mapper映射文件加入到系统核心配置文件中 -->
<mappers>
<mapper resource="cn/smbms/dao/user/UserMapper.xml"/>
</mappers>
方式二:使用URL获取资源
<mappers>
<mapper url="file:///E:/sqlmappers/UserMapper.xml"/>
<mapper url="file:///E:/sqlmappers/ProviderMapper.xml"/>
</mappers>
总结: