当时看到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