Серия MyBatis (1): Начало работы с MyBatis

MyBatis

1. Введение в MyBatis

В 2001 году Клинтон Бегин запустил проект с открытым исходным кодом под названием iBATIS, который первоначально был сосредоточен на исследованиях и разработках криптографического программного обеспечения, а затем превратился в структуру уровня сохраняемости на основе Java.

В 2004 году Клинтон передал название и исходный код iBATIS фонду Apache Software Foundation.

В 2010 году основная группа разработчиков решила покинуть Apache Software Foundation и переименовала iBATIS в MyBatis.

​MyBatis — это превосходная структура уровня сохраняемости, которая поддерживает пользовательские SQL-запросы, хранимые процедуры и расширенные сопоставления, устраняя почти весь код JDBC и ручную настройку параметров, а также извлечение набора результатов. MyBatis может использовать XML или аннотации для настройки и сопоставления.MyBatis формирует окончательный исполняемый оператор SQL, сопоставляя параметры с настроенным SQL, и, наконец, сопоставляет результат выполнения SQL с возвращаемым объектом Java.

В отличие от других фреймворков ORM (Object Relational Mapping), MyBatis не связывает объекты Java с таблицами базы данных, а связывает методы Java с операторами SQL.

Объяснение: Просто поймите приведенный выше контент, потому что, согласно моему стилю, я не особенно люблю вещи, которые являются чисто теоретическими и текстовыми. Читатели, которые читали мои предыдущие блоги, могут знать это. Я предпочитаю конкретный кодовый бой, например, как использовать новую технологию. Определенный фрагмент кода должен решить какую проблему...

2. Создайте проект Maven

Для получения соответствующего содержания Maven вы можете обратиться к моему предыдущему блогу.Начало работы с Spring (4): использование Maven для управления проектами Spring.

Я всегда думал, что лучший способ понять технологию — это рассмотреть конкретный пример, например Hello World, ха-ха.

Итак, нам нужен новый проект Maven, проект Maven с использованием нового метода IDEA выглядит следующим образом:

Структура только что созданного проекта Maven выглядит следующим образом:

Содержимое сгенерированного по умолчанию файла 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.zwwhnly</groupId>
    <artifactId>mybatis-action</artifactId>
    <version>1.0-SNAPSHOT</version>
    
</project>

Во-первых, мы устанавливаем кодировку исходного кода в UTF-8:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

Далее устанавливаем версию JDK для компиляции исходников, здесь мы временно используем 1.6, вы можете модифицировать ее под свои реальные потребности, например модифицировать на 1.8:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
    </plugins>
</build>

Затем добавьте важные координаты, зависящие от MyBatis, и зависимые координаты, управляемые mysql:

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.3.0</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.38</version>
    </dependency>
    
</dependencies>

Наконец, добавьте зависимые координаты используемых Log4j и JUnit, и окончательное содержимое файла 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.zwwhnly</groupId>
    <artifactId>mybatis-action</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.3.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.12</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.12</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

В IDEA, если нет специальной настройки, после модификации pom-файла нужно импортировать его вручную, иначе будет так:

Как импортировать вручную? Нажмите «Импортировать изменения» в правом нижнем углу IDEA.

На данный момент проект Maven создан.

3. Простой пример

3.1 Подготовка данных

Сначала выполните следующую инструкцию, чтобы создать базу данных mybatis_action_db:

CREATE DATABASE mybatis_action_db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

Затем выполните следующее утверждение, чтобы создать таблицу страны и добавить некоторые данные:

use mybatis_action_db;

CREATE TABLE country
(
  id          INT          NOT NULL AUTO_INCREMENT,
  countryname VARCHAR(255) NULL,
  countrycode VARCHAR(255) NULL,
  PRIMARY KEY (id)
);

INSERT country(countryname, countrycode)
VALUES ('中国', 'CN'),
       ('美国', 'US'),
       ('俄罗斯', 'RU'),
       ('英国', 'GB'),
       ('法国', 'FR');

3.2 Настройка MyBatis.

Сначала создайте файл конфигурации mybatis-config.xml в каталоге src/main/resources.Чтобы создать файл mybatis-config.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">
<configuration>
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>

    <typeAliases>
        <package name="com.zwwhnly.mybatisaction.model"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC">
                <property name="" value=""/>
            </transactionManager>
            <dataSource type="UNPOOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis_action_db"/>
                <property name="username" value="root"/>
                <property name="password" value=""/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="com/zwwhnly/mybatisaction/mapper/CountryMapper.xml"/>
    </mappers>
</configuration>

