微服务:Spring Boot第三篇——数据访问Spring Data JPA

这篇要从HelloWorld进一步,实现从数据库中取数据,然后显示在web页面上的功能,数据库采用H2,这是一种嵌入式的数据库,无需安装独立的客户端或者服务器端。

Hibernate是一种使用对象关系映射(Object-Relational Mapping)实现数据访问和操作的技术,它将模型层的类与数据库的表进行映射,这样在程序操纵对象同时也可以实现对底层数据库的操作,而不需要再去编写底层数据库代码。JPA即Java Persistence API就是由Hibernate主导的,基于对象关系映射的标准规则,Spring Data JPA是Spring Data的一个子项目,提供了基于JPA的Repository来减少JPA作为数据访问方案的代码量。

首先建立H2数据库,之前我们在下载项目的时候已经选择了有h2的依赖,接下来在application.property文件中写入一些数据库的配置。

spring.jpa.generate-ddl=false
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none
spring.datasource.platform=h2
spring.datasource.schema=classpath:schema.sql
spring.datasource.data=classpath:data.sql
logging.level.root=INFO
logging.level.org.hibernate=INFO
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
logging.level.org.hibernate.type.descriptor.sql.BasicExtractor=TRACE
Spring Boot配置文件的可选项多达几百个,建议用到的时候再去查找。上面的schema和data分别是存放在source目录下的数据库初始化和插入数据的文件,里面的内容如下。

drop table user if exists;
create table user (id bigint generated by default as identity, username varchar(40), name varchar(20), age int(3), balance decimal(10,2), primary key (id));
上面是schema.sql的内容,下面是data.sql文件的内容。

insert into user (id, username, name, age, balance) values (1, 'account1', '张三', 20, 100.00);
insert into user (id, username, name, age, balance) values (2, 'account2', '李四', 28, 180.00);
insert into user (id, username, name, age, balance) values (3, 'account3', '王五', 32, 280.00);
接下来建立user对应的实体类,在com.movie.example_1下建立entity包用来存放对应数据库的实体类,建立User类,内容如下。

package com.movie.example_1.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

import org.hibernate.annotations.GeneratorType;

import java.math.BigDecimal;

@Entity
public class User {
	@Id
	@GeneratedValue
	private Long id;
	@Column
	private String username;
	@Column
	private String name;
	@Column
	private Integer age;
	@Column
	private BigDecimal balance;
	
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getUserName() {
		return username;
	}
	public void setUsername(String userName) {
		this.username = userName;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public BigDecimal getBalance() {
		return balance;
	}
	public void setBalance(BigDecimal balance) {
		this.balance = balance;
	}

	
}
上面的声明@Entity表明这是一个实体类,@Id说明下面这个属性是主键,@GeneratedValue说明主键的生成规则为默认(AUTO),通过@Entity声明我们可以通过操作该对象类来直接改变底层数据库。

接下来需要建立数据访问层,使用Spring Data JPA建立数据访问层只需要定义一个继承JpaRepository的接口即可。在com.movie.example_1下建立repository包,然后建立UserRepository接口,代码如下。

package com.movie.example_1.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.movie.example_1.entity.User;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

}
继承JpaRepository接口意味着我们默认已经有了增删改查一系列基本操作,如果要进行比较复杂的数据库操作还需要实现自己的方法,不过对这个简单的程序来说里面不需要写任何代码。

然后需要建立控制层,在com.movie.example_1.controller下建立UserController类,代码如下。

package com.movie.example_1.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import com.movie.example_1.repository.*;
import com.movie.example_1.entity.*;

@RestController
public class UserController {
	@Autowired
	private UserRepository userRepository;
	
	@GetMapping("/{id}")
	public User findById(@PathVariable Long id) {
		User findOne = this.userRepository.findOne(id);
		return findOne;
	}
}
基本过程和上一篇的HelloWorld类似,不过这次使用到了Bean,所以用@Autowired进行了注入,在一个方法或变量上加上这个注解,等于告诉Spring接下来有一个Bean需要被注入。@GetMapping等价于@RequestMapping(method=RequestMethod.GET). @PathVariable注解表明需要从URI中取出一个变量,也就是id

接下来运行项目,除了Hello之外就有另外一个页面了,输入http://localhost:8080/1会看到如下图结果,后面这个1就是id,也可以换成2和3




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值