MyBatis 文档 完整版
框架技术
1.框架技术
01.是一个应用程序的半成品
02.提供可重用的公共结构
03.按一定规则组织的一组组件
2.分析优势
01.不用再考虑公共问题
02.专心的业务实现上
03.结构统一,易于学习、维护
04.新手也可写出好程序
3.主流框架简介
01.Struts2(Web层框架)
MVC设计模式的实现
拦截器
可变和可重用的标签
02.HIBERNATE(DAO层框架)
ORM(对象关系映射),简化数据库操作
DAO层
03. Spring
依赖注入容器(IOC)/AOP(面向切面编程)实现
声明式事务
简化Java EE应用
粘合剂,将大家组装到一起
Spring MVC
结构最清晰的MVC Model2实现
高度可配置,支持多种视图技术
定制化开发
04.MyBatis
半自动化的ORM实现
DAO层
小巧灵活、简单易学
4.持久化与ORM
01.持久化是程序数据在瞬时状态和持久化状态间转换的过程
瞬时状态
在临时内存中存储,进行数据交互
持久状态
把瞬时状态的数据长期的保存在硬盘中
02.ORM(对象关系映射)
ORM(Object Relational Mapping)
编写程序的时候,以面向对象的方式处理数据
保存数据的时候,却以关系型数据库的方式存储
ORM解决方案包含下面四个部分
在持久化对象上执行基本的增、删、改、查操作
对持久化对象提供一种查询语言或者API
对象关系映射工具
提供与事务对象交互、执行检查、延迟加载以及其他优化功能
MyBatis环境搭建
1.MyBatis简介
01.MyBatis前身是iBatis,本身是Apache的一个开源的项目
02.官方网站
http://mybatis.ory
03.ORM框架
04.实体类和SQL语句之间建立映射关系
05.特点
基于SQL语法,简单易学
能了解底层封装过程
SQL语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度
方便程序代码调试
2.搭建Mybatis开发环境
01.下载MyBatis-3.2.2.jar包并导入工程
02.编写MyBatis核心配置文件(configuration.xml)
03.创建实体类-POPJ
04.DAO层-SQL映射文件(mapper.xml)
05.创建测试类
读取全局配置文件mybatis-config.xml
创建SqlSessionFactory对象,读取配置文件
创建SqlSession对象
调用mapper文件进行数据操作
3.MyBatis框架优点缺点
01.优点
与JDBC相比,减少了50%以上的代码量
最简单的持久化框架、小巧并简单易学
SQL代码从程序代码中彻底分离,可重用
提供XML标签,支持编写动态SQL
提供映射标签,支持对象与数据库的ORM字段关系映射
02.缺点
SQL语句编写工作量大,对开发人员有一定要求
数据库移植性差
*MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案,适合于性能要求较高或者需求多变的互联网项目
Maven
1.Maven简介
01.maven是一个项目构建和管理的工具,提供了帮助管理构建、文档、报告、依赖、发布、分发的方法。 可以方便的编译代码,进行依赖关系,管理二进制库等等
02.maven的好处在于可以将项目过程规范化、自动化、高效化以及强大的可扩展性
03.利用maven自身及其插件还可以获得代码检查报告、单元测试覆盖率。实现持续集成等等。
2.Maven仓库
01.Maven仓库本质上存储了jar包和原数据信息,通过原信息能够准确定位到jar包,从而能够获取和修改
02.Maven的三种类型仓库
001.本地仓库
本地仓库默认在用户目录下,包含了下载的所有依赖
002.中央仓库
中央仓库由Maven自己提供的,本地仓库中的没有依赖默认都会去中央仓库查找,下载后会放到本地仓库
003.远程仓库
远程仓库是远程服务器上可访问的仓库,本质类似于中央仓库(只不过中央仓库是权威罢了,而且你不能乱动)。远程仓库可以本地网络中或者互联网上,一般团队内部会设置一个内部的远程仓库,这样可以解决安全共享,网络代理等问题
注意:Maven首先会从本地仓库,然后是中央仓库,最后结果pom文件中配置了远程仓库,会到远程仓库中查找依赖
3.maven目录
src/main/java --> 存放Java代码
src/main/resource --> 存放Java代码中的依赖,例如小配置文件(.xml)
src/test/java
src/test/resource
4.session.getMapper()方法
01.使用强制类型的方式,直接点出业务方法
02.返回值类型为借口定义方法的类型
03.方法用到了,动态代理--->里式替换。
5.别名
由于在小配置中,resultType(返回值类型),parameterType(参数类型)。
如果在开发中不想写全名称,想使用别名
01.方法一
<typeAliases>
<typeAlias type="类全名称" alias="别名"></typeAlias>
</typeAliases>
*注意
01.1
在大配置中配置
01.2
在业务量大的时候,配置会很烦琐
02.方法二
<typeAliases>
<package name="类的全包名"/>
</typeAliases>
*注意
02.1
在大配置中配置
02.2
在业务量大的时,配置简单
6.resultType和resultMap的区别
01.resultType
指向类的名称
一般为返回值类型
02.resultMap
<select > property:对应的javabean属性
7.SQL片段(小配置文件中SQL语句替代“*”号)
01.声明sql标签
<sql > </select>
8.模糊查询
*在小配置中实现模糊查询得方式
01.使用concat连接
select * form student where stuName like concat('%',#{stuName},'%')
*可以防止SQL的注入
02.使用'${value}'
select * form student where stuName like '${value}'
*不防止SQL注入
03.使用'%'#{value}'%'
select * form student where stuName like '%'#{value}'%'
*可以防止SQL注入
9.添加完成后获取ID
<insert > 02.小配置文中指定参数为key值,通过实现类的Map集合获取
10.2
通过站位传递参数
01.在接口中定义的方法根据需要入参
02.小配置文中直接按入参的顺序进行站位
11.智能标签
11.1
if
01.小配置中(示例)
<select > 但是一级缓存、二级缓存的不同之处在于,SQLSession一旦关闭,则SQLSession中的数据将不存在,即一级缓存就不复存在。而二级缓存的生命周期与整个应用同步,与SQLSession是否关闭无关。换句话说,一级缓存是在同一线程(同一SQLSession)间共享数据,而二级缓存是在不同线程(不同SQLSession)间共享数据
13.5
查询缓存
主要是为了提高查询访问速度。将用户对同一数据的重复查询过程简化,不再每次均从数据库查询获取结果数据,从而提高访问速度。
13.6
开启二级缓存 --> 三个条件
01.cacheEnabled=true(默认值为true)
在<settings>标签中添加,默认开启。可有可无
02.Mapper文件(小配置文件)中,<cache/>
在小配置中添加<cache/>标签
标签中的属性(例如)
<cache eviction="FIFO"
flushInterval="60000"
size="512"
readOnly="true"/>
这个更高级的配置创建了一个FIFO缓存,并每隔60秒刷新,缓存结果对象或列表的512引用,而且返回的对象被认为是只读的
属性和值
eviction
LRU(最近最少使用的,默认值)
移除最长时间不被使用对象
FIFO(先进先出)
按对象进入缓存的顺序来移除它们
SOFT(软引用)
移除基于垃圾回收器状态和软引用规则的对象
WERK(弱引用)
更积极地移除基于垃圾收集器状态和引用规则的对象
FlushInterval(刷新间隔)
可以被设置为任意的正整数,而且它们代表合理的毫秒形式的时间段。默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新
size(引用数目)
可以设置为任意正整数,要记住缓存的对象数目和运行环境的可用内存资源数目。默认为1024
readOnly(只读)
属性可以被设置为true或false。只读的缓存会给所有调用者返回缓存对象的相同实例。因此这些对象不能被修改。这提供了很重要的性能优势。可读写的缓存会返回对象的拷贝(通过序列化)。这会慢一些,但是安全,因此默认为false
03.实体类实现Serializable接口
13.7
关闭二级缓存
01.全局关闭
cacheEnabled=false
02.局部关闭
删除Mapper(小配置)文件中配置
03.在select节点中设置属性usecache为false
<select > *关联properties文件中的属性