Spring Boot笔记(整合Spring Data JPA)

Spring Data JPA简介

Spring Data JPA是Spring Data的一个子项目,使得访问数据库变得很容易,开发中,大量减少了持久层数据库访问的代码量,我们只需要编写一个接口继承Spring Data JPA内部定义的接口便可实现CRUD操作。利用Spring Data JPA实现数据库的访问通常需要四个步骤,也即:(1)创建一个接口,继承Repository或者Repository的子类并指定实体类和ID类型;(2)在创建的接口中添加数据库访问方法(该接口已经从父类中继承了一系列CRUD方法,如果继承的方法满足需求,可不用添加其他方法);(3)配置spring让其为创建的接口生成代理对象——可通过注解利用Java代码配置或者利用XML文件配置;(4)最后进行注入,注入完成便可使用了。这里我们对Spring Data JPA不做过多的介绍,接下来进行Spring Boot整合Spring Data JPA。

1、搭建环境

首先,我们创建(利用的IDE为Eclipse Oxygen)一个springboot项目,并且导入Web、JPA、Oracle数据库依赖,同时修改JDK版本为1.8,此外,添加application.properties配置文件并添加数据库连接配置信息。项目结构如下图所示:

Web、JPA、Oracle数据库依赖的代码如下:

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-data-jpa</artifactId>
	</dependency>
	<dependency>
		<groupId>com.oracle</groupId>
		<artifactId>ojdbc6</artifactId>
		<version>11.2.0.3</version>
	</dependency>
</dependencies>

application.properties配置文件内容如下:

#数据库连接信息
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:orcl
spring.datasource.username=test
spring.datasource.password=test
spring.jpa.database=oracle
spring.jps.showsql=true

2、编写代码

2.1、实体类

首先我们创建实体类Dept,该实体包含deptno、dname、loc三个属性,实现序列号接口,添加get和set方法,并重写toString方法,代码如下:

@Entity
@Table(name="DEPT")
public class Dept implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@Column(name="deptno")
	private Integer deptno;
	
	@Column(name="dname")
	private String dname;
	
	@Column(name="loc")
	private String loc;
	
	// 省略get、set和toString()方法

}

2.2、Dao层

创建一个接口DeptDao,继承JpaRepository接口,DeptDao中我们不添加其他方法,代码如下:

@Repository("deptDao")
public interface DeptDao extends JpaRepository<Dept,Integer>{
	
}

2.3、Service层

(1)创建一个接口DeptService,添加一个方法findDeptById,依据部门编号查询部门信息,代码如下:

public interface DeptService {
	
	public Dept findDeptById(Integer deptno);

}

(2)创建DeptService的实现类DeptServiceImpl,并注入DeptDao。实现方法中直接调用deptDao的findById方法查询部门信息,不做其他逻辑处理,代码如下:

@Service("deptService")
public class DeptServiceImpl implements DeptService{

	@Autowired
	private DeptDao deptDao;
	
	@Override
	public Dept findDeptById(Integer deptno) {
		return deptDao.findById(deptno).get();
	}

}

2.4、控制器Controller

创建部门控制器DeptController,并注入DeptService,这里设定部门编号为0,之后我们会展示从浏览器中获取部门编号以查询部门信息的写法,代码如下:

@RestController
@RequestMapping("/dept")
public class DeptController {
	
	@Autowired
	private DeptService deptService;
	
	@RequestMapping("/getDept")
	@ResponseBody
	public Dept getDept() {
		return deptService.findDeptById(0);
	}

}

2.5、Spring Boot启动类

最后,我们需要添加一个Spring Boot启动类StartApplication,在启动类上添加注解@SpringBootApplication并指定扫描的包路径、@EnableJpaRepositories指定JPA接口扫描包路径、@EntityScan指定实体Bean扫描包路径。代码如下:

@SpringBootApplication(scanBasePackages= {"com.don"})
@EnableJpaRepositories(basePackages= {"com.don.dao"})
@EntityScan(basePackages= {"com.don.pojo"})
public class StartApplication {
	
	public static void main(String[] args) {
		SpringApplication.run(StartApplication.class, args);
	}

}

3、测试

运行启动类的main方法,在浏览器中访问:http://localhost:8080/dept/getDept,返回如下结果:

接下来我们改造一下控制器以接收浏览器传递的参数部门编号,也即使用注解@PathVariable,改造之后的代码如下:

@RestController
@RequestMapping("/dept")
public class DeptController {
	
	@Autowired
	private DeptService deptService;
	
	@RequestMapping("/getDept/{deptno}")
	@ResponseBody
	public Dept getDept(@PathVariable("deptno")Integer deptno) {
		return deptService.findDeptById(deptno);
	}

}

在浏览器中访问:http://localhost:8080/dept/getDept/10,返回如下结果:

至此,Spring Boot 整合Spring Data JPA的简单案例就算完成了。

4、总结

Spring Boot整合Spring Data JPA极大的减少了代码量,确切的说应该是Spring Data JPA为我们实现了DAO层,从而减少了DAO层访问数据库的代码量。如果我们需要实现复杂的数据库访问,这需要我们从新定义接口方法,通常就不会减少DAO层的代码量。Spring Boot整合与纯Spring Data JPA开发相比开发步骤少了编写配置文件这一步,这已经为我们的开发带来很大的方便。

代码链接地址:https://pan.baidu.com/s/1fKeWSZOTZ_BXQ4EAwmqIXA  提取码:h8kc 
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值