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

OSCHINA-MIRROR/gdouyang-mybatis-querymethods

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

При использовании Spring Data JPA можно создавать запросы динамически через названия методов, что побудило меня захотеть перенести эту возможность в MyBatis.

Динамическое создание SQL-запросов через методы

  • Используйте QueryMethodsHelper для генерации sqlSource
  • Используйте QueryMethodsInterceptor для создания условий WHERE

Адрес: https://mvnrepository.com/artifact/com.github.gdouyang/mybatis-querymethods

Способ использования

<dependency>
    <groupId>com.github.gdouyang</groupId>
    <artifactId>mybatis-querymethods</artifactId>
    <version>${version}</version>
</dependency>

tkmapper версия

<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper</artifactId>
    <version>4.1.5</version>
</dependency>

Вариант с Spring Boot (tkmapper)

@tk.mybatis.spring.annotation.MapperScan(
        factoryBean = querymethods.tkmapper.QueryMethodsMapperFactoryBean.class
)
@EnableTransactionManagement
@SpringBootApplication
public class QuickDuckApplication {

    public static void main(String[] args) {
        SpringApplication.run(QuickDuckApplication.class, args);
    }
}

# Конфигурация application.yml
mybatis:
  config-location: classpath:mybatis-config.xml

Вариант с Spring Boot (mybatis-plus)

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@MapperScan(basePackages = "com.example.demo", factoryBean = querymethods.mybatisplus.QueryMethodsMapperFactoryBean.class)
@SpringBootApplication
public class QuickDuckApplication {

  public static void main(String[] args) {
    SpringApplication.run(QuickDuckApplication.class, args);
  }

}

Конфигурация application.yml

mybatis-plus: config-location: classpath:mybatis-config.xml

