然而针对不同的数据储存访问使用相对的类库来操作访问。Spring Data中已经为我们提供了很多业务中常用的一些接口和实现类来帮我们快速构建项目,比如分页、排序、DAO一些常用的操作。
今天主要是对Spring Data下的JPA模块进行讲解。
为什么说Spring Data能帮助我们快速构建项目呢,因为Spring Data已经在数据库访问层上帮我们实现了公用功能了,而我们只需写一个接口去继承Spring Data提供给我们接口,便可实现对数据库的访问及操作,类似于spring-orm的TemplateDAO。
----------------------------------------------邪恶的分割线------------------------------------------------------------------------------
核心接口:
下面来看一下Repository的最顶层接口:
- public interface Repository<T, ID extends Serializable> {
- }
这个接口只是一个空的接口,目的是为了统一所有Repository的类型,其接口类型使用了泛型,泛型参数中T代表实体类型,ID则是实体中id的类型。
再来看一下Repository的直接子接口CrudRepository中的方法:
- public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID> {
- <S extends T> S save(S entity);
- <S extends T> Iterable<S> save(Iterable<S> entities);
- T findOne(ID id);
- boolean exists(ID id);
- Iterable<T> findAll();
- Iterable<T> findAll(Iterable<ID> ids);
- long count();
- void delete(ID id);
- void delete(T entity);
- void delete(Iterable<? extends T> entities);
- void deleteAll();
- }
此接口中的方法大多是我们在访问数据库中常用的一些方法,如果我们要写自己的DAO类的时候,只需定义个接口来集成它便可使用了。
再来看看Spring Data未我们提供分页和排序的Repository的接口PagingAndSortingRepository:
- public interface PagingAndSortingRepository<T, ID extends Serializable> extends CrudRepository<T, ID> {
- Iterable<T> findAll(Sort sort);
- Page<T> findAll(Pageable pageable);
- }
这些Repository都是spring-data-commons提供给我们的核心接口,spring-data-commons是Spring Data的核心包。这个接口中为我们提供了数据的分页方法,以及排序方法。看吧,spring-data让我们省了很多心了,一切都按照这个规范进行构造,就连业务系统中常用到的一些操作都为我们考虑到了,而我们只需更用心的去关注业务逻辑层。spring-data将repository的颗粒度划得很细,其实我觉得spring的框架中将每个类的颗粒度都划得很细,这主要也是为了责任分离。
----------------------------------------------邪恶的分割线------------------------------------------------------------------------------
JPA实现:
针对spring-data-jpa又提供了一系列repository接口,其中有JpaRepository和JpaSpecificationExecutor,这2个接口又有什么区别呢,我们分别来看看这2个接口的源码。
JpaRepository.class
- public interface JpaRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID> {
- List<T> findAll();
- List<T> findAll(Sort sort);
- <S extends T> List<S> save(Iterable<S> entities);
- void flush();
- T saveAndFlush(T entity);
- void deleteInBatch(Iterable<T> entities);
- void deleteAllInBatch();
这个类继承自PagingAndSortingRepository,看其中的方法,可以看出里面的方法都是一些简单的操作,并未涉及到复杂的逻辑。当你在处理一些简单的数据逻辑时,便可继承此接口,看一个小例子吧。本文JPA供应者选择的是Hibernate EntityManager,当然读者们也可以选择其他的JPA供应者,比如EclipseLink、OpenJPA,反正JPA是个标准,在无须修改的情况下便可移植。
先定义一用户实体类User.class:
- @Entity
- @Table( name = "spring_data_user" )
- @PrimaryKeyJoinColumn( name = "id" )
- public class User extends IdGenerator{
- private static final long serialVersionUID = 1L;
- private String name;
- private String username;
- private String password;
- private String sex;
- private Date birth;
- private String address;
- private String zip;
- //省略getter和setter
- }
Id生成策略是采用的表生成策略,这里就不贴代码了,spring的配置文件我也就不贴出来了,反正就那些东西,网上一查,遍地都是。后续我会在将demo附上来。
实体类是有了,现在得写一个持久层,这样才能操作数据库啊,现在我们来看一下持久层。IUserDao.class:
- @Repository("userDao")
- public interface IUserDao extends JpaRepository<User, Long>{}
再在spring的配置文件中加上以下代码。
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:jpa="http://www.springframework.org/schema/data/jpa"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/data/jpa
- http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">
- <jpa:repositories base-package="org.tea.springdata.**.dao" />
- </beans>
加上这段后Spring就会将指定包中@Repository的类注册为bean,将bean托管给Spring。这样定义完了就OK了!哦,就这样就可以操作数据库了?
是的,前面我就已经说了,Spring data已经帮我们写好一个实现类了,而简单的操作我们只须这样继承JpaRepository就可以做CRUD操作了。再写个业务类来测试一把吧。由于我用的Cglib来动态代理,所以就不定义接口了,直接定义类UserService.class:
- @Service("userService")
- public class UserService {
- @Autowired
- private IUserDao dao;
- public void save(User user) {
- dao.save(user);
- }
- public void delete(Long id) {
- dao.delete(id);
- }
- public void update(User user) {
- dao.saveAndFlush(user);
- }
- public List<User> findAll() {
- return dao.findAll();
- }
- }
来写一单元测试。
- public class UserServiceTest {
- private static ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
- private static UserService userService = (UserService) context.getBean("userService");
- public void saveUser() {
- StopWatch sw = new StopWatch(getClass().getSimpleName());
- sw.start("Add a user information.");
- User u = new User();
- u.setName("John");
- u.setSex("Man");
- u.setUsername("JohnZhang");
- u.setPassword("123456");
- u.setBirth(new Date());
- userService.save(u);
- sw.stop();
- System.err.println(sw.prettyPrint());
- }
- public static void main(String[] args) {
- UserServiceTest test = new UserServiceTest();
- test.saveUser();
- }
- }
相关推荐
对数据库的操作无非就“增删改查”。就最为普遍的单表操作而言,除了表和字段不同外,语句都是类似的,开发人员需要写...Spring-data-jpa的出现正可以让这样一个已经很“薄”的数据访问层变成只是一层接口的编写方式。
Maven进行项目管理,基于springboot框架开发的项目,mysql底层数据库,前端采用freemarker模板引擎,Bootstrap作为前端UI框架,集成了jpa、mybatis等框架。 主要功能: 系统管理,用户管理,角色列表,考勤管理,...
Spring Data JPA(ORM 框架) HSQLDB(内存数据库引擎) Thymeleaf(模板引擎) 脚步 创建 Web 应用程序 创建一个新的空目录 初始化本地 Git 存储库 设置 .gitignore 以忽略目标目录和 IDE 配置文件 创建 pom.xml...
chapter3-2-2:使用Spring-data-jpa简化数据访问层(推荐) chapter3-2-3:多数据源配置(一):JdbcTemplate chapter3-2-4:多数据源配置(二):Spring-data-jpa chapter3-2-5:使用NoSQL数据库(一):Redis ...
数据库框架:Sping Data JPA 数据库:MySql 项目构建工具:Maven 前端模板:html 3.本项目所用环境: 开发工具:IDEA 编程语言:JDK1.8,HTML,CSS,JS,jQuery 数据库:mysql5.7以上 4.项目需求 题目描述 基于Spring...
数据库框架:Sping Data JPA 数据库:MySql 项目构建工具:Maven 前端模板:html 3.本项目所用环境: 开发工具:IDEA 编程语言:JDK1.8,HTML,CSS,JS,jQuery 数据库:mysql5.7以上 4.项目需求 题目描述 基于Spring...
- chapter3-2-2:[使用Spring-data-jpa简化数据访问层(推荐)](http://blog.didispace.com/springbootdata2/) - chapter3-2-3:[多数据源配置(一):JdbcTemplate]...
我使用带有H2数据库的Spring Boot , Spring Security , Spring Data JPA来获取视图,我使用了Thymeleaf模板和Bootstrap CSS框架。屏幕截图安装您可以克隆此存储库并在本地使用它: $ git clone ...
项目技术(必填)技术名称版本官方网SpringBoot SpringBoot框架1.5.6.RELEASE JPA spring-data-jpa 1.5.6.RELEASE Mybatis Mybatis框架1.3.0 fastjson json解析包1.2.36 pagehelper Mybatis分页插件1.0。 0 数据库...
内容: Spring资源管理 Spring表达式语言 定时调度 AOP切面编程-代理功能的加强 Spring与JMS消息组件 Spring与WebService Spring与Redis数据库 JDBC操作模板 ...SpringDataJPA SpringMVC SpringSecurity
由于使用了JPA,因此开发人员可以自由选择任何基于SQL的数据库引擎来实现持久性(在此代码示例中以Postgres为例)。 首选的IDE开发是IntelliJ,它带有大量有用的JAVA工具来支持Spring Boot开发,但是开发者也可以...
一、系统介绍 ...数据库框架:Sping Data JPA 数据库:MySql 项目构建工具:Maven 前端模板:html 3.本项目所用环境: 开发工具:IDEA 编程语言:JDK1.8,HTML,CSS,JS,jQuery 数据库:mysql5.7以上
PICQ48 基于酷Q的可视化SNH48机器人 / 口袋...持久层框架:JPA(spring-boot-starter-data-jpa) + MyBatis(mybatis-spring-boot-starter 2.1.0) 模板引擎:Thymeleaf(spring-boot-starter-thymeleaf) 轮询框架:Q
1、基于SpringBoot的健身房... 【说明】本次完成的健身房管理系统 功能还是很全的,页面也比较精美,适合刚接触SpringBoot和Spring Data JPA 框架的初学者做练手项目,项目中的图表功能:ECharts 也可以好好学习学习。
创建和删除JPA数据库 viii. 29. 使用NoSQL技术 i. 29.1. Redis i. 29.1.1. 连接Redis ii. 29.2. MongoDB i. 29.2.1. 连接MongoDB数据库 ii. 29.2.2. MongoDBTemplate iii. 29.2.3. Spring Data MongoDB仓库 iii. ...
oasys是一个OA办公自动化系统,使用Maven进行项目管理,基于springboot框架开发的项目,mysql底层数据库,前端采用freemarker模板引擎,Bootstrap作为前端UI框架,集成了jpa、mybatis等框架。 2.框架介绍 前端 技术 ...
本系统采用企业级开发标准,使用SpringBoot架构,数据访问层采用Spring Data Jpa,业务控制层采用SpringMvc,安全框架采用Shiro,实现了完整权限系统,Controller方法采用shiro注解,来实现有效的权限控制;...
技术栈:Springboot + Spring Data JPA + FreeMarker模板 项目描述: 基于SpringBoot框架开发的求职招聘网站用户可以以三种身份注册登录,一种是求职者,另一种是招聘者,还有一个管理员。求职者可以浏览查询公司...
在项目中,我们可以使用 Spring MVC 框架来处理 HTTP 请求并返回响应,使用 Spring Data JPA 来访问数据库,使用 Thymeleaf 来渲染 HTML 模板页面。 接下来,我们可以创建一些实体类来表示商城中的商品、订单等对象...
熟练运用Spring、SpringMVC、Mybatis、Spring Data Jpa、SpringBoot 等框架进行开发,熟悉SSM、SSS 等整合开发 熟练使用 Eclipse/IDEA 开发工具,熟练使用 Maven 构建多项目工程以及使用 SVN/Git 实施版本控制 ➢ ...