Mybatis概述

本文详细介绍了Mybatis框架的概述、入门案例、核心组件、对象分析、事务管理、对象映射、动态SQL、分页插件、缓存机制及反向生成插件等内容。从JDBC的繁琐操作对比中,突显Mybatis简化数据库操作的优势,通过实例演示了如何配置、创建SqlSession、Mapper接口、映射文件,并展示了如何进行增删改查操作。同时,还讨论了Mybatis的全局配置文件、日志配置和事务管理策略,以及如何通过ThreadLocal优化SqlSession工具类。文章深入浅出,旨在帮助读者全面理解和掌握Mybatis的使用。
摘要由CSDN通过智能技术生成

1、Mybatis概述
1.1 JDBC编程

在这里插入图片描述

1.2.说说你对Mybatis的了解
1.Mybatis 基于java的持久层框架,它的内部封装了JDBC,让开发人员只需要关注SQL语句本身,不需要花费精力在驱动的加载、连接的创建、Statement的创建等复杂的过程。

2.Mybatis 通过 XML 或注解的方式将要执行的各种的 statement 配置起来,并通过 java 对象和 statement 中的 sql 的动态参数进行映射生成最终执行的SQL 语句,最后 由mybatis框架执行SQL,并将结果直接映射为java对象 。
3.采用了 ORM思想 解决了实体类和数据库表映射的问题。对 JDBC进行了封装 ,屏蔽了 JDBCAPI 底层的访问细节,避免我们与 jdbc 的 api 打交道,就能完成对数据的持久化操作。

1.3 Mybatis解决的问题
1、数据库连接的创建、释放连接的频繁操作造成资源的浪费从而影响系统的性能。

2、SQL语句编写在代码中,硬编码造成代码不容易维护,实际应用中SQL语句变化的可能性比较大,一旦变动就需要改变java类。

3、使用preparedStatement的时候传递参数使用占位符,也存在硬编码,因为SQL语句变化,必须修改源码。

4、对结果集的解析中也存在硬编码。

2、Mybatis入门案例
2.1 创建数据库和表
CREATE TABLE team (
teamId int NOT NULL AUTO_INCREMENT COMMENT ‘球队ID’,
teamName varchar(50) DEFAULT NULL COMMENT ‘球队名称’,
location varchar(50) DEFAULT NULL COMMENT ‘球队位置’,
createTime date DEFAULT NULL COMMENT ‘球队建立时间’,
PRIMARY KEY (teamId)
) ENGINE=InnoDB AUTO_INCREMENT=1003 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
2.2 创建maven项目,添加Mybatis的jar依赖
创建个java的maven项目

2.3 编写Mybatis的配置文件
一般情况下:配置文件的名称可以自定义,使用mybatis.xml。配置文件放置在java/resources中。

头文件去官网中复制粘贴。提供一个中文的网站。Mybatis网址

配置文件中配置mybatis的环境(数据源、事务类型)

2.4 编写实体类
实体类中的属性必须与表中的列名保持一致,默认构造+set+get(不能少)

2.5 编写ORM映射文件
我们是针对实体类Team.java和表Team进行ORM映射.

Mybatis 框架中, ORM 映射是针对 SQL 语句进行, Mybatis 框架将 SQL 语句抽取到了 XML 中。所以我们需要针对每个实体类编写 XML 映射文件。
2.5.1 XML映射文件必须与实体类在同一个包下面
2.5.2 XML映射文件名称必须是实体类名称一致
头文件在网站复制即可。Mybatis网址

注意namespace、id、resultType分别表示什么。

2.6 将映射文件注册到mybatis的配置文件中

2.7 配置映射文件的扫描位置
pom.xml 文件配置映射文件的扫描路径
因为src/main/java目录下的配置完文件(.xml/.properties)是无法读取到,需要在pom.xml中去指定配置文件的扫描路径

2.8 使用Mybatis框架的核心接口测试

2.9. 配置日志文件
2.9.1.添加jar依赖

2.9.2.添加日志配置文件
在 resource 下添加 log4j.properties 配置文件

Global logging configuration info warning error

log4j.rootLogger=DEBUG,stdout

Console output…

log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
2.9.3.在mybatis配置文件中添加日志的配置

2.10.入门案例的增删改查
2.10.0.注意:手动提交事务
增删改操作,必须手动提交事务,否则不生效

因为上面在mybatis配置中,指定了JDBC方式(Connection)管理事务,默认自动提交是false,

解决1.每执行一次增删改sql,我们手动提交sqlSession.commit()

解决2.在获取sqlSession会话时,开启自动事务,参数true,即factory.openSession(true)

这只是在dao层操作事务,不推荐,将来事务都是在service层通过声明式事务管理

实体类

2.10.0.在测试类中使用测试注解@Before @After减少重复代码

2.10.1 根据ID查询单个对象
parameterType:参数类型,sql中占位符类型,该属性基本类型时可省略,实体类型则不可省略

resultType:返回类型,执行这条sql后返回什么类型的结果,基本类型可省略不写,若集合则其元素类型–>

报错原因:实体类没有加默认构造方法

Team.xml的映射文件中添加:

测试类中添加如下内容:

2.10.2 增删改
Team.xml 的映射文件中添加:

测试类中添加如下方法:

2.10.3.查询所有
映射文件添加

测试类添加

3、Mybatis对象分析
3.1 Resources
Resources 类,顾名思义就是资源,用于读取资源文件。其有很多方法通过加载并解析资源文件,返回不同类型的 IO 流对象。
3.2 SqlSessionFactoryBuilder
SqlSessionFactory 的 创 建 , 需 要 使 用 SqlSessionFactoryBuilder 对 象 的 build() 方 法 。 事实上使用 SqlSessionFactoryBuilder 的原因是将SqlSessionFactory 这个复杂对象的创建交由 Builder 来执行,也就是使用了 建造者设计模式 。
建造者模式 : 又称生成器模式 , 是一种 对象的创建模式 。 可以将一个产品的内部表象与产品的生成过程分割开来 , 从而可以使一个建造过程生成具有不同的内部表象的产品( 将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示 ). 这样用户只需指定需要建造的类型就可以得到具体产品, 而不需要了解具体的建造过程和细节 .
在建造者模式中, 角色分指导者 (Director) 与建造者 (Builder): 用户联系指导者 , 指导者指挥建造者 , 最后得到产品 . 建造者模式可以强制实行一种分步骤进行的建造过程.
SqlSessionFactoryBuilder 充当的就是建造者角色 ,sqlSession就是我们最后得到的产品。

3.3 SqlSessionFactory
SqlSessionFactory 接口对象是一个重量级对象(系统开销大的对象),是 线程安全 的,所以一个应用只需要一个该对象。创建SqlSession 需 SqlSessionFactory 接口的 openSession() 方法。
默认的 openSession()方法没有参数,它会创建有如下特性的 SqlSession :
1 、会开启一个手动提交的事务(也就是不自动提交)。
2 、将从由当前环境配置的 DataSource 实例中获取 Connection 对象。事务隔离级别将会使用驱动或数据源的默认设置。
3 、预处理语句不会被复用,也不会批量处理更新。
openSession(true) :创建一个有自动提交功能的 SqlSession
openSession(false) :创建一个非自动提交功能的 SqlSession ,需手动提交
openSession()

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值