MyBatis基础

发布时间 2023-12-12 06:45:30作者: 小喵喵_27

1.什么是MyBatis?

MyBatis 是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。与其他ORM框架不同,MyBatis没有将Java对象与数据表关联起来,二十作为Java方法和sql语句的桥梁,我们一般称它为“半自动化ORM”框架。

2.MyBatis能做什么?

  • 定制化SQL,操纵数据库对象
  • 可以使用简单的xml或注解来配置和映射原生类型、接口和Java的POJO为数据库中的记录
  • 动态SQL功能,更加灵活的使用SQL
  • 提供了插件增强机制,可以继承其他的插件,如分页

3.与Hibernate对比

  • Hibernate:全自动化ORM框架,数据库移植性好,基础业务几乎不需要写sql,易学难精,上手简单但熟练使用需要阅读大量文档,框架结构复杂。
  • MyBatis:半自动化ORM框架,数据库移植性一般,基础业务仍需写sql,但是可以通过Mapper来简化,易学易用,上手简单,结构精简清晰。

对比发现 :H适合在需求明确、业务固定的项目中使用;M适合在需求多变,快速迭代的项目中使用

4.注意事项:

  • MyBatis在开发中会书写大量的SQL,对于SQL关键字我们统一大写
  • 在MyBatis标签中书写sql语句是可以不用在句尾加 ;的,但在其他环境还是加上 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

5.MyBatis的基础使用

  • 得到MyBatis配置信息,Configuration类,Configuration负责MyBatis架构中的配置部分,例如:dataSource数据源信息都会交给Configuration去管理;Environment是Configuration 中的一部分,而PooledDataSource和JdbcTransactionFactory又是Environment中的一部分,他们是属于层层递进的关系。其中JdbcTransactionFactory表示事务工厂,当MyBatis 需要新建事务的时候,会通过它来新建;PooledDataSource表示数据源,通过其构造参数,我们传入了数据库url,数据库用户和密码等配置;Configuration可以有多个Environment,因此每个Environment都必须有唯一的id,即代码中的development,将这些配置搭配组合后就是一个可用的Configuration.
  • 通过Configuration 来创建SqlSessionFactory,Mybatis是通过会话的方式来执行sql的,因此我们必须拥有一个会话创建器,即会话工厂。
  • 新建SqlSession来执行sql。有了SqlSessionFactory之后,我们可以方便的新建会话,并通过会话来执行sql
package com.gongrf;

import org.apache.ibatis.datasource.pooled.PooledDataSource;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

@SuppressWarnings({"SqlResolve", "SqlNoDataSourceInspection", "Duplicates"})
public class StartNoXml {
    public static void main(String[] args) throws SQLException {
        // 无需xml配置的方式使用MyBatis
        // 准备jdbc事务类
        JdbcTransactionFactory jdbcTransactionFactory = new JdbcTransactionFactory();
        // 配置数据源
        PooledDataSource dataSource =
                new PooledDataSource("com.mysql.cj.jdbc.Driver",
                        "jdbc:mysql://localhost:3306/sys?useSSL=false",
                        "root", "root123");
        // 配置环境,向环境中指定环境id、事务和数据源
        Environment environment = new Environment.Builder("development")
                .transactionFactory(jdbcTransactionFactory)
                .dataSource(dataSource).build();
        // 新建 MyBatis 配置类
        Configuration configuration = new Configuration(environment);
        // 得到 SqlSessionFactory 核心类
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
        // 开始一个 sql 会话
        SqlSession session = sqlSessionFactory.openSession();
        // 得到 sql 连接并运行 sql 语句
        PreparedStatement preStatement = session
                .getConnection()
                .prepareStatement("SELECT * FROM user WHERE id = ?");
        preStatement.setInt(1, 1);
        ResultSet result = preStatement.executeQuery();
        // 验证结果
        while (result.next()) {
            System.out.println("username: " + result.getString("username"));
        }
        // 关闭会话
        session.close();
    }
}