基于 MyBatis 的 Spring Data 扩展 Spring Data MyBatis

Apache
Java 查看源码»
跨平台
2016-12-21
郑雨涵

Spring Data 项目的主要目标是使构建使用数据访问技术的 Spring 应用程序变得更加容易。此模块处理增强基于 MyBatis 的数据访问层的支持。

通过使用此模块,你可以在基于MyBatis为ORM的结构下使用Spring Data模式带来的便利性。

如果你还没有接触过Spring Data,建议先了解下该项目

支持的一些特性

  • 对标准Entity支持完整CRUD操作

  • 支持通过接口中的方法名生成对应的查询

  • 提供基础属性的实体基类

  • 支持透明审计(如创建时间、最后修改)

  • 自持自定义编写基于MyBatis的查询,方便而不失灵活性

  • 方便的与Spring集成

  • 支持MySQL、Oracle、SQL Server、H2、PostgreSQL等数据库

获得帮助

这里有一份文档可以帮助你快速学习 Spring Data Mybatis。 reference documentation

如果你有任何疑问或者建议,可以录一个issue 给我。

快速开始

通过 Maven 引入依赖包:

<dependency>
  <groupId>com.ifrabbit</groupId>
  <artifactId>spring-data-mybatis</artifactId>
  <version>1.0.8.RELEASE</version>
</dependency>

最简单的通过Java注解配置的Spring Data Mybatis 配置如下所示:

@Configuration
@EnableMybatisRepositories(
        value = "org.springframework.data.mybatis.repository.sample",
        mapperLocations = "classpath*:/org/springframework/data/mybatis/repository/sample/mappers/*Mapper.xml"
)
public class TestConfig {

    @Bean
    public DataSource dataSource() throws SQLException {
        return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2).addScript("classpath:/test-init.sql").build();
    }

    @Bean
    public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource);
        return factoryBean;
    }

    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

}

创建一个实体类:

@Entity
public class User extends LongId {

  private String firstname;
  private String lastname;
       
  // Getters and setters
  // (Firstname, Lastname)-constructor and noargs-constructor
  // equals / hashcode
}

创建一个数据操作接口,使用包名 com.example.repositories:

public interface UserRepository extends CrudRepository<User, Long> {
  List<User> findByLastname(String lastname);  
  
}

编写一个测试用例:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
public class UserRepositoryIntegrationTest {
     
  @Autowired UserRepository repository;
     
  @Test
  public void sampleTestCase() {
    User dave = new User("Dave", "Matthews");
    dave = repository.save(dave);
         
    User carter = new User("Carter", "Beauford");
    carter = repository.save(carter);
         
    List<User> result = repository.findByLastname("Matthews");
    assertThat(result.size(), is(1));
    assertThat(result, hasItem(dave));
  }
}

这样就完成了。

使用 Spring Boot

通过maven引入:

<dependency>
    <groupId>com.ifrabbit</groupId>
    <artifactId>spring-boot-starter-data-mybatis</artifactId>
    <version>1.0.8.RELEASE</version>
</dependency>

如果你需要使用自己编写的Mybatis Mapper,需要在application.properties中配置:

