1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/selfly-sonsure-dumper

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
mybatis-sql.md 5.2 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 13:43 e04b5c0

Интеграция Mybatis

Mybatis — это отличный фреймворк, но у него есть и недостатки.

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

Так можно ли интегрировать Mybatis для независимого управления SQL при использовании этого компонента?

Конечно, ответ положительный.

Конфигурация Mybatis

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

Добавить зависимости:

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>${version}</scope>
</dependency>
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>${version}</scope>
</dependency>

Объявить sqlSessionFactory Mybatis:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="configLocation" value="mybatis/mybatis-config.xml"/>
    <property name="dataSource" ref="dataSource"/>
</bean>

Затем внедрить sqlSessionFactory в наш jdbcEngine:

<bean id="jdbcTemplateEngine" class="com.sonsure.dumper.springjdbc.config.JdbcTemplateEngineFactoryBean">
    <property name="mybatisSqlSessionFactory" ref="sqlSessionFactory"/>
    <property name="dataSource" ref="dataSource"/>
</bean>

Из вышеизложенного видно, что нам нужно только получить sqlSessionFactory от Mybatis и внедрить его в jdbcEngine, остальное в Mybatis нас не волнует.

Это также означает, что исходные методы и интерфейсы Mybatis не затронуты.

Использование

В XML объявить метод SQL, все это собственные вещи Mybatis, и в написании нет никакой разницы, если вы используете аннотации Mybatis, это тоже возможно:

<?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.sonsure.mybatis.mapper.UserMapper">

    <!-- Здесь используется sql с использованием имени класса и имени свойства -->
    <select id="getUser">
        SELECT * FROM UserInfo WHERE userInfoId = #{id} and loginName = #{loginName}
    </select>
    
    <!-- Здесь sql использует имя таблицы и имя столбца напрямую -->
    <select id="getUserSql">
        SELECT * FROM user_info WHERE user_info_id = #{id} and login_name = #{loginName}
    </select>

</mapper>

Вызвать в коде, указав команду Mybatis id, пространство имён в соответствии с реальной ситуацией можно опустить:

// Здесь обратите внимание, что SQL, написанный по умолчанию в Mybatis, также будет преобразован из имени класса, имени атрибута в имя таблицы SQL, имя столбца
UserInfo user = jdbcDao.myBatisExecutor()
        .command("getUser")
        .parameter("id", 9L)
        .parameter("loginName", "name-9")
        .singleResult(UserInfo.class);
        
// Здесь указано nativeCommand, SQL не будет преобразовываться
Map<String, Object> params = new HashMap<>();
params.put("id", 9L);
params.put("loginName", "name-9");

UserInfo user = jdbcDao.myBatisExecutor()
        .command("getUserSql")
        .parameters(params)
        .nativeCommand()
        .singleResult(UserInfo.class);

Этот способ вызова позволяет Mybatis больше не писать код, связанный с разбивкой на страницы и т. д., если это необходимо, просто укажите параметры разбивки на страницы для автоматического завершения разбивки на страницы:

Page<UserInfo> page = jdbcDao.myBatisExecutor()
        .command("queryUserList")
        .paginate(1, 10) // первая страница, взять 10 записей
        .pageResult(UserInfo.class);

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/selfly-sonsure-dumper.git
git@api.gitlife.ru:oschina-mirror/selfly-sonsure-dumper.git
oschina-mirror
selfly-sonsure-dumper
selfly-sonsure-dumper
master