Mybatis知识点全总结(一)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: Mybatis知识点全总结

一.什么是 MyBatis?


MyBatis 是一款优秀的持久层框架,原名叫ibatis,后来迁移到GitHub后改名为Mybatis。它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。


1.框架是什么?


框架就是一个软件,完成了部分功能。框架是一种规则,保证开发者遵循相同的方式开发程序。框架提倡“不要重复造轮子”,对基础功能进行封装。框架是可以升级和改造的,框架是安全的。但是框架只对某一个方面有用,不是全能的。


框架的优点:


极大地提高了开发效率

统一的编码规则,利于团队管理

灵活的配置,拥有更好的维护性

Mybatis是持久层框架,使用XML将SQL与程序解耦,便于维护。底层基于JDBC。


2.MyBatis的开发流程


引入MyBatis的Maven依赖

创建核心配置文件

创建实体(entity)类

创建Mapper映射文件

初始化sqlSessionFactory

利用Sqlsession对象操作数据


3.JDBC的优缺点


优点

直观,好理解

缺点

创建很多的对象(比如:Connection,Preparedstatement,ResultSet等)。

注册驱动非常麻烦。

SQL语句和业务逻辑代码混在了一起,不好管理。


二.MyBatis的基础知识


后面的学习是通过案例实践来总结知识点的,这些案例要用到的资源有数据库的建库脚本,我把它上传上了我CSDN的资源文件了。链接: 数据建库脚本,我用的是MySQL数据库,关于脚本怎么使用,点开idea专业版右侧的database添加MySQL数据库后,右键选择run script后选择此文件来创建数据库。如果你不会使用,评论区或者私信联系我,我24小时在线答疑。


1.引入MyBatis的Maven依赖


使用 Maven 来构建项目,则需将下面的依赖代码配置于 pom.xml 文件中,还要导入jdbc驱动和其他的依赖,这里不列举:


<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>x.x.x</version>
</dependency>

2.创建并编写核心配置文件


XML 配置文件中包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)等。MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。


配置文件的详细讲解


在项目的Resource文件夹下,创建一个mybatis-config.xml的核心配置文件。配置文件的名字其实也可以去其他的名字。


下面就是这个配置文档的代码的一个案例,通过后面的学习,会有更多其他配置项的详细讲解。


<?xml version="1.0" encoding="UTF-8" ?>
<!--这是xml的约束,根标签为configuration-->
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>  
    <!--驼峰命名转换-->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
  <!--environments里面可以创建很多environment的环境,default指定默认的环境配置(id)-->
    <environments default="dev">
        <!--environment环境配置,不同的环境用不 同的id-->
        <environment id="dev">
            <!--采用jdbc的方式对数据库的事务进行commit/rollback-->
            <transactionManager type="JDBC"/>
            <!--采用连接池的方式管理数据库连接-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/babytun"/>
                <property name="username" value="root"/>
                <property name="password" value="zc20020106"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mappers/goods.xml"/>
    </mappers>
</configuration>

这里我们就创建好了一个最基本的mybatis配置文件了,当然,还有很多可以在 XML 文件中配置的选项,上面的示例仅罗列了最关键的部分。下面我来对里面的配置项依次解释:


首先,就是每个XML文件都有的声明:


<?xml version="1.0" encoding="UTF-8" ?>


然后定义了该配置文件的约束条件,约束了根标签为configuration和其他的一些配置项约束:


<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">


环境配置(environments)


MyBatis 可以配置多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema 的多个生产数据库中使用相同的 SQL 映射。还有许多类似的使用场景。

不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。如果忽略了环境参数,那么将会加载默认环境

所以,如果你想连接两个数据库,就需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。而如果是三个数据库,就需要三个实例,依此类推.


默认使用的环境 ID(比如:default=“dev”)。

每个 environment 元素定义的环境 ID(比如:id=“dev”)。

事务管理器的配置(比如:type=“JDBC”)。

数据源的配置(比如:type=“POOLED”)。

默认环境和环境 ID 顾名思义。 环境可以随意命名,但务必保证默认的环境 ID 要匹配其中一个环境 ID。


事务管理器(transactionManager)


在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]")


JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。

MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 J2EE 应用服务器的上下文)。 默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为。


<transactionManager type="MANAGED">
  <property name="closeConnection" value="false"/>
</transactionManager>


[提示]:如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器,因为 Spring 模块会使用自带的管理器来覆盖前面的配置。


数据源(dataSource)


有三种内建的数据源类型(也就是 type="[UNPOOLED|POOLED|JNDI]"):

UNPOOLED:这个数据源的实现会每次请求时打开和关闭连接。虽然有点慢,但对那些数据库连接可用性要求不高的简单应用程序来说,是一个很好的选择。

UNPOOLED 类型的数据源仅仅需要配置以下 5 种property属性:


image.png

POOLED: 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这种处理方式很流行,能使并发 Web 应用快速响应请求。


除了上述提到 UNPOOLED 下的属性外,还有更多属性用来配置 POOLED 的数据源。可以根据自己以后的需求来进行配置:


image.png

image.png

对于配置文件的mappers标签,我们后面再解释。


3.创建实体类


上一步,创建并编写好了配置文件。现在要创建数据表所对应的实体类。我们在Java目录下建一个org.haiexijun.entity的一个包,用来放置所有与数据表对应的实体类。这里就以数据库中的t_goods这张表为例,创建一个实体类。我们给这个实体类取名为Goods.然后按照JavaBean的相关的规范来创建字段和get、set方法。


