需要热血
——文记
目录
ORM框架
mybatis框架的使用
关于mybatis
起源
特点
案例
配置
核心配置
environments 是配置mybatis当前工作的数据库环境的地方
dataSource 表示的是数据源;至少会包括该连接数据库的四种信息
transactionManager
typeAliases
properties
settings
mappers
日志配置
基本封装
映射
映射sql
select
insert
update
delete
ResultMap
一对一映射
一对多映射
动态
if
choose
where
trim
分页查询插件
ORM框架
mybatis框架的使用
使用mybatis框架: 1.创建maven项目。 2.引用mybatis框架的依赖信息(坐标信息) mysql驱动依赖信息 3.编写配置文件 添加数据库连接信息 添加映射关系 4.根据mybatis,创建映射接口和映射文件 规则1: 映射接口的名字和映射文件的名字相同。 规则2: namespace 定义接口的全限定名 规则3: id=方法名 resultType=方法的返回值全限定名 规则4: 去掉分号 参数值通过方法获取 #{参数名} 5.编写测试类,获取sqlSession对象--获取映射器接口的对象--执行查询方法(Mybatis帮助我们实现了接口,并实现了抽象方法) 6.考虑mybatis执行需要提供日志信息: 添加日志框架 及 日志的配置信息
关于mybatis
起源
MyBatis 是一款优秀的持久层开源框架,它支持自定义 SQL 、存储过程以及高级映射。 MyBatis 免除了 几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。 MyBatis 可以通过简单的 XML 或注解来配置 和映射原始类型、接口和 Java POJO (Plain Old java Objects,普通老式 Java 对象)为数据库中的记录。
MyBatis 的前身是 iBATIS , iBATIS 于 2002 年由 ClintonBegin 创建。 MyBatis3 是 iBATIS 的全新设计,支持注解和Mapper 。
MyBatis 流行的主要原因在于它的简单性和易使用性。在 Java 应用程序中,数据持久化层涉及到的工作有:
将从数据库查询到的数据生成所需要的 Java 对象
将Java 对象中的数据通 SQL 持久化到数据库中
MyBatis 通过抽象底层的 JDBC 代码,自动化封装 SQL 结果集产生 Java 对象、 Java 对象的数据持久化数据库中的过程使得对SQL 的使用变得容易。
特点
通过上面我们了解到 Mybatis 的主要功能是 数据持久化 ,这个时候你可能会回想起之前的 JDBC 课程,既 然我们已经掌握了JDBC 为什么还要再去学习 Mybatis 呢?主要原因有以下几个方面:
1. 消除了大量的 JDBC 冗余代码
2. 有低的学习曲线
3. 能很好地与传统数据库协同工作
4. 提供了与 Spring 框架的集成支持
5. 提供了与第三方缓存类库的集成支持
6. 引入了更好的性能
案例
编辑 pom.xml 文件,导入 项目依赖的 jar 包。
访问 web 远程仓库地址: https://www.mvnrepository.com/ 下载依赖的 jar 包
org.mybatis
mybatis
3.4.6
log4j
log4j
1.2.17
mysql
mysql-connector-java
8.0.20
在 resources 目录下创建 mybatis-config.xml 配置文件
在 resources 目录下创建 log4j.propertis 文件
在 bean 包中创建 Student.java
在 mapper 包中创建 StudentMapper 接口
在 resources 目录下先创建文件夹 com.briup.mapper ,然后在目录中创建 StudentMapper.xml 文件
编写测试代码。测试查询功能
配置
核心配置
在核心配置的添加标签一定要按照以下顺序添加
1. properties
2. settings
3. typeAliases
4. environments
5. mappers
environments 是配置 mybatis 当前工作的数据库环境的地方
MyBatis 可以支持配置多个 dataSource 环境,可以将应用部署到不同的环境上,如 DEV( 开发环境 ) ,
TEST (测试环境), QA (质量评估环境) ,UAT( 用户验收环境 ),PRODUCTION (生产环境),可以通过将
默认 environments 值设置成想要的 environment 的 id 值 .
dataSource 表示的是数据源 ; 至少会包括该连接数据库的四种信息
POOLED : MyBatis 会创建一个数据库连接池,连接池中的一个连接将会被用作数据库操作 ( 分配,
管理,释放 ) 。一旦数据库操作完成, MyBatis 会将此连接返回给连接池。
transactionManager
JDBC 事务管理器的使用,是在 JDBC 程序负责管理数据库连接的生命周期(提交、回退等等)的时候。
如果将 TransactionManager 属性设置成 JDBC , MyBatis 内部将使用 JdbcTransactionFactory 类创建
TransactionManager 。例如,部署到 ApacheTomcat 的应用程序,需要应用程序自己管理事务。
typeAliases
properties
属性配置元素 properties 可以将配置值写死到 mybatis-config.xml 中 , 也可以具体到一个属性文件中 , 并且使
用属性文件的 key 名作为占位符。
在上述的配置中,我们将数据库连接属性配置到了 application.properties 文件中,并且为 driver , URL 等
属性使用了占位符 .
在 db.properties 文件中配置数据库连接参数,如下所示:
settings
大多数情况下,【这些参数使用它们的默认值即可】,不需要我们单独设置
mappers
Mapper 文件中包含了要执行的 SQL 语句,我们需要在 mybatis-config.xml 文件中配置 Mapper 文件的位置。
package 属性用来指向可以找到 Mapper 接口的包名
日志配置
Mybatis 通过使用内置的日志工厂提供日志功能。内置日志工厂将会把日志工作委托给日志类实现
1. 添加 log4j 依赖的 jar 包
2. 创建 log4j 的配置文件
基本封装
每次读取配置文件 , 产生一个工厂对象 SqlSessionFactory, 然后再生成出 SqlSession 对象 , 这个过程虽然并不
复杂 , 但是也都是一些重复的代码流程 , 所以我们可以对其进行一个简单的封装。
映射
关系型数据库和 SQL 是经受时间考验和验证的数据存储机制。和其他的 ORM 框架如 Hibernate 不同,
MyBatis 鼓励开发者可以直接使用数据库,而不是将其对开发者隐藏,因为这样可以充分发挥数据库服务
器所提供的 SQL 语句的巨大威力。
与此同时, MyBaits 消除了书写大量冗余代码的痛苦,它让使用 SQL 更容易。在代码里直接嵌套 SQL 语句
是很差的编码实践,并且维护起来困难。 MyBaits 使用了映射文件或注解来配置 SQL 语句。
映射 sql
select
insert
update
delete
ResultMap
ResultMaps 被用来将 SELECT 语句的结果集映射到 java 对象属性中。在映射文件中,可以先定义出结果集
映射 resultMap ,然后在一些 SELECT 语句上引用这个 resultMap 。
所以, ResultMap 就是提前定义好的一个映射规则, select 语句可以使用 ResultMap 的映射规则来处理查询
结果。
MyBatis 的结果集映射 resultMap 非常强大,可以使用它指定 sql 查询出的结果集,会被怎么处理并封装成
对象,也可以使用它完成复杂查询的映射,例如一对一、一对多关系的 SELECT 语句。
在 select 标签中,引用这个 resultMap
一对一映射
一对多映射
动态
if
标签被用来通过条件嵌入 SQL 片段,如果条件为 true ,则相应地 SQL 片段将会被添加到 SQL 语句中。
可以根据学生 id 或者学生姓名查询学生信息
choose
有时候,查询功能是以查询类别为基础的。
例如,页面中有一个下拉列表,可以选择查询的类别,可以选择根据讲师查询、或者根据课程名查询、 或者根据时间查询等等,选择了列表之后,再输入关键字进行查询。MyBatis 提供了 标签可以支持此类 型的查询处理。
where
有时候,所有的查询条件应该是可选的。
在需要使用至少一种查询条件的情况下,可以直接使用 WHERE 子句,如果有多个条件,需要在条件中添
加 AND 或 OR 。 MyBatis 提供了 元素支持这种类型的动态 SQL 语句。
trim
元素和 元素类似,同时 提供了添加 前缀 / 后缀或者移除前缀 / 后缀的功能。
prefix 表示有一个 if 成立则插入 where 语句
suffix 表示后缀 , 和 prefix 相反
suffixOverrides="and" 表示如果最后生成的 sql 语句多一个 and, 则自动去掉 .
prefixOverrides 的意思是处理前缀 , 和 suffixOverrides 相反
分页查询插件
https://pagehelper.github.io/
reasonable :分页合理化参数,默认值为 false 。当该参数设置为 true 时, pageNum<=0 时会
查询第一页, pageNum>pages (超过总数时),会查询最后一页。默认 false 时,直接根据
参数进行查询。
helperDialect :指定连接数据库为 mysql