Spring Data MyBatis基于 MyBatis 的 Spring Data 擴(kuò)展
Spring Data 項(xiàng)目的主要目標(biāo)是使構(gòu)建使用數(shù)據(jù)訪問(wèn)技術(shù)的 Spring 應(yīng)用程序變得更加容易。此模塊處理增強(qiáng)基于 MyBatis 的數(shù)據(jù)訪問(wèn)層的支持。
通過(guò)使用此模塊,你可以在基于MyBatis為ORM的結(jié)構(gòu)下使用Spring Data模式帶來(lái)的便利性。
如果你還沒(méi)有接觸過(guò)Spring Data,建議先了解下該項(xiàng)目。
支持的一些特性
-
對(duì)標(biāo)準(zhǔn)Entity支持完整CRUD操作
-
支持通過(guò)接口中的方法名生成對(duì)應(yīng)的查詢
-
提供基礎(chǔ)屬性的實(shí)體基類
-
支持透明審計(jì)(如創(chuàng)建時(shí)間、最后修改)
-
自持自定義編寫(xiě)基于MyBatis的查詢,方便而不失靈活性
-
方便的與Spring集成
-
支持MySQL、Oracle、SQL Server、H2、PostgreSQL等數(shù)據(jù)庫(kù)
獲得幫助
這里有一份文檔可以幫助你快速學(xué)習(xí) Spring Data Mybatis。 reference documentation
如果你有任何疑問(wèn)或者建議,可以錄一個(gè)issue 給我。
快速開(kāi)始
通過(guò) Maven 引入依賴包:
<dependency> <groupId>com.ifrabbit</groupId> <artifactId>spring-data-mybatis</artifactId> <version>1.0.8.RELEASE</version> </dependency>
最簡(jiǎn)單的通過(guò)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);
}
}
創(chuàng)建一個(gè)實(shí)體類:
@Entity
public class User extends LongId {
private String firstname;
private String lastname;
// Getters and setters
// (Firstname, Lastname)-constructor and noargs-constructor
// equals / hashcode
}
創(chuàng)建一個(gè)數(shù)據(jù)操作接口,使用包名 com.example.repositories:
public interface UserRepository extends CrudRepository<User, Long> {
List<User> findByLastname(String lastname);
}
編寫(xiě)一個(gè)測(cè)試用例:
@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
通過(guò)maven引入:
<dependency> <groupId>com.ifrabbit</groupId> <artifactId>spring-boot-starter-data-mybatis</artifactId> <version>1.0.8.RELEASE</version> </dependency>
如果你需要使用自己編寫(xiě)的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 找到。
