MyBatis入门1

MyBatis入门1

概述

  1. mybatis是什么?有什么特点?

    它是一款半自动的ORM持久层框架,具有较高的SQL灵活性,支持高级映射(一对一,一对多),动态SQL,延迟加载和缓存等特性,但它的数据库无关性较低

    • 什么是ORM?

      • Object Relation Mapping,对象关系映射。对象指的是Java对象,关系指的是数据库中的关系模型,对象关系映射,指的就是在Java对象和数据库的关系模型之间建立一种对应关系,比如用一个Java的Student类,去对应数据库中的一张student表,类中的属性和表中的列一一对应。Student类就对应student表,一个Student对象就对应student表中的一行数据
    • 为什么mybatis是半自动的ORM框架?

      • 用mybatis进行开发,需要手动编写SQL语句。而全自动的ORM框架,如hibernate,则不需要编写SQL语句。用hibernate开发,只需要定义好ORM映射关系,就可以直接进行CRUD操作了。由于mybatis需要手写SQL语句,所以它有较高的灵活性,可以根据需要,自由地对SQL进行定制,也因为要手写SQL,当要切换数据库时,SQL语句可能就要重写,因为不同的数据库有不同的方言(Dialect),所以mybatis的数据库无关性低。虽然mybatis需要手写SQL,但相比JDBC,它提供了输入映射和输出映射,可以很方便地进行SQL参数设置,以及结果集封装。并且还提供了关联查询和动态SQL等功能,极大地提升了开发的效率。并且它的学习成本也比hibernate低很多

MyBatis开发流程:

  • 引入MyBatis依赖
  • 创建核心配置文件
  • 创建实体(Entity)类
  • 创建Mapper映射文件
  • 初始化SessionFactory
  • 利用SqlSession对象操作数据

JUnit4配置

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.imooc</groupId>
    <artifactId>mybaties</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
    
</project>

引入MyBatis依赖

目的是把需要的jar包都自动导入

pom.xml

在这里插入图片描述

创建核心配置文件mybatis-config.xml

  • MyBatis采用XML格式配置数据库环境信息
  • MyBatis环境配置标签<environment>
  • <environment>包含数据库驱动、URL、用户名与密码

在src > main > resource 目录下创建文件 mybatis-config.xml

mybatis-config.xml

在这里插入图片描述

使用MyBatis连接数据库

SqlSessionFactory

  • SqlSessionFactory是MyBatis的核心对象
  • 用于初始化MyBatis,创建SqlSession对象
  • 保证SqlSessionFactory在应用中全局唯一

SqlSession

  • SqlSession是MyBatis操作数据库的核心对象
  • SqlSession使用JDBC方式与数据库交互
  • SqlSession对象提供了对数据表CRUD

测试:MyBatis数据库连接

MyBatisTestor.java
public class MyBatisTestor {
    @Test
    public void testSqlSessionFactory(){
        try {
            // 利用Reader加载classpath下的mybatis-config.xml核心配置文件
            Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
            // 初始化SqlSessionFactory对象,同时解析mybatis-config.xml文件
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            System.out.println("SessionFactory加载成功");
            SqlSession sqlSession = null;
            try {
                // 创建SqlSession对象,SqlSession是JDBC的扩展类,用于与数据库交互
                sqlSession = sqlSessionFactory.openSession();
                // 创建数据库连接(测试用)
                Connection connection = sqlSession.getConnection();
                System.out.println(connection);
            } catch (Exception e){
                e.printStackTrace();
            } finally{
                if (sqlSession != null){
                    // 如果type="POOLED", 代表使用连接池, close则是将连接回收到连接池中
                    // 如果type="UNPOOLED", 代表直连, close则会调用Connection.close()方法关闭连接
                    sqlSession.close();
                }
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

运行结果:

在这里插入图片描述

初始化工具类MyBatisUtils

主要负责SqlSession的创建和关闭操作

MyBatisUtils.java
package com.imooc.mybatis.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.Reader;

/**
 * ClassName: MyBatisUtils
 * Package: com.imooc.mybatis.utils
 * Description: MyBatisUtils工具类, 创建全局唯一的SqlSessionFactory对象
 *
 * @Author maning
 * @Create 2024/4/24 15:44
 * @Version 1.0
 */
public class MyBatisUtils {
    // 利用static属于类不属于对象,且全局唯一
    private static SqlSessionFactory sqlSessionFactory = null;
    // 利用静态块在初始化类时实例化sqlSessionFactory
    static{
        Reader reader = null;
        try {
            reader = Resources.getResourceAsReader("mybatis-config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
            e.printStackTrace();
            // 初始化错误时,通过抛出异常ExceptionInInitializerError通知调用者
            throw new ExceptionInInitializerError(e);
        }
    }

    // 创建一个新的SqlSession对象
    public static SqlSession openSession(){
        return sqlSessionFactory.openSession();
    }

    // 释放一个有效的SqlSession对象
    public static void closeSession(SqlSession session){
        if(session != null){
            session.close();
        }
    }
}

测试:MyBatis工具类的使用

MyBatisTestor
public class MyBatisTestor{
    @Test
    public void testMyBatisUtils(){
        SqlSession sqlSession = null;
        try {
            sqlSession = MyBatisUtils.openSession();
            Connection connection = sqlSession.getConnection();
            System.out.println(connection);
        }catch(Exception e){    
            throw e;
        }finally {
            MyBatisUtils.closeSession(sqlSession);
        }
    }
}

运行结果:

在这里插入图片描述

本文参考:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值