Конфигурация `mybatis-config.xml` (расположена в `src/main/resources`)
<?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>
```  <plugins>
    <!-- плагин пагинации -->
    <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
    <!-- плагин для методов запроса -->
    <plugin interceptor="querymethods.intercepts.QueryMethodsInterceptor"></plugin>
  </plugins>

</configuration>

Конфигурация Spring MVC (tkmapper)

<bean class="querymethods.tkmapper.MapperScannerConfigurer">
    <property name="basePackage" value="org.mybatis.spring.sample.mapper"/>
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>

Настройка перехватчиков

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
   <property name="plugins">
    <array>
	<bean class="com.github.pagehelper.PageInterceptor"></bean>
        <bean class="querymethods.intercepts.QueryMethodsInterceptor"></bean>
    </array>
   </property>
</bean>

Пример

В Mapper используйте аннотацию @Select, передайте пустую строку, а для методов без аннотации необходимо указать конфигурацию в XML-файле.

CREATE TABLE IF NOT EXISTS customer (
  id BIGINT PRIMARY KEY NOT NULL,
  first_name VARCHAR(255),
  last_name VARCHAR(255),
  create_time_ DATETIME,
  active TINYINT
)
public interface CustomerMapper extends Mapper<Customer> {

  /**
   * SELECT id,first_name,last_name,active,create_time_ FROM customer WHERE ( ( id = ? AND
   * first_name = ? ) )
   */
  @Select("")
  Customer findByIdAndFirstName(Integer id, String name);

  /**
   * SELECT id,first_name,last_name,active,create_time_ FROM customer WHERE ( ( id IS NULL OR
   * first_name = ? ) )
   */
  @Select("")
  Customer findByIdOrFirstName(Integer id, String name);

  /** SELECT id,first_name,last_name,active,create_time_ FROM customer WHERE ( ( id = ? ) ) */
  @Select("")
  Customer findById(Integer id);

  /** SELECT COUNT(id) FROM customer WHERE ( ( id = ? ) ) */
  @Select("")
  Integer countById(Integer id);

  /**
   * SELECT id,first_name,last_name,active,create_time_ FROM customer WHERE ( ( first_name = ?
   * ) ) ORDER BY id ASC
   */
  @Select("")
  List<Customer> findByFirstNameOrderByIdAsc(String name);
}
``````java
/**
 * SELECT id,first_name,last_name,active,create_time_ FROM customer WHERE ( ( first_name NOT LIKE
 * '%ABC%' ) )
 */
@Select("")
List<Customer> findByFirstNameNotContaining(String name);

/**
 * SELECT id,first_name,last_name,active,create_time_ FROM customer WHERE ( ( first_name LIKE
 * 'ABC' ) )
 */
@Select("")
List<Customer> findByFirstNameLike(String name);

/**
 * SELECT id,first_name,last_name,active,create_time_ FROM customer WHERE ( ( first_name NOT LIKE
 * 'ABC' ) )
 */
@Select("")
List<Customer> findByFirstNameNotLike(String name);

/**
 * SELECT id,first_name,last_name,active,create_time_ FROM customer WHERE ( ( id IN ( ?, ?, ? )
 * ) OR ( id = ? ) )
 */
@Select("")
List<Customer> findByIdInOrId(List<Integer> idList, Integer id);

/**
 * SELECT id,first_name,last_name,active,create_time_ FROM customer WHERE ( ( id IN ( ?, ?, ? )
 * ) )
 */
@Select("")
List<Customer> findByIdIn(List<Integer> idList);

/**
 * SELECT id,first_name,last_name,active,create_time_ FROM customer WHERE ( ( id NOT IN ( ?, ?, ?
 * ) ) )
 */
@Select("")
List<Customer> findByIdNotIn(List<Integer> idList);

/** SELECT id,first_name,last_name,active,create_time_ FROM customer WHERE ( ( id IS NULL ) ) */
@Select("")
List<Customer> findByIdIsNull();

/**
 * SELECT id,first_name,last_name,active,create_time_ FROM customer WHERE ( ( id IS NOT NULL ) )
 */
@Select("")
List<Customer> findByIdIsNotNull();
``````markdown
  /** SELECT id, first_name, last_name, active, create_time_ FROM customer WHERE ( ( active = 1 ) ) */
  @Select("")
  List<Customer> findByActiveTrue();

  /**
   * SELECT id, first_name, last_name, active, create_time_ FROM customer WHERE ( ( id BETWEEN ? AND ?
   * ) )
   */
  @Select("")
  List<Customer> findByIdBetween(Integer from, Integer to);

  /** SELECT id, first_name, last_name, active, create_time_ FROM customer WHERE ( ( id > ? ) ) */
  @Select("")
  List<Customer> findByIdAfter(Integer from);

  /** SELECT id, first_name, last_name, active, create_time_ FROM customer WHERE ( ( id > ? ) ) */
  @Select("")
  List<Customer> findByIdGreaterThan(Integer from);

  /** SELECT id, first_name, last_name, active, create_time_ FROM customer WHERE ( ( id >= ? ) ) */
  @Select("")
  List<Customer> findByIdGreaterThanEqual(Integer from);

  /** SELECT id, first_name, last_name, active, create_time_ FROM customer WHERE ( ( id < ? ) ) */
  @Select("")
  List<Customer> findByIdBefore(Integer from);

  /** SELECT id, first_name, last_name, active, create_time_ FROM customer WHERE ( ( id < ? ) ) */
  @Select("")
  List<Customer> findByIdLessThan(Integer from);

  /** SELECT id, first_name, last_name, active, create_time_ FROM customer WHERE ( ( id <= ? ) ) */
  @Select("")
  List<Customer> findByIdLessThanEqual(Integer from);

  /** SELECT first_name FROM customer WHERE ( ( id = ? ) ) */
  @Select("")
  String findFirstNameById(Integer id);

  /** SELECT DISTINCT first_name FROM customer WHERE ( ( id = ? ) ) */
  @Select("")
  String findDistinctFirstNameById(Integer id);

  /** DELETE FROM customer WHERE ( ( first_name = ? ) ) */
  @Delete("")
  int deleteByFirstName(String name);

  /** DELETE FROM customer WHERE ( ( first_name = ? AND id = ? ) ) */
  @Delete("")
  int deleteByFirstNameAndId(String name, Integer id);
}

Комментарии ( 0 )

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

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/gdouyang-mybatis-querymethods.git
git@api.gitlife.ru:oschina-mirror/gdouyang-mybatis-querymethods.git
oschina-mirror
gdouyang-mybatis-querymethods
gdouyang-mybatis-querymethods
master