1、背景

最开始了解SpringData的时候,以为他不就是ORM的一种实现方式嘛,还能有什么新的东西。从hibernate到ibatis、mybatis,也许他只不过是spring想整合一个更方便的orm实现吧。

NoNoNo!!!

SpringData是希望提供一个统一的数据访问层的编程模型。

如何理解呢?

就拿SpringData中一个典型项目Spring Data MongoDB来说吧。之前我们用的hibernate、mybatis都是对应的关系型数据库,CRUD的封装也只是在这个前提之下进行的。

而对于非关系型数据库来说,比如MongoDB,它也有相应的CRUD的操作,但在项目中,我们还需要另外封装一套。这样做确实挺麻烦的,如果能够统一解决就最好了。Sprint Data MongoDB就是从这样的角度出发的,他不再区分关系型非关系型数据库,而是把数据访问这一部分封装成一个模式。

2、实例

1)、引入jar包

<!-- spring data -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-releasetrain</artifactId>
<version>Hopper-SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.10.1.RELEASE</version>
</dependency>

2)、根据实体生成表

@Entity
public class Employee {
@Id
@GeneratedValue
private Long id;
private String firstName, lastName, description; private Employee() {
} public Employee(String firstName, String lastName, String description) {
this.firstName = firstName;
this.lastName = lastName;
this.description = description;
} //getter和setter方法略
}

添加配置信息:

spring.jpa.show-sql= true

spring.jpa.hibernate.ddl-auto=update

3)、新建dao的接口

public interface EmployeeRepository extends CrudRepository<Employee,Long>{

    Employee findByFirstName(String firstName);

}

EmployeeRepository 继承自CrudRepository,CrudRepository使用泛型的方式提供了基本的数据操作方法。

public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID> {
<S extends T> S save(S entity);
boolean exists(ID id);
Iterable<T> findAll();
void delete(ID id);
……
}

4)、Service接口

EmployeeService

public interface EmployeeService  {
Employee findByFirstName(String firstName);
Employee saveEmployee(Employee employee);
}

EmployeeServiceImpl

@Service
public class EmployeeServiceImpl implements EmployeeService { //注入dao
@Autowired
private EmployeeRepository employeeRepository; @Override
public Employee findByFirstName(String firstName) {
return employeeRepository.findByFirstName(firstName);
} @Override
public Employee saveEmployee(Employee employee) {
return employeeRepository.save(employee);
}
}

5)、测试

在Controller中编写方法:

//插入数据
@RequestMapping("/add")
public Employee addByData(){
return employeeService.saveEmployee(new Employee("Sherry","yang","员工"));
}
//根据firstName查询
@RequestMapping("/queryByfirstName")
public List<Employee> query(){
return employeeService.findByFirstName("Sherry");
}

3、关键字

通过上面的小demo,可以看出,使用springData来实现简单的CRUD,比通用mapper还要方便呢,尤其在复杂查询上更为明显。这都要归功于SpringData的一大创新,查询关键字。

以上面的findByFirstName为例,我们需要遵循一定的约定,这样才能更好的使用他。

下面列举了一小部分关键字:

Keyword Spring Data JPQL snippet
And findByLastnameAndFirstname where x.lastname = ?1 and x.firstname = ?2
Or findByLastnameOrFirstname where x.lastname = ?1 or x.firstname = ?2
LessThan findByAgeLessThan where x.age < ?1
OrderBy findByAgeOrderByLastnameDesc where x.age = ?1 order by x.lastname desc
Is,Equals findByFirstnameIs,findByFirstnameEquals where x.firstname = ?1

至于SpringData对于关系型和非关系型数据库的数据访问封装,我们下篇再继续聊。

