使用Spring Data JPA访问数据库

JPA(全称为 Java Persistenec API)是Sun官提出的Java持久化规范。它为Java开发者提供了一种对象/关联映射工具,用于管理Java应用中的关系数据。它的出现是为了整合现有的ORM技术并简化现有的持久层开发工作。
Spring Data JPA是Spring基于ORM框架、JPA规范之上封装的一套JPA应用框架,开发者可以通过极简的代码来实现对数据的访问和操作,基本上有所的CRUG(增加create、读取查询retrieve、更新update、删除delete的首字母缩写)都可以依赖它来实现。

创建数据库

在本地运行MySQL数据库,创建一个名为stu的数据库,然后创建名为user的数据表。
在这里插入图片描述

CREATE DATABASE stu

CREATE TABLE users(
id SMALLINT UNSIGNED PRIMARY KEY NOT NULL AUTO_INCREMENT,
NAME VARCHAR(20) NOT NULL,
age TINYINT UNSIGNED NOT NULL,
sex VARCHAR(10)
);

INSERT users VALUES
(NULL,"白起",37,'男'),
(NULL,"王翦",32,'男'),
(NULL,"李牧",30,'男')

新建【Spring Starter Project】

打开Spring官方的STS集成开发工具,创建工程名为JPA,包名为com.demo.jpa的Spring Boot项目,
在这里插入图片描述
点击【Next】进入下一界面,在当前界面勾选项目需要的Spring模块,包括Spring Web,Spring Data JPA以及MySQL Driver
在这里插入图片描述

添加内容

新建完成的Spring Boot项目在src/main/resources 目录下会有一个名为 application.properties 的配置文件,本项目需要配置数据库的账号、密码、要连接的数据库名以及数据库驱动:

spring.datasource.url=jdbc:mysql://localhost:3306/stu
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

编写这里的代码时,是会有提示出现。如果敲完等号左侧代码,报错或者没有提示那可能是真出错了。就比如我用的是STS第4版开发工具,里面的驱动就是spring.datasource.driver-class-name,而之前有的版本是spring.datasource.driverClassName,而且数据库的驱动类也要看情况而定。我的是MySQL8而MySQL5的驱动类应该是com.mysql.jdbc.Driver。而且对于Spring Boot项目,我试过不配置驱动也能正常使用,项目的驱动程序是通过SPI自动注册的,手动加载驱动程序类通常可以不要。但还是写上比较好。虽然都能运行成功,但是运行后的控制台输出的内容是不一致的。

编写Users实体类,该实体类对应MySQL数据库中的users表。

  • @Entity 注解表明这是一个实体bean
  • @Id 注解指定表的主键
  • @Column 注解定义了成员属性映射到关系表中的哪一列
package com.demo.jpa.entity;

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

@Entity
public class Users {
	@Id
	@GeneratedValue
	private Long id;
	
	@Column(nullable=false)
	private String name;
	@Column(nullable=false)
	private Integer age;
	@Column(nullable=false)
	private String sex;
	
	public Users() {}
	public Users(Long id,String name,Integer age,String sex) {
		this.id=id;
		this.name=name;
		this.age=age;
		this.sex=sex;
	}
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	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 String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}	
}

Repository(资源库)是一个访问领域对象的类似集合的接口,在领域与数据映射层之间进行协调。Spring Data JPA提供了几个Repository,其中JpaRepository实现一组JPA规范相关的方法。

package com.demo.jpa.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import com.demo.jpa.entity.Users;

public interface UserRepository extends JpaRepository<Users,Long>{
	Users findByName(String name);
}

编写控制层IndexController类,在allPerson()中调用UserRepository的findAll()方法来查询users表中的所有记录,在findPerson()方法中调用UserRepository类的findByName()来查询users表中的指定名字的一条记录:

package com.demo.jpa.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.demo.jpa.entity.Users;
import com.demo.jpa.repository.UserRepository;

@RestController
@RequestMapping(value="/person")
public class IndexController {
	@Autowired
	private UserRepository userRep;
	@GetMapping("/all")
	public List<Users> allPerson(){
		return userRep.findAll();
	}
	@GetMapping("/find")
	public Users findPerson(@RequestParam(value="name") String name){
		return userRep.findByName(name);
	}
}

演示效果

项目结构:
在这里插入图片描述
完成之后,起动这个项目。

打开浏览器访问 http://localhost:8080/person/all,请求会传给IndexController处理器的allPerson()方法,返回users表中的所有记录,返回结果如下:
在这里插入图片描述
在浏览器中访问 http://localhost:8080/person/find?name=李牧,请求传给IndexController处理器的findPerson()方法,返回users表中name字段为李牧的记录,返回结果如下:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值