當時看到spring-data-jpa用方法名來定義sql查詢感受很是好,後來用了一段時間,由於spring-data-jpa是基於hibernate,而個人hibernate又是很是很差,因而在網上查詢了相關資料,主要借鑑了mybatis通用mapper的實現方式,寫了一版mybatis版的spring-data-jpa
1. 1.x版本預期實現目標
如沒有重大邏輯性錯誤,1.0正式版本將在2016年11月30日前發佈。
1.0版本主要實現目標爲對mysql、sqlserver、oracle等三大數據庫的單表操做,並在後續1.x版本中增長其它的數據庫單表操做實現
2. 2.x版本展望目標
實現多表的級聯查詢
3. 如何集成mybatis-jpa
只須要將org.mybatis.spring.mapper.MapperFactoryBean這個類替換成mybatis-jpa的com.woodws.mybatis.jpa.MyMapperFactoryBean,實體必須註解javax.persistence.Table代表。由於使用了jpa規範因此須要導入javax.persistence相關jar包(mapper.xml和繼承mapper接口都是非必要的,最簡化的就是隻要本身的接口,這種狀況下必須每一個方法都要明確操做哪一個實體,就是參數或者返回中有實體對象)
```
<!-- MyBatis配置 -->
<bean id="sqlSessionFactory" class="com.woodws.mybatis.jpa.JpaMapperFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="typeAliasesPackage" value="com.woodws"/>
<property name="mapperLocations" value="${sqlSessionFactory.mapperLocations}" />
</bean>
```
4. 使用示例
只須要在mapper接口方法中按着方法命名規範命名mybatis-jpa將自動生成相關的sql,mapper.xml中的配置爲主,只要當在mapper.xml中沒有的sqlId纔會自動生成,命名規範能夠查詢com.woodws.mybatis.jpa.Definition
```
List<User> findOrderByAge();java
List<User> findOrderByAgeDesc();mysql
List<User> findByNameOrderByAge(String name);spring
List<User> findByNameOrAgeGreaterOrderByAge(@Param("name") String name,
@Param("age") Integer age);sql
String findNameById(Integer id);數據庫
int updateName(User user);mybatis
List<User> findByNameLike(String name);
```
5. 自定義擴展
當命名規範於本身的習慣不一致的時候能夠增長相關的規範,或者想添加命名解析sql查詢,以下就是增長FUNCTION方法命名查詢(FUNCTION、PROCEDURE在1.0版本中將自帶支持)
```
Definition.expand("func","FUNCTION", Function.class);
```
同時但願各位網友能提出寶貴的意見和改進代碼,讓mybatis-jpa更加完善oracle