Spring Data Jpa
前言
-
spring data 的使命是为数据访问提供熟悉且一致的基于 Spring 的编程模型,同时仍保留底层数据存储的特殊特征。
-
它使使用数据访问技术、关系和非关系数据库、map-reduce框架和基于云的数据服务变得容易。这是一个伞形项目,其中包含许多特定于给定数据库的子项目,Spring Data Jpa就是其中的一个子项目。
-
以下代码以操作MySQL数据库为例
-
做的不好的地方,还请各位大佬指正
一、使用步骤
1.依赖包
代码如下:
<!--使用springboot2.0.1-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<!--配置jpa-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.0.1.RELEASE</version>
<!--这里使用druid连接池,所以排除默认连接池HikariCP-->
<exclusions>
<exclusion>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<!--springboot测试包-->
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<!--springboot web包-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.0.1.RELEASE</version>
</dependency>
<dependency>
<!--数据库操作包-->
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
<dependency>
<!--springboot整合druid包-->
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
2.使用步骤
-
首先建立一个类映射MySQL表
@Entity @Table(name="MySQL_Table_Name") public class MyClass { @Id @Column(length = 32) private String id; private String name; private String sex;
-
在DAO层使用代理对象
代码如下:
public interface MyClassRepository extends JpaRepository<MyClass,String> { String findBySex(String name); }
-
在service层使用
代码如下:@Service public class MyClassService { @Autowired MyClassRepository myClassRepository; public List<MyClass> findAll(){ MyClass myClass=new MyClass("1","test","man"); // myClassRepository的保存用法 myClassRepository.save(myClass); // findBySex只是在MyClassRepository接口中生命了并未具体实现,但在这里可以直接调用本方法实现 // 按照姓名查找性别,这就是spring data jpa的神奇之处,但复杂的多表查询则需使用其他技术实现 String bySex = myClassRepository.findBySex(myClass.getName()); System.out.println(bySex); return myClassRepository.findAll(); } }
-
在controller层调用service
@RestController
@RequestMapping("/myclass")
public class MyClassController {
@Autowired
MyClassService myClassService;
@GetMapping("/listall")
public List<MyClass> findList(){
return myClassService.findAll();
}
}
- 启动类
@SpringBootApplication
@EntityScan("com.damo.model")
public class ManageDemoApplication {
public static void main(String[] args) {
SpringApplication.run(ManageDemoApplication.class, args);
}
}
- 配置文件
server:
port: 8080
spring:
datasource:
<!--druid连接池配置-->
druid:
url: jdbc:mysql://localhost:3306/test?characterEncoding=utf-8
username: root
password: root
driverClassName: com.mysql.jdbc.Driver
initialSize: 5 #初始建立连接数量
minIdle: 5 #最小连接数量
maxActive: 20 #最大连接数量
maxWait: 10000 #获取连接最大等待时间,毫秒
testOnBorrow: true #申请连接时检测连接是否有效
testOnReturn: false #归还连接时检测连接是否有效
timeBetweenEvictionRunsMillis: 60000 #配置间隔检测连接是否有效的时间(单位是毫秒)
minEvictableIdleTimeMillis: 300000
7.运行结果
启动启动类ManageDemoApplication,在浏览器中浏览http://localhost:8080/myclass/listall出现如下响应
则成功运行
总结
- 主要spring data jpa用法在dao层定义,service中实现
- 在使用代理对象MyClassRepository 继承接口JpaRepository时必须指定类名和查询条件类型(在这里是String类型),而类名为数据库表对应的类名
- 使用MyClassRepository 操作数据库表数据时直接采用驼峰命名法操作表对应字段。
- 一般都是配合springboot框架使用spring data jpa