При использовании Spring Data JPA можно создавать запросы динамически через названия методов, что побудило меня захотеть перенести эту возможность в MyBatis.
Адрес: 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>
@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
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);
}
}
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>
<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 )