Рубрики
Без рубрики

Краткое руководство по MyBatis

Узнайте о MyBatis, платформе сохранения с открытым исходным кодом, которая упрощает реализацию доступа к базе данных.

Автор оригинала: baeldung.

1. введение

MyBatis – это платформа сохранения с открытым исходным кодом, которая упрощает реализацию доступа к базе данных в приложениях Java. Он обеспечивает поддержку пользовательского SQL, хранимых процедур и различных типов отношений сопоставления.

Проще говоря, это альтернатива JDBC и Hibernate.

2. Зависимости Maven

Чтобы использовать MyBatis, нам нужно добавить зависимость в ваш pom.xml:


    org.mybatis
    mybatis
    3.4.4

Последнюю версию зависимости можно найти здесь .

3. API Java

3.1. SqlSessionFactory

SqlSessionFactory является основным классом для каждого приложения MyBatis. Этот класс создается с помощью метода SQLSessionFactoryBuilder’ s builder () , который загружает XML-файл конфигурации:

String resource = "mybatis-config.xml";
InputStream inputStream Resources.getResourceAsStream(resource);
SQLSessionFactory sqlSessionFactory
  = new SqlSessionFactoryBuilder().build(inputStream);

Файл конфигурации Java включает в себя такие параметры, как определение источника данных, сведения об диспетчере транзакций и список сопоставителей, которые определяют отношения между сущностями. Все это вместе используется для создания экземпляра SqlSessionFactory :

public static SqlSessionFactory buildqlSessionFactory() {
    DataSource dataSource 
      = new PooledDataSource(DRIVER, URL, USERNAME, PASSWORD);

    Environment environment 
      = new Environment("Development", new JdbcTransactionFactory(), dataSource);
        
    Configuration configuration = new Configuration(environment);
    configuration.addMapper(PersonMapper.class);
    // ...

    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    return builder.build(configuration);
}

3.2. Сеанс SqlSession

Сеанс SQL содержит методы для выполнения операций с базой данных, получения сопоставителей и управления транзакциями. Он может быть создан из SqlSessionFactory класса. Экземпляры этого класса не являются потокобезопасными.

После выполнения операции с базой данных сеанс должен быть закрыт. Поскольку Сеанс Sql реализует Автоклавируемый интерфейс, мы можем использовать блок “Попытка с ресурсами” :

try(SqlSession session = sqlSessionFactory.openSession()) {
    // do work
}

4. Картографы

Картографы-это интерфейсы Java, которые сопоставляют методы с соответствующими инструкциями SQL. MyBatis предоставляет аннотации для определения операций с базой данных:

public interface PersonMapper {

    @Insert("Insert into person(name) values (#{name})")
    public Integer save(Person person);

    // ...

    @Select(
      "Select personId, name from Person where personId=#{personId}")
    @Results(value = {
      @Result(property = "personId", column = "personId"),
      @Result(property="name", column = "name"),
      @Result(property = "addresses", javaType = List.class,
        column = "personId", [email protected](select = "getAddresses"))
    })
    public Person getPersonById(Integer personId);

    // ...
}

5. Аннотации MyBatis

Давайте посмотрим некоторые из основных аннотаций, предоставленных MyBatis:

  • @Insert, @Select, @Update, @Delete эти аннотации представляют операторы SQL, которые должны выполняться путем вызова аннотированных методов:

  • @Результаты – это список сопоставлений результатов, которые содержат подробную информацию о том, как столбцы базы данных сопоставляются с атрибутами класса Java:

  • @Результат – он представляет один экземпляр Результата из списка результатов, полученных из @Результатов. Он включает в себя такие детали, как сопоставление столбца базы данных со свойством Java-компонента, тип Java свойства, а также связь с другими объектами Java:

  • @Много он определяет сопоставление одного объекта с коллекцией других объектов:

    Здесь получить адреса – это метод, который возвращает коллекцию Адреса путем запроса таблицы адресов.

    Подобно @Многим аннотациям, у нас есть @Одна аннотация, которая определяет взаимно однозначное соответствие между объектами.

  • @MapKey используется для преобразования списка записей в Карту записей с ключом, определенным атрибутом значение :

  • @Options в этой аннотации указывается широкий диапазон определяемых переключателей и конфигураций, чтобы вместо их определения в других операторах мы могли @Options определить их:

6. Динамический SQL

Динамический SQL-это очень мощная функция, предоставляемая MyBatis. С помощью этого мы можем точно структурировать наш сложный SQL.

В традиционном коде JDBC мы должны писать операторы SQL, объединять их с точностью пробелов между ними и ставить запятые в нужных местах. Это очень подвержено ошибкам и очень трудно отлаживается в случае больших операторов SQL.

Давайте рассмотрим, как мы можем использовать динамический SQL в нашем приложении:

@SelectProvider(type=MyBatisUtil.class, method="getPersonByName")
public Person getPersonByName(String name);

Здесь мы указали класс и имя метода, которые фактически создают и генерируют окончательный SQL:

public class MyBatisUtil {
 
    // ...
 
    public String getPersonByName(String name){
        return new SQL() {{
            SELECT("*");
            FROM("person");
            WHERE("name like #{name} || '%'");
        }}.toString();
    }
}

Динамический SQL предоставляет все конструкции SQL в виде класса, например SELECT , WHERE и т. Д. С помощью этого мы можем динамически изменять генерацию предложения WHERE .

7. Поддержка Хранимых Процедур

Мы также можем выполнить хранимую процедуру с помощью @Select аннотации. Здесь нам нужно передать имя хранимой процедуры, список параметров и использовать явный Вызов для этой процедуры:

@Select(value= "{CALL getPersonByProc(#{personId,
  mode=IN, jdbcType=INTEGER})}")
@Options(statementType = StatementType.CALLABLE)
public Person getPersonByProc(Integer personId);

8. Заключение

В этом кратком руководстве мы рассмотрели различные функции, предоставляемые MyBatis, и то, как они облегчают разработку приложений, ориентированных на базы данных. Мы также видели различные аннотации, предоставленные библиотекой.

Полный код этой статьи доступен на GitHub .