spring.data.mybatis.mapper-locations=classpath*:/org/springframework/data/mybatis/samples/mappers/*Mapper.xml

在Spring Boot中你不需要自己去定义SqlSessionFactory.

完整的代码如下:

@SpringBootApplication
public class SpringDataMybatisSamplesApplication {

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

    @Bean
    public CommandLineRunner dummyCLR(ReservationRepository reservationRepository) {
        return args -> {
            Stream.of("Tom", "Jack", "Apple")
                    .forEach(name -> reservationRepository.save(new Reservation(name)));
        };
    }

}

@RepositoryRestResource // here we use RepositoryRestResource
interface ReservationRepository extends MybatisRepository<Reservation, Long> {
}

@Entity
class Reservation extends LongId {

    private String reservationName;

    public Reservation() {
    }

    public Reservation(String reservationName) {
        this.reservationName = reservationName;
    }

    public String getReservationName() {
        return reservationName;
    }

    @Override
    public String toString() {
        return "Reservation{" +
                "reservationName='" + reservationName + '\'' +
                '}';
    }
}

完整的例子可以在 https://github.com/hatunet/spring-data-mybatis-samples 找到。

的码云指数为
超过 的项目
加载中

评论(4)

青苗
青苗
大家可以尝试:https://www.oschina.net/p/mybatis-plus
BillGrim
BillGrim
请问应该怎么正确地在spring-data-mybatis中使用querydsl呢?
无著方知尘亦珍
无著方知尘亦珍
找过很多对mybatis进行增强的框架,这个是我最看好的,做到了对querydsl的扩展,声明式方法名sql生成,对spring data的实现很全,重要的是作者代码质量很高。 简化单表操作,易于重构。 我是用的jdk8。不知道作者有没有对jdk6做到兼容,毕竟国内还是jdk6偏多。
郑雨涵
郑雨涵

Spring Data MyBatis 1.0.8 发布

1.0.8 changelog at: https://github.com/hatunet/spring-data-mybatis/milestone/7?closed=1 Spring Data 项目的主要目标是使构建使用数据访问技术的 Spring 应用程序变得更加容易。此模块处...

2017/02/02 23:12

Spring Data MyBatis 1.0.5 发布

Spring Data 项目的主要目标是使构建使用数据访问技术的 Spring 应用程序变得更加容易。此模块处理增强基于 MyBatis 的数据访问层的支持。 通过使用此模块,你可以在基于MyBatis为ORM的结构下...

2016/12/21 17:31

没有更多内容

加载失败,请刷新页面

没有更多内容

暂无问答

JPA、Hibernate、Mybatis的区别

1.概念: Hibernate :Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。着力点对象与对象之间...

2018/12/19 09:11
15
0
springboot 系列教程二:常用starter介绍

springboot非常的流行,就是因为starter的存在,starter是springboot的核心,可以理解成可插拔的插件,你想要什么插件配置什么插件就可以,比如我想要使用mybatis,那么配置starter-mybatis...

04/13 11:22
19
2
Spring Boot 网易云课堂视频

网易云课堂视频 地址:《从零开始学Spring Boot》: http://study.163.com/course/introduction.htm?courseId=1004329008 提供:答疑、笔记、讨论、源代码下载、PPT下载、学习课时记录 课程更...

2017/11/10 14:45
29
0
Spring 5.x 、Spring Boot 2.x 、Spring Cloud 与常用技术栈整合

本项目仓库提供spring、spring-boot、spring-cloud 的常用整合用例。每个用例都提供详细的图文说明,并给出官方文档的具体链接作为参考。随着spring的迭代,本仓库会持续更新,升级版本和丰富...

01/20 12:12
11
0
SpringBoot 自动开启事务原理

SpringBoot 在利用jdbc,jpa,mybatis时,我们并没有使用@EnableTransactionManagement 注解显示开启事务,但在实际使用过程中我们却可以使用@Transactional 注解,今天我们就来探讨下这个问...

2018/05/27 09:44
885
0
development project and docs

开发用相关项目和文档地址 Spring 官方文档地址 Spring Spring Projects Spring Boot Documentation Spring Cloud Documentation Spring Data Documentation Spring Web Services Documentat...

2018/02/08 16:03
37
0
【通用】

Servlet原生方法上传图片 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <h...

2018/10/04 14:13
1
0
Spring+SpringMVC+Mybatis+Mysql整合实例【转】

本文要实现Spring+SpringMVC+Mybatis+Mysql的一个整合,实现了SpringMVC控制访问的页面,将得到的页面参数传递给Spring中的Mybatis的bean类,然后查找Mysql数据的功能,并通过JSP显示出来。建...

2016/09/10 13:42
10
0
SSM框架详细整合

1、基本概念 1.1、Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理...

03/30 16:10
1
1

没有更多内容

加载失败,请刷新页面

返回顶部
顶部