首先非常感谢江南白衣,springside 让我更快更好滴学习 javaee 各个方面的技术!
example之一 quickstart中
public interface TaskDao extends PagingAndSortingRepository<Task, Long>, JpaSpecificationExecutor<Task> { Page<Task> findByUserId(Long id, Pageable pageRequest); @Modifying @Query("delete from Task task where task.user.id=?1") void deleteByUserId(Long id); }
之前没用过Spring Data JPA ,于是 一直在代码中寻找 TaskDao的实现类 TaskDaoImpl,没找到!
原来是用到Spring Data JPA:开发者连仅剩的实现持久层业务逻辑的工作都省了,唯一要做的,就只是声明持久层的接口,其他都交给 Spring Data JPA 来帮你完成。
applicationContext.xml中有如下配置
<!-- Spring Data Jpa配置 --> <jpa:repositories base-package="org.springside.examples.quickstart" transaction-manager-ref="transactionManager" entity-manager-factory-ref="entityManagerFactory"/>
使用 Spring Data JPA 进行持久层开发大致需要的三个步骤:
- 声明持久层的接口,该接口继承 Repository,Repository 是一个标记型接口,它不包含任何方法,当然如果有需要,Spring Data 也提供了若干 Repository 子接口,其中定义了一些常用的增删改查,以及分页相关的方法。
- 在接口中声明需要的业务方法。Spring Data 将根据给定的策略(具体策略稍后讲解)来为其生成实现代码。
- 在 Spring 配置文件中增加一行声明,让 Spring 为声明的接口创建代理对象。配置了 <jpa:repositories> 后,Spring 初始化容器时将会扫描 base-package 指定的包目录及其子目录,为继承 Repository 或其子接口的接口创建代理对象,并将代理对象注册为 Spring Bean,业务层便可以通过 Spring 自动封装的特性来直接使用该对象。
有三种创建查询的方式
框架在进行方法名解析时,会先把方法名多余的前缀截取掉,比如 find、findBy、read、readBy、get、getBy,然后对剩下部分进行解析。并且如果方法的最后一个参数是 Sort 或者 Pageable 类型,也会提取相关的信息,以便按规则进行排序或者分页查询
在查询时,通常需要同时根据多个属性进行查询,且查询的条件也格式各样(大于某个值、在某个范围等等),Spring Data JPA 为此提供了一些表达条件查询的关键字,大致如下:
- And --- 等价于 SQL 中的 and 关键字,比如 findByUsernameAndPassword(String user, Striang pwd);
- Or --- 等价于 SQL 中的 or 关键字,比如 findByUsernameOrAddress(String user, String addr);
- Between --- 等价于 SQL 中的 between 关键字,比如 findBySalaryBetween(int max, int min);
- LessThan --- 等价于 SQL 中的 "<",比如 findBySalaryLessThan(int max);
- GreaterThan --- 等价于 SQL 中的">",比如 findBySalaryGreaterThan(int min);
- IsNull --- 等价于 SQL 中的 "is null",比如 findByUsernameIsNull();
- IsNotNull --- 等价于 SQL 中的 "is not null",比如 findByUsernameIsNotNull();
- NotNull --- 与 IsNotNull 等价;
- Like --- 等价于 SQL 中的 "like",比如 findByUsernameLike(String user);
- NotLike --- 等价于 SQL 中的 "not like",比如 findByUsernameNotLike(String user);
- OrderBy --- 等价于 SQL 中的 "order by",比如 findByUsernameOrderBySalaryAsc(String user);
- Not --- 等价于 SQL 中的 "! =",比如 findByUsernameNot(String user);
- In --- 等价于 SQL 中的 "in",比如 findByUsernameIn(Collection<String> userList) ,方法的参数可以是 Collection 类型,也可以是数组或者不定长参数;
- NotIn --- 等价于 SQL 中的 "not in",比如 findByUsernameNotIn(Collection<String> userList) ,方法的参数可以是 Collection 类型,也可以是数组或者不定长参数;
可以通过使用 @Query 来执行一个更新操作,为此,我们需要在使用 @Query 的同时,用 @Modifying 来将该操作标识为修改查询,这样框架最终会生成一个更新的操作,而非查询。
如下:
@Modifying @Query("delete from Task task where task.user.id=?1") void deleteByUserId(Long id);
命名查询是 JPA 提供的一种将查询语句从方法体中独立出来,以供多个方法共用的功能。Spring Data JPA 对命名查询也提供了很好的支持。用户只需要按照 JPA 规范在 orm.xml 文件或者在代码中使用 @NamedQuery(或 @NamedNativeQuery)定义好查询语句,唯一要做的就是为该语句命名时,需要满足”DomainClass.methodName()”的命名规则
参考文章
相关推荐
"SSJ" 可能指的是 SpringSide 示例项目,这是一个基于 Spring Boot 的现代化 Java 开发脚手架,它包含了 Spring MVC、Spring 和 Spring Data JPA 的示例代码。这个小 Demo 可能用于演示如何整合这三个框架,创建一个...
最新版本的 Springside4 采用了包括 Spring 3.0、Hibernate 4、Spring Data JPA 和 Apache Shiro 在内的技术栈。 1. Springside4 的组成部分: - BeanValidator:提供了 JSR303(Hibernate Validator)的工具类,...
在 SpringSide 项目中,可以找到使用 Spring Data JPA 的 Repository 接口,通过接口方法实现数据库的增删查改,无需编写 SQL 语句。 ### 七、单元测试与集成测试 SpringSide 强调测试驱动开发,因此源码中包含了...
通过对 Springside 3.2.2 源码的深入学习,开发者可以掌握基于 Spring 的企业级应用开发技术,理解模块化设计、MVC 架构、依赖注入等核心概念,同时也能了解到项目管理和自动化构建的最佳实践。这将有助于提升开发者...
说明:参考了公司的一些项目以及springside,集成了一些常用框架,特色功能如下: shiro: 1.支持shiro数据库配置权限。 2.支持在方法级别上控制权限。 quartz: 1.页面配置Trigger以及选择Job任务来开启定时器。 2...
接着,文档详细介绍了如何在SpringSide中使用各种数据访问技术,包括Spring Data JPA、MyBatis以及原生JPA。这些部分讲述了如何进行动态组合查询条件、使用Hibernate二级缓存、以及如何配置数据源和事务管理。 为了...
通过Spring Data JPA或MyBatis等持久层框架,开发者可以方便地操作数据库,实现CRUD操作。同时,SpringSide还提供了事务管理,确保数据的一致性。 六、Web开发 SpringSide中的Web开发部分主要基于Spring MVC,这是...
Spring对各种ORM框架如Hibernate、JPA有很好的支持,SpringSide3会讲解如何利用Spring Data Access层,进行数据库操作,包括事务管理、JdbcTemplate、HibernateTemplate的使用方法。 六、Spring测试 测试是保证代码...
- **DAO层:** Springside3中DAO层的实现主要依赖于Spring Data JPA或Hibernate的模板方法,如`HibernateDao, PK>`,这种模式提供了基本的增删改查功能,并且可以通过注解的方式自动注入。 - **示例代码:** ```...
同时,它还探讨了Spring Data JPA和Spring Data MongoDB,为开发者提供了更丰富的数据访问选择。 4. 集成测试:SpringSide4强调测试驱动开发,通过JUnit、Mockito等工具,展示了如何编写单元测试和集成测试,确保...
通过学习和实践SpringSide提供的这些示例,开发者能够快速掌握Spring框架的关键技术和最佳实践,为构建企业级Java应用打下坚实的基础。无论是初学者还是经验丰富的开发者,都能从中受益匪浅。而`examples`目录下的更...
而Spring Data则简化了数据访问层的编写,支持多种数据库类型,如JPA、MongoDB等。 至于“不完整代码”,这意味着这个压缩包可能包含了一些示例代码或者半成品项目,需要你根据需求去完善和理解。这将是一个很好的...
SpringSite支持多种数据库,如MySQL、Oracle等,利用Spring Data JPA或MyBatis等持久层框架,简化了数据库操作。开发者可以通过注解或XML配置,实现数据的CRUD操作。 5. **模板引擎** SpringSite通常与Thymeleaf...
- SpringSide:基于Spring的快速开发框架。 5. **JSP/JavaScript标签技术**: - Displaytag:表格和表单渲染标签库。 - Struts-Layout:Struts的UI标签库。 - ExtJS,Prototype等:增强客户端功能的JavaScript...