1,Mybatis
1.1 Mybatis概述
1.1.1 Mybatis概念
MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发
MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github
官网:https://mybatis.org/mybatis-3/zh/index.html
持久层:
-
负责将数据到保存到数据库的那一层代码。
以后开发我们会将操作数据库的Java代码作为持久层。而Mybatis就是对jdbc代码进行了封装。
-
JavaEE三层架构:表现层、业务层、持久层
三层架构在后期会给大家进行讲解,今天先简单的了解下即可。
框架:
- 框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型
- 在框架的基础之上构建软件编写更加高效、规范、通用、可扩展
举例给大家简单的解释一下什么是半成品软件。大家小时候应该在公园见过给石膏娃娃涂鸦
如下图所示有一个石膏娃娃,这个就是一个半成品。你可以在这个半成品的基础上进行不同颜色的涂鸦
1.1.2 JDBC 缺点
下面是 JDBC 代码,我们通过该代码分析都存在什么缺点:
-
硬编码
-
注册驱动、获取连接
上图标1的代码有很多字符串,而这些是连接数据库的四个基本信息,以后如果要将Mysql数据库换成其他的关系型数据库的话,这四个地方都需要修改,如果放在此处就意味着要修改我们的源代码。
-
SQL语句
上图标2的代码。如果表结构发生变化,SQL语句就要进行更改。这也不方便后期的维护。
-
-
操作繁琐
-
手动设置参数
-
手动封装结果集
上图标4的代码是对查询到的数据进行封装,而这部分代码是没有什么技术含量,而且特别耗费时间的。
-
1.1.3 Mybatis 优化
- 硬编码可以配置到配置文件
- 操作繁琐的地方mybatis都自动完成
如图所示
1.2 Mybatis基本要素
1.2.1 mybati的核心对象
SqlSessionFactoryBuilder
SqlSessionFactory
SqlSession
这三个类是mybati的核心对象,它们之间存在如下关系
简单的讲就是:SqlSessionFactoryBuilder通过建造者模式构建SqlSessionFactory对象,而SqlSessionFactory可以通过openSession()方法获取SqlSession对象。
使用过程如下:
// 读取配置文件mybatis-config.xml
InputStream config = Resources.getResourceAsStream("mybatis-config.xml");
// 根据配置文件构建SqlSessionFactory
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(config);
SqlSessionFactory是每个MyBatis应用的核心
作用:创建SqlSession实例
openSession(boolean autoCommit)
SqlSession对象
包含了执行SQL所需的所有方法
非线程安全,不能共享
对应一次数据库会话,会话结束必须关闭
1.2.2 mybati配置文件讲解
配置properties元素
配置properties元素的两种方式
通过指定外部属性文件,如:database.properties
<properties resource="database.properties" />
直接配置property子节点
<properties>
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/……" />
<property name="user" value="root" />
<property name="password" value="123456" />
</properties>
若两种方式同时都用了,哪种方式生效?
settings元素
用来修改MyBatis运行时的行为方式
主要是MyBatis的一些全局配置属性的设置
<settings>
<!--是否启用延迟加载-->
<setting name="lazyLoadingEnabled" value="false" />
<setting name="logImpl" value="LOG4J" />
</settings>
typeAliases元素
类型别名
在SQL映射文件中简化冗长的Java类名 有如下两种配置方式
<typeAliases>
<typeAlias alias="info" type="com.dts.entity.Info"/>
</typeAliases>
<typeAliases>
<package name="com.dts.entity" />
</typeAliases>
environments元素
environments元素
可以通过environment子元素节点配置MyBatis的多套运行环境
必须通过default属性指定其中一个为默认运行环境
##### mappers元素
SQL映射文件定义SQL语句映射
需在配置中引用SQL映射文件
方式一:使用类资源路径获取资源
方式二:使用Mapper接口的包路径