SpringData——HelloWorld的更多相关文章

  1. SpringData —— HelloWorld

    SpringData 简介 优点 简化数据库访问,减少数据访问层的开发量. 支持的数据库类型 支持 NoSQL 存储,如 MongoDB,Redis. 支持关系型数据存储技术,如 jdbc,jpa. ...

  2. JPA + SpringData 操作数据库--Helloworld实例

    前言:谈起操作数据库,大致可以分为几个阶段:首先是 JDBC 阶段,初学 JDBC 可能会使用原生的 JDBC 的 API,再然后可能会使用数据库连接池,比如:c3p0.dbcp,还有一些第三方工具, ...

  3. JPA + SpringData 操作数据库原来可以这么简单 ---- 深入了解 JPA - 1

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7703679.html ------------------------------------ ...

  4. JPA + SpringData 操作数据库原来可以这么简单 ---- 深入了解 JPA - 2

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7704914.html ------------------------------------ ...

  5. JPA + SpringData 操作数据库原来可以这么简单 ---- 深入了解 JPA - 3

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7718741.html ------------------------------------ ...

  6. JPA + SpringData 操作数据库 ---- 深入了解 SpringData

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7735616.html ------------------------------------ ...

  7. SpringData 基于SpringBoot快速入门

    SpringData 基于SpringBoot快速入门 本章通过学习SpringData 和SpringBoot 相关知识将面向服务架构(SOA)的单点登录系统(SSO)需要的代码实现.这样可以从实战 ...

  8. 一篇 SpringData+JPA 总结

    概述 SpringData,Spring 的一个子项目,用于简化数据库访问,支持 NoSQL 和关系数据库存储 SpringData 项目所支持 NoSQL 存储 MongDB(文档数据库) Neo4 ...

  9. (转)JPA + SpringData

    jpa + spring data 约定优于配置 convention over configuration http://www.cnblogs.com/crawl/p/7703679.html 原 ...

随机推荐

  1. 如何分析Mysql慢SQL

    内容摘要: 开启慢查询日志捕获慢SQL 使用explain分析慢SQL 使用show profile查询SQL执行细节 常见的SQL语句优化 一.开启慢查询日志捕获慢SQL ① 查询mysql是否开启 ...

  2. django使用pycharm为项目选择虚拟环境-3.1

    使用pycharm打开项目 选择右上角的 file - settings - project - project interpreter 选择左上的设置符号,选择 Add 选择红框部分,然后选择之前创 ...

  3. Redis系列化方式有哪些?哪个系列化性能最好?

    Redis系列化方式有JDK系列化.JSON系列化.XML系列化等多种.我专门测试过,在我的笔记本电脑上保存5万条User对象到Redis,JDK系列化方式平均要15秒,JSON系列化方式只要13秒多 ...

  4. HDL代码风格建议(2)乘法器和DSP推断

    Inferring Multipliers and DSP Functions Inferring Multipliers module unsigned_mult (out, a, b); :] o ...

  5. “网易有钱”sketch使用分享

    本文来自网易云社区 写在开头,关于ps与sketch之间的优劣网上已经有很多分享,大家有兴趣可以百度,其中对否我们在这里不予评价.在移动互联网时代每个app从几十到上百张页面,如果用ps绘制一个个页面 ...

  6. android学习十二 配置变化

    1.配置变化会终止当前活动,并重建活动 2.配置变化有    2.1  屏幕方向变化    2.2  语言变化    2.3   插到基座等   3. 配置变化应用程序不会清除,上下文对新活动依然有效 ...

  7. C++ 基础面试题-2

    请写出一下程序的输出内容 /* ** 2018/03/21 22:02:03 ** Brief: ** Author:ZhangJianWei ** Email:Dream_Dog@163.com * ...

  8. OSG-基本几何图形

    本文转至http://www.cnblogs.com/shapherd/archive/2010/08/10/osg.html 作者写的比较好,再次收藏,希望更多的人可以看到这个文章 互联网是是一个相 ...

  9. 使用unittest里面的discover()方法组织测试用例

    import osimport unittest directory = os.getcwd()# 测试用例的目录organize = unittest.defaultTestLoader.disco ...

  10. JMeter自学笔记2-图形界面介绍

    一.写在前面的话: 上篇我们已经学会了如何安装JMeter和打开JMeter,那么这篇我们将对JMeter的图形界面做一个简单的介绍.大家只要简单的了解即可,无需死记硬背,在今后的学习和使用中慢慢熟悉 ...