package org.haiexijun.entity;
public class Goods {
    private Integer goodId;//商品编码
    private String title;//标题
    private String subTitle;//子标题
    private Float  originalCost;//原始的价格
    private Float currentPrice;//当前的价格
    private Float discount;//折扣率
    private Integer isFreeDelivery;//是否包邮。1包邮,0不包邮
    private Integer categoryId;//分类编号
    public Integer getGoodId() {
        return goodId;
    }
    public void setGoodId(Integer goodId) {
        this.goodId = goodId;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getSubTitle() {
        return subTitle;
    }
    public void setSubTitle(String subTitle) {
        this.subTitle = subTitle;
    }
    public Float getOriginalCost() {
        return originalCost;
    }
    public void setOriginalCost(Float originalCost) {
        this.originalCost = originalCost;
    }
    public Float getCurrentPrice() {
        return currentPrice;
    }
    public void setCurrentPrice(Float currentPrice) {
        this.currentPrice = currentPrice;
    }
    public Float getDiscount() {
        return discount;
    }
    public void setDiscount(Float discount) {
        this.discount = discount;
    }
    public Integer getIsFreeDelivery() {
        return isFreeDelivery;
    }
    public void setIsFreeDelivery(Integer isFreeDelivery) {
        this.isFreeDelivery = isFreeDelivery;
    }
    public Integer getCategoryId() {
        return categoryId;
    }
    public void setCategoryId(Integer categoryId) {
        this.categoryId = categoryId;
    }
}


4.创建Mapper XML映射器


MyBatis 的真正强大在于它的语句映射,这是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 致力于减少使用成本,让用户能更专注于 SQL 代码。我们的SQL语句就是再在里面编写的。


在Resource包下创建mappers文件夹,在里面创建一个名为goods.xml的文件,然后对goods.xml进行如下的配置:


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="goods">
    <!--select语句,id表示select语句的名称,resultType表示返回查询结果为entity对象的结果-->
    <select id="selectAll" resultType="org.haiexijun.entity.Goods">
        select * from t_goods order by goods_id desc limit 10
    </select>
</mapper>


我们首先引入了xml约束,规定了mapper为根标签。mapper根标签有一个属性叫做namespace,值我取为goods。在mapper里面,可以定义select语句等其他语句,我们用<select>标签进行定义查询语句,每个select标签都有一个id值,用来标识各语句。在select标签中要定义resultType属性为实体类的全类名。表示查询结果返回为指定的那一个实体entity。配置完后要在核心配置文件里面引用到这个mapper。在mybatis-config.xml根节点下面添加一个mappers节点:


    <mappers>
        <mapper resource="mappers/goods.xml"/>
    </mappers>


这个节点里面,可以设置我们在goods.xml中定义好的mapper。

SQL 映射文件只有很少的几个顶级元素(按照应被定义的顺序列出


image.png


Mybatis的数据查询


查询语句是 MyBatis 中最常用的元素之一——光能把数据存到数据库中价值并不大,还要能重新取出来才有用,多数应用也都是查询比修改要频繁。 MyBatis 的基本原则之一是:在每个插入、更新或删除操作之间,通常会执行多个查询操作。


Select 元素的属性:


image.png

image.png


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
SQL XML 存储
Mybatis知识点总结
Mybatis知识点总结
210 0
|
SQL Java 数据库连接
MyBatis 小知识点补充(#{} 和 ${})
MyBatis 小知识点补充(#{} 和 ${})
72 0
|
SQL XML Java
MyBatis知识点笔记
MyBatis知识点笔记
190 0
MyBatis知识点笔记
|
SQL XML 存储
Mybatis知识点全总结(二)
Mybatis知识点全总结
110 1
Mybatis知识点全总结(二)
|
SQL 缓存 Java
Mybatis核心知识点整理,常见面试题总结必备!
Mybatis核心知识点整理,面试必备! 🍅 Java学习路线:搬砖工的Java学习路线 🍅 作者:程序员小王 🍅 程序员小王的博客:https://www.wolai.com/wnaghengjie/ahNwvAUPG2Hb1Sy7Z8waaF 🍅 扫描主页左侧二维码,加我微信 一起学习、一起进步 🍅 欢迎点赞 👍 收藏 ⭐留言 📝
228 0
Mybatis核心知识点整理,常见面试题总结必备!
|
SQL 存储 缓存
Mybatis总结
1、MyBatis简介 1.1 MyBatis历史 1.2 MyBatis特性 2、搭建MyBatis 2.1 MySQL不同版本的注意事项 2.2 创建MyBatis的映射文件 3、核心配置文件详解 4、MyBatis获取参数值的两种方式 4.1 单个字面量类型的参数 4.2 多个字面量类型的参数 4.3 map集合类型的参数 4.4 实体类类型的参数 4.5 使用@Param标识参数 5、MyBatis特殊的SQL执行
171 0
Mybatis总结
|
XML SQL Java
Mybatis知识点全总结(四)
Mybatis知识点全总结
161 0
Mybatis知识点全总结(四)
|
SQL 存储 缓存
Mybatis知识点全总结(三)
Mybatis知识点全总结
215 0
Mybatis知识点全总结(三)
|
缓存 Java 数据库连接
mybatis的缓存总结
mybatis的缓存总结
124 0