# spring-data-jdbc-mybatis **Repository Path**: vonchange/spring-data-jdbc-mybatis ## Basic Information - **Project Name**: spring-data-jdbc-mybatis - **Description**: spring data jdbc extend mybatis dynamic query - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 43 - **Forks**: 7 - **Created**: 2020-03-18 - **Last Updated**: 2025-04-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: Spring-data-jdbc, jdbc-template, MyBatis, JPA, ORM ## README # spring-data-jdbc-mybatis ![](https://img.shields.io/maven-central/v/com.vonchange.common/spring-data-jdbc-mybatis.svg?label=Maven%20Central) [![](https://img.shields.io/github/stars/vonchange/spring-data-jdbc-mybatis.svg?style=social) ](https://github.com/VonChange/spring-data-jdbc-mybatis) **spring data jdbc extend mybatis dynamic sql** ## What Is This? * It aims at being conceptually easy. In order to achieve this it does NOT offer caching, lazy loading,QueryDSL, write behind or many other features of JPA. This makes a simple, limited, opinionated ORM. * use mybatis dynamic SQL(not dependency mybatis),it is good for complex SQL * SQL is written in Markdown [UserInfoRepository.md](spring-data-jdbc-mybatis-demo%2Fsrc%2Fmain%2Fresources%2Fsql%2FUserInfoRepository.md) ```sql -- findUserByIds SELECT [@id column] FROM user_base [@@and id in #{idList:in} and user_name like #{userName:like}] [@and user_name like userName%] [@and id in idList] and create_time < #{createTime} ``` ## see [easy-dynamic-sql.md](easy-dynamic-sql.md) * extend findByExample,findByBeanProperties [UserExample.java](spring-data-jdbc-mybatis-demo%2Fsrc%2Ftest%2Fjava%2Fcom%2Fvonchange%2Fnine%2Fdemo%2Fdao%2FUserExample.java) ``` userInfoMethodDao.findAll(UserExample.builder() .userCodeIn(Arrays.asList("u001","u002")) .userNameLike("ch%") .createTimeDesc(true).build()); ``` ## Features * method name query [method-name-query.md](method-name-query.md) * @Id @Table @Column * recommend CrudExtendRepository not CrudRepository,because [curd-repository.md](curd-repository.md) * not support @Query or QueryDSL, sql must be written in markdown * batch update [bach-update.md](bach-update.md) * [multi-datasource.md](multi-datasource.md) ## Getting Started with JDBC mybatis [UserInfoRepository.java](spring-data-jdbc-mybatis-demo%2Fsrc%2Fmain%2Fjava%2Fcom%2Fvonchange%2Fnine%2Fdemo%2Fdao%2FUserInfoRepository.java) ```java public interface UserInfoRepository extends CrudExtendRepository { List findByUserCodes(@Param("userCodes") List userCodes); List findUserBySearchParam(@Param("param") SearchParam searchParam); } ``` > define sql in markdown [UserInfoRepository.md](spring-data-jdbc-mybatis-demo%2Fsrc%2Fmain%2Fresources%2Fsql%2FUserInfoRepository.md) > need @EnableJdbcRepositories ```java @SpringBootApplication @EnableJdbcRepositories public class JdbcMybatisTestApplication { public static void main(String[] args) { SpringApplication.run(JdbcMybatisTestApplication.class, args); } } ``` > maven ``` com.vonchange.common spring-data-jdbc-mybatis ${version} org.springframework.data spring-data-commons org.springframework.boot spring-boot-starter-jdbc ``` ## official spring data jdbc extend mybatis dynamic sql see spring-data-jdbc-demo configuration ``` @Configuration public class MybatisQuerySupportConfig { @Bean public NamedParameterJdbcOperations namedParameterJdbcOperations(DataSource dataSource) { return new MybatisJdbcTemplate(dataSource) {@Override protected Dialect dialect() {return new MySQLDialect();}}; } } ``` use ``` @Query("user.queryByUserCode") List queryByUserCode(@Param("userCode") String userCode); ``` but SpEL support became available with Spring Data JDBC 3.0 RC1