MyBatis 0基础入门

MyBatis是一个实现数据持久化的开源框架。

ORMapping:Object Relation Mapping 对象关系映射
Java到Oracle 的映射,以面向对象的思想管理关系型数据库

在这里插入图片描述

开发方式:
  • 使用原生接口
  • Mapper代理实现自定义接口

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

原生接口方法

  1. MyBatis 框架需要开发者自定义SQL语句,写在Mapper.xml文件中,实际开发中,会为每个实体类创建对应的Mapper.xml,定义管理该对象数据的SQL。
    在这里插入图片描述
  • namespace 通常设置为文件所在包+文件名的形式
  • insert 标签表示执行添加操作
  • select 标签表示执行查询操作
  • update标签表示执行更新操作
  • delete 标签表示执行删除操作
  • id 是实际调用MyBatis 方法时需要用到的参数
  • parameter Type 是调用对应方法时参数的数据类型
  1. 在全局配置文件 config.xml中注册AccountMapper.xml
    在这里插入图片描述

  2. 调用MyBatis的原生接口执行添加操作

在这里插入图片描述

Mapper代理实现自定义接口

  • 自定义接口 定义相关业务方法
  • 编写与方法相对应的Mapper.xml
  1. 自定义接口 interface
    在这里插入图片描述
  2. 创建接口对应的Mapper.xml,定义接口对应的sql语句
    statement标签可根据sql执行的任务选择 insert select delete update。
    MyBatis会根据规则自动创建接口实现类的代理对象。
    规则:
  • Mapper.xml中 namespace 为接口的全类名。
  • Mapper.xml中 statement 的 id 为接口中对应的方法名。
  • Mapper.xml中 statement 的 parameterType 和接口中对应方法的参数类型一致。
  • Mapper.xml中 statement 的 resultType 和接口中对应方法的返回值类型一致。
    在这里插入图片描述
  1. 在config.xml中注册 AccountRepository.xml
    在这里插入图片描述
  2. 调用接口的代理对象完成相关的业务操作
    在这里插入图片描述

在这里插入图片描述

Mapper.xml

  • statement 标签: select update delete insert
  • parameterType:参数数据类型
    1. 基本数据类型,通过id查询Account
      在这里插入图片描述

    2. String类型,用name查询account
      在这里插入图片描述

    3. 包装类,通过id查询account
      基本数据类型无法接收null值
      在这里插入图片描述

    4. 多个参数,通过 name 和 age 查询 account
      在这里插入图片描述
      arg0和arg1 或者param1和param2

    5. Java Bean
      在这里插入图片描述

  • resultType:结果类型
    1. 基本数据类型, 统计account总数
      在这里插入图片描述
    2. 包装类, 统计account总数
      在这里插入图片描述
    3. String类, 通过id查询account的name
      在这里插入图片描述
    4. java bean类型

级联查询

  • 一对多 一个班级对应多个学生
    student
    在这里插入图片描述
    classes
    在这里插入图片描述
    studentRepository
    在这里插入图片描述
    studentRepository.xml
    在这里插入图片描述

根据班级查询学生列表
classRepository
在这里插入图片描述
classRepository.xml
在这里插入图片描述
集合用collection标签

逆向工程

MyBatis 框架需要: 实体类、自定义Mapper接口、Mapper.xml
传统开发中上述三个组件需要开发者手动创建,逆向工程可以帮助开发者自动创建三个组件,减轻开发者的工作量,提高工作效率。

缺点:

  • 逆向工程只能创建一次
  • 更改表结构后需要重新执行逆向工程
如何使用

MyBatis Generator,简称MBG,是一个专门为MyBatis框架开发者定制的代码生成器,可自动生成MyBatis框架所需的实体类、Mapper接口、Mapper.xml,支持基本的CRUD操作,但是一些相对复杂的SQL需要开发者自己来完成。
1. 新建Maven工程,pom.xml

<dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.44</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.2</version>
        </dependency>
    </dependencies>
  1. 创建MBG配置文件 generatorConfig.xml
    • jdbcConnection 配置数据库连接信息
    • javaModelGenerator 配置JavaBean的生成策略
    • sqlMapGenerator 配置sql映射文件生成策略
    • javaClientGenerator 配置mapper接口的生成策略
    • table 配置目标数据表(tableName:表名, domainObjectName:JavaBean类名)

MyBatis缓存

使用缓存可以减少java应用与数据库的交互次数,从而提升程序的运行效率,第一次查询出之后会自动将该对象保存在缓存中,下一次无需再次访问数据库。

分类
  1. 一级缓存:SqlSession级别,默认开启,且不能关闭。
    操作数据库时需要创建SqlSession对象,在对象中有一个HashMap用于存储缓存数据,不同SqlSession之间缓存数据区域是互不影响的。

    一级缓存的作用域是SqlSession范围的,当在同一个SqlSession中执行两次相同的SQL语句时,第一次执行完毕会将结果保存到缓存中,第二次查询时直接从缓存中获取。

    需要注意的是,如果SqlSession执行了DML操作(insert、update、delete),MyBatis必须将缓存清空,以保证数据的准确性。
    在这里插入图片描述

  2. 二级缓存:Mapper级别,默认关闭,可以开启
    使用二级缓存时,多个SqlSession使用同一个Mapper的SQL语句操作数据库,得到的数据会存在二级缓存区,同样是使用HashMap进行数据存储,相较于一级缓存,二级缓存范围更大,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。

    二级缓存是多个SqlSession共享的,其作用域是Mapper的同一个namespace,不同的SqlSession两次执行相同的namespace下的sql语句,参数也相等,则第一次执行成功后会将数据保存到二级缓存中,第二次可直接从二级缓存中取出数据。

MyBatis自带的二级缓存
  • config.xml中配置开启二级缓存
    在这里插入图片描述
  • Mapper.xml中配置二级缓存
  • 实体类实现序列化接口
    在这里插入图片描述
  1. ehcache二级缓存

MyBatis 动态SQL

使用动态SQL可简化代码开发,减少开发者工作量,程序可以自动根据业务参数来决定SQL的组成。

  • if 标签
    在这里插入图片描述
  • where 标签
    where标签可以自动判断是否要删除语句块中的 and 关键字,如果检测到 where 直接跟 and 拼接,则自动删除 and 。
    通常情况下,if和where结合起来使用。

在这里插入图片描述

  • choose when
    在这里插入图片描述
  • trim标签
    trim标签中的prefix和suffix属性会被用于生成实际的SQL语句,会和标签内部的语句进行拼接。如果语句前后出现了prefixOverrides或者suffixOverrides属性中指定的值,myBatis框架会自动将其删除。
    在这里插入图片描述
  • set标签
    set标签用于update操作,会自动根据参数选择生成SQL语句。
    在这里插入图片描述
  • foreach标签
    迭代生成一系列值,主要用于SQL的in语句。
    select * from t_account where id in (1,4,5);
    在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值