Mybatisコンポーネントの詳細な説明とエントリーデモ

1.MyBatisコアコンポーネント

MyBatisのコアコンポーネントは4つの部分に分かれています。

  1. SqlSessionFactoryBuilder:構成またはコードに基づいてSqlsessionFactoryを生成し、分散ビルドビルダーモード(ビルダーモード)を使用します。

  2. SqlSessionFactory:ファクトリモードを使用してSqlSessionを生成するためにそれに依存するファクトリインターフェイス。

  3. SqlSession:セッション、SQLステートメントを送信できます。また、マッパーマッピングファイルのインターフェイスを取得することもできます。

  4. SQLマッパー:マッパーは、マッパーxmlファイルと対応するJavaインターフェイスで構成されます。対応するSQLとマッピングルールを指定する必要があります。SQLの送信と実行、および結果の返送を担当します。
    ここに画像の説明を挿入します

2、SqlSessionFactory

  SqlSessionFactoryの構築は、SqlSessionFactoryBuilderを使用して段階的にガイドする必要があります。最も一般的に使用される方法は、SqlSessionFactoryBuilderによって構成ファイルXMLを読み取ってSqlSessionFactoryを生成することですが、MybatisはJavaコード構成方法も提供します(推奨されません。コードが長くなります)。 )。
  構成ファイルが提供されると、MybatisはConfigurationクラスオブジェクトを介してMybatisコンテキスト全体を構築します。(SqlSessionFactoryはインターフェースであり、SqlSessionManager(マルチスレッド環境で使用される)とDefaultSqlSessionFactory(一般的に使用される)があります)。各Mybatisアプリケーションは、中心としてSqlSessionFactoryのインスタンスに基づいており、その唯一の役割は、コアインターフェイスオブジェクトSqlSessionを生成することです。したがって、シングルトンモードで処理する必要があります。

3、SqlSession

  Mybatisでは、SqlSessionがコアインターフェイスであり、その機能は、データベースリンクリソースの開始を表すJDBCのConnectionオブジェクトに似ています。その主な機能には、マッパーインターフェイスを取得データベースにSQLを送信し、トランザクション制御しかし、SqlSessionはプロキシオブジェクトのようなものであり、Executorが実際に作業を担当します。SqlSessionはデータベース接続リソースを表すことに注意してください。時間内に閉じる必要があります。そうしないと、データベース接続リソースが使い果たされたときにシステムが麻痺します。

4、マッパー

  これはmybatisで最も複雑で重要なコンポーネントであり、インターフェイスと対応するxmlファイル(または注釈)で構成されています。その主な機能は次のとおりです。

  1. マッピングルールを説明する
  2. SQLステートメント、構成パラメータータイプ、戻り値タイプなどを提供します。
  3. キャッシュを構成する
  4. 動的SQL関数を提供する

5.ライフサイクルの概要

  1. SqlSessionFactoryBuilder:その役割はSqlSessionFactoryを作成することであるため、SqlSessionFactoryを作成するメソッドにのみ存在でき、長期間存在させないでください。
  2. SqlSessionFactory:データベースのリンクリソースを占有するデータベース接続プールと見なすことができます。mybatisの本質はデータベースを操作することであるため、mybatisアプリケーション全体に存在する必要があります。
  3. SqlSession:データベース接続と見なされ、ビジネスリクエストのみが存続します。リクエストが終了したら、リソースをSqlSessionFactoryに返す必要があります。
  4. マッパー:SqlSessionによって作成されたインターフェースで、リクエスト内のビジネス処理ロジックを表すため、ライフサイクルはSqlSessionと一致している必要があります。

6.簡単な入力

主なディレクトリは次のとおりです。
ここに画像の説明を挿入します

6.1、pomファイル

依存関係の追加:主にmybatisとmysqlの依存関係パッケージ(必須)、単体テストとログ(オプション)

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.5</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.10</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.37</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.12</version>
    </dependency>
</dependencies>

6.2、POJO类

package domain;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable{
    
    

    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;

    public Integer getId() {
    
    
        return id;
    }

    public void setId(Integer id) {
    
    
        this.id = id;
    }

    public String getUsername() {
    
    
        return username;
    }

    public void setUsername(String username) {
    
    
        this.username = username;
    }

    public Date getBirthday() {
    
    
        return birthday;
    }

    public void setBirthday(Date birthday) {
    
    
        this.birthday = birthday;
    }

    public String getSex() {
    
    
        return sex;
    }

    public void setSex(String sex) {
    
    
        this.sex = sex;
    }

    public String getAddress() {
    
    
        return address;
    }

    public void setAddress(String address) {
    
    
        this.address = address;
    }

    @Override
    public String toString() {
    
    
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", birthday=" + birthday +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

6.3、IUserDao

package dao;

import domain.User;
import java.util.List;

public interface IUserDao {
    
    
    /**
     * 查询所有操作
     * @return
     */
    List<User> findAll();
}

6.4、IUserDao.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="dao.IUserDao">
    <!--配置查询所有-->
    <select id="findAll" resultType="domain.User">
        select * from user
    </select>
</mapper>

6.5、SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- mybatis的主配置文件 -->
<configuration>
    <!-- 配置环境 -->
    <environments default="mysql">
        <!-- 配置mysql的环境-->
        <environment id="mysql">
            <!-- 配置事务的类型-->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据源(连接池) -->
            <dataSource type="POOLED">
                <!-- 配置连接数据库的4个基本信息 -->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value=""/>
            </dataSource>
        </environment>
    </environments>

    <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
    <mappers>
        <mapper resource="dao/IUserDao.xml"/>
    </mappers>
</configuration>

6.6、ログファイル

ログを追加する必要がある場合は、構成ファイルが必要です

# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE            debug   info   warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE

# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

6.7、テストクラス

package service;

import dao.IUserDao;
import domain.User;
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 org.junit.Test;

import java.io.InputStream;
import java.util.List;

/**
 * @author RuiMing Lin
 * @date 2020-04-09 14:49
 */
public class UserService {
    
    

    private IUserDao userDao;
    @Test
    //测试方法
    public void Test1() throws Exception{
    
    
        //1.读取配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        //3.使用工厂生产SqlSession对象
        SqlSession session = factory.openSession();
        //4.使用SqlSession创建Dao接口的代理对象
        IUserDao userDao = session.getMapper(IUserDao.class);
        //5.使用代理对象执行方法
        List<User> users = userDao.findAll();
        for(User user : users){
    
    
            System.out.println(user);
        }
        //6.释放资源
        session.close();
        in.close();
    }
}

おすすめ

転載: blog.csdn.net/Orange_minger/article/details/114945867