Простое объяснение конфигурации:

  • <settings>Конфигурация свойства logImpl в узле задает вывод журнала с использованием LOG4J.
  • <typeAliases>Под элементом настраивается имя пакета.Обычно при определении класса необходимо использовать полное имя класса, например com.zwwhnly.mybatisaction.model.Country. Полное имя класса нужно часто использовать в MyBatis.Для удобства использования мы настроили пакет com.zwwhnly.mybatisaction.model.После этой настройки нет необходимости писать часть имени пакета при использовании класса используется только Country.
  • <environments>Подключение к базе данных в основном настраивается в конфигурации среды, например, здесь мы используем базу данных mybatis_action_db в локальном MySql, имя пользователя — root, а пароль отсутствует (вы можете изменить базу данных, имя пользователя и пароль в соответствии с вашими реальная ситуация).
  • <mappers>Сегодняшний путь .xml, содержащий полную классную пункт, настроен в той, что является MyBatis SQL-оператор и файл конфигурации сопоставления.

3.3 Создайте класс сущности и файл Mapper.xml

Создайте новый пакет в src/main/java: com.zwwhnly.mybatisaction, а затем создайте пакет в этом пакете: model.

Создайте класс сущности Country, соответствующий таблице страны таблицы базы данных в пакете модели:

package com.zwwhnly.mybatisaction.model;

public class Country {
    private Integer id;

    private String countryname;

    private String countrycode;

    // 按Alt+Insert快捷键生成get和set方法
}

Создайте каталог com/zwwhnly/simple/mapper в папке src/main/resources, а затем создайте в этом каталоге файл CountryMapper.xml.Чтобы создать файл Mapper.xml быстрее, мы можем обратиться к приведенному выше, чтобы добавить mybatis. -config Метод шаблона xml здесь повторяться не будет.

Содержание конечного файла Servicapper.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="com.zwwhnly.mybatisaction.mapper.CountryMapper">
    <select id="selectAll" resultType="Country">
        SELECT id,countryname,countrycode from country
    </select>
</mapper>

Простое объяснение конфигурации:

  • mapper: корневой элемент XML, пространство имен атрибутов определяет пространство имен текущего XML.
  • select: запрос Select, который мы определили.
  • Атрибут id: определяет уникальный идентификатор текущего запроса Select.
  • resultType: определяет тип возвращаемого значения текущего запроса, здесь относится к классу сущности Country, здесь в основном используется имя пакета, упомянутое в предыдущей конфигурации, если имя пакета не задано, его нужно записать как resultType=" com.zwwhnly.mybatisaction.model.Country".
  • ВЫБЕРИТЕ идентификатор, название страны, код страны из страны: оператор запроса SQL.

3.4 Настройте Log4j для просмотра процесса работы MyBatis с базой данных

Создайте новый файл конфигурации log4j.properties в папке src/main/resources и введите следующее:

log4j.rootLogger=ERROR, stdout
log4j.logger.com.zwwhnly.mybatisaction.mapper=TRACE
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n 

3.5 Написание тестового кода

Создайте пакет в src/test/java: com.zwwhnly.mybatisaction.mapper, а затем создайте тестовый класс CountryMapperTest со следующим кодом:

package com.zwwhnly.mybatisaction.mapper;

import com.zwwhnly.mybatisaction.mapper.model.Country;
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.BeforeClass;
import org.junit.Test;

import java.io.IOException;
import java.io.Reader;
import java.util.List;

public class CountryMapperTest {
    private static SqlSessionFactory sqlSessionFactory;

    @BeforeClass
    public static void init() {
        try {
            Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void testSelectAll() {
        SqlSession sqlSession = sqlSessionFactory.openSession();

        try {
            List<Country> countryList = sqlSession.selectList("selectAll");
            printCountryList(countryList);
        } finally {
            sqlSession.close();
        }
    }

    private void printCountryList(List<Country> countryList) {
        for (Country country : countryList) {
            System.out.printf("%-4d%4s%4s\n", country.getId(), country.getCountryname(), country.getCountrycode());
        }
    }
}

Запустив тестовый код, выходной журнал выглядит следующим образом:

DEBUG [main] - ==> Preparing: SELECT id,countryname,countrycode from country

DEBUG [main] - ==> Parameters:

TRACE [main] - <== Columns: id, countryname, countrycode

TRACE [основная] -

Трассировка [Главная] -

TRACE [основная] -

TRACE [основной] -

TRACE [основная] -

DEBUG [main] - <== Total: 5

1 Китай CN

2 США США

3 Россия RU.

4 UK GB.

5 Франция Франция

4. Исходный код и ссылка

Адрес источника:GitHub.com/Как Ухань, где/каждый шаг…, добро пожаловать на скачивание.

Лю Цзэнхуэй "MyBatis от входа до мастерства"

Создайте xml-файл в IntelliJ IDEA