Mybatis简介

2.1. MyBatis简介

  • 一对多 :resultmap + collection
  • 多对一 :resultmap + association
  • 多对多 :resultmap + collection + association
  • 常见的持久层框架 : MyBatis , MyBatis-Plus , Hibernate
  1. Mybatis一开始叫 IBatis ,所以我们项目中报错说 IBatis 的就是Mybatis错了,是一个基于java的持久层框架,有以下特性
  • 是支持定制化sql(xml文件中有对应的mapper映射),是存储过程以及高级映射的优秀持久层框架
  • 避免了几乎所有的JDBC代码和手动设置参数以及获取结果集
加载数据库驱动程序:通过反射的方式加载驱动包,现在基本无需手动添加驱动包了。

建立数据库连接:使用DriverManager.getConnection()方法创建与数据库的连接,需要提供数据库的URL、用户名和密码。

创建Statement对象:使用connection.createStatement()方法创建一个Statement对象,用于执行SQL语句。

执行SQL语句:使用Statement对象的executeQuery()方法执行查询语句,或者使用executeUpdate()方法执行更新语句。

处理结果集:如果执行的是查询语句,可以使用ResultSet对象来处理查询结果。

关闭连接:使用connection.close()方法关闭数据库连接,释放资源。
  • 能够使用简单的xml或者注解去配置和 原始映射 ,将接口以及java对象映射成数据库中的记录
  • 是一个半自动的ORM(Object Relation Mapping)框架 --> 对象关系映射
  • 动态SQL : if、where、trim、choose、when、otherwrise,foreach
  • SQL 和 Java 编码分开,功能边界清晰。Java 代码专注业务、SQL 语句专注数据
  1. 持久化层技术对比
  • JDBC : SQL写在java代码中,耦合度高,不易维护需要频繁修改,并且代码冗长,开发效率太低
  • Hibernate 和 JPA : 程序中的长难复杂 SQL 需要绕过框架 ,反射操作太多,导致数据库性能下降,开发效率高
  • Mybatis : 轻量级,性能出色,SQL和Java代码分开写的,功能边界清晰 ,开发效率略低于第二个但是可以接受
  1. Mybatis的核心配置文件 : mybatis-config.xml ,spring项目后就不用写了,主要是配置数据库的一些基本信息
    • 注意 : 配置文件标签必须按照固定的顺序
  1. 创建项目过程 :
  • 首先添加依赖
  • 创建配置文件以及实体类
  • 编写mapper接口,相当于是之前的dao层接口,区别是,mapper只是接口,不需要写实现类
  • 创建映射文件,也就是ORM对象映射关系对象指的是java实体类对象,关系指的是关系型数据库,映射指的是二者之间的对应关系
  • 映射文件命名规则:
    • 映射文件写的是sql语句用来访问和操作表
    • 一个映射文件对应一个实体类对应一张表的操作
    • 映射类文件放在src/main/recourses/mapper目录下
    • 接口和映射文件命名空间要保持一致
    • 接口中方法的方法名和映射文件id属性保持一致
      • 映射文件需要注意的点 : 查询必须是设置属性 resultType 或 resultMap
id:表示自定义映射的唯一标识
type:查询的数据要映射的实体类的类型
子标签:
    id:设置主键的映射关系
    result:设置普通字段的映射关系
    association:设置多对一的映射关系
    collection:设置一对多的映射关系
        ofType:设置collection标签所处理的集合属性中存储数据的类型
属性:
property:设置映射关系中实体类中的属性名
column:设置映射关系中表中的字段名

2.2. MyBatis获取参数

  1. 两种方式 : ${}#{}
  • ${}的本质是字符串拼接(想like), #{}本质是占位符
  • ${}是使用字符串拼接去拼接sql语句,如果为字符串类型或者是日期类型的字段赋值需要手动加单引号
  • #{}使用占位符赋值拼接sql,为日期类型或者是字符串类型赋值会自动添加引号;@Param 标识参数,不然没办法自动找到谁是谁
  • #{}可以防止sql注入, ${}需要手动设置防止sql注入

2.3. Mybatis的缓存

  1. 一级缓存 : SqlSession级别的,通过同一个SqlSession查询的数据会被缓存,下次查询数据就直接从缓存中获取,不会从数据库重新访问。一级缓存失效 :
    • 不同的SqlSession对应不同的缓存
    • 同一个SqlSession但是查询条件不同
    • 同一个SqlSession但是两次执行期间执行了增删改操作
    • 同一个SqlSession但是两次查询期间手动清除了缓存
  1. 二级缓存 :SqlSessionFactory 级别的,通过同一个SqlSessionFactory 创建的SqlSession查询结果会被缓存
    • 开启条件 : 核心配置文件中,设置全局属性 cacheEnabled="true",默认就是true
    • 在映射文件中添加标签<cache />
  • 二级缓存必须在SqlSession关闭 或者提交后才会有效
  • 查询的数据所转换的实体类型必须实现序列化接口
  • 二级缓存失效 : 两次查询之间执行了任意的增删改操作
  1. 整合第三方缓存EHCache
  2. MyBatis缓存查询数据执行顺序
  • 先二级,二级中可能存在其他程序已经查出来的数据,直接拿来用
  • 如果二级没查到就查一级
  • 一级没查到就查数据库
  • SqlSession关闭之后,一级缓存中的数据会写入二级缓存

2.4. Mybatis逆向工程

  1. 正向工程 :先创建java实体类,再由框架根据实体类生成数据库表
  2. 逆向工程 :先创建数据库表,再由框架根据数据库表生成【1】Java 实体类【2】Mapper 接口【3】 Mapper 映射文件
<!-- 依赖MyBatis核心包 -->
<dependencies>
  <dependency>	
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.7</version>
  </dependency>
</dependencies>
<!-- 控制Maven在构建过程中相关配置 -->
<build>
  <!-- 构建过程中用到的插件 -->
  <plugins>
    <!-- 具体插件,逆向工程的操作是以构建过程中插件形式出现的 -->
    <plugin>
      <groupId>org.mybatis.generator</groupId>
      <artifactId>mybatis-generator-maven-plugin</artifactId>
      <version>1.3.0</version>
      <!-- 插件的依赖 -->
      <dependencies>
        <!-- 逆向工程的核心依赖 -->
        <dependency>
          <groupId>org.mybatis.generator</groupId>
          <artifactId>mybatis-generator-core</artifactId>
          <version>1.3.2</version>
        </dependency>
        <!-- 数据库连接池 -->
        <dependency>
          <groupId>com.mchange</groupId>
          <artifactId>c3p0</artifactId>
          <version>0.9.2</version>
        </dependency>
        <!-- MySQL驱动 -->
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.8</version>
        </dependency>
      </dependencies>
    </plugin>
  </plugins>
</build>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值