博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Spring Data JPA访问关系型数据库
阅读量:4091 次
发布时间:2019-05-25

本文共 4628 字,大约阅读时间需要 15 分钟。

使用Data JPA访问关系型数据库 由发表在

数据库操作是我们搭建应用的基本操作,今天我们来学习一下如何利用 Data Jpa访问关系型数据库吧。

环境准备

  • 一个称手的文本编辑器(例如Vim、Emacs、Sublime Text)或者IDE(Eclipse、Idea Intellij)
  • 环境(JDK 1.7或以上版本)
  • 构建工具Gradle 2.3
  • 关系型数据库

使用Gradle作为项目构建工具

首先创建一个项目目录,在目录中创建一个Gradle项目描述文件build.gradle

buildscript {    repositories {        jcenter()    }    dependencies {        classpath "org.springframework.boot:spring-boot-gradle-plugin:1.2.5.RELEASE"        classpath "com.github.adrianbk:gradle-jvmsrc-plugin:0.6.1"    }}apply plugin: 'java'apply plugin: 'eclipse'apply plugin: 'idea'apply plugin: 'spring-boot'apply plugin: 'com.github.adrianbk.jvmsrc'jvmsrc {    packageName "tmy"}jar {    baseName = 'spring-boot-guides'    version =  '1.0.0'}repositories {    jcenter()}dependencies {    compile("org.springframework.boot:spring-boot-starter-data-jpa")}task wrapper(type: Wrapper) {    gradleVersion = '2.4'}

在这个文件中,使用到了来帮助我们简化一些配置工作:

  • 提供了框架的依赖定义,在dependencies标签中直接使用它们即可(不需要声明版本号)
  • 将应用的代码及所有的依赖打包成一个单独的jar文件
  • 自动搜索main函数并作为jar文件的启动函数,jar文件是一个独立可执行的文件
  • spring-boot-starter-data-jpa引入了项目的依赖

另外由于Gradle的默认特性——例如源代码放在src/main/java文件夹下,我们引入插件,通过配置:

apply plugin: 'com.github.adrianbk.jvmsrc'jvmsrc {    packageName "tmy"}

并运行gradle createJvmSrcDirssrc/main/java/tmy等目录就被创建出来,省去我们手动创建的麻烦。

定义实体对象

这节课中我们将定义一个实体对象User并将其存储到关系型数据库中,并使用JPA注解:

src/main/java/tmy/User.java

package tmy;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;@Entitypublic class User {    @Id    @GeneratedValue(strategy=GenerationType.AUTO)    private long id;    private String firstName;    private String lastName;    protected User() {}    public User(String firstName, String lastName) {        this.firstName = firstName;        this.lastName = lastName;    }    @Override    public String toString() {        return String.format(                "User[id=%d, firstName='%s', lastName='%s']",                id, firstName, lastName);    }}

User对象包含三个字段:

  • id作为唯一标识符,这里用到了JPA注解@GeneratedValue(strategy=GenerationType.AUTO)表明它是一个自增字段
  • firstNamelastName没有任何注解,但User注解为@Entity所以它们也被映射为同名的字段

提示

User对象各个字段都是private的,所以还需要为它们加上Getter/Setter方法,限于篇幅,本课程中都省略这些方法

创建对象访问方法

Spring Data JPA项目使用JPA注解将Java对象转化为关系型数据库中的记录。它最大的特点是能够自动创建数据访问对象的实现,例如现在我们创建一个访问User对象的接口:

src/main/java/tmy/UserRepository.java

package tmy;import java.util.List;import org.springframework.data.repository.CrudRepository;public interface UserRepository extends CrudRepository
{ List
findByLastName(String lastName);}

UserRepository继承了Spring Data JPA中的CrudRepository,已经包含了保存(save()),删除(delete()),查询(findOne()findAll())等预定义方法,同时开发者还能够根据命名约定来扩展,上例中的findByLastName(String lastName)实际上等价于SQL语句select * from user where lastName=?

在接口中定义这个方法后,无需实现它,Spring Data JPA会根据方法的名字自动实现这个方法,很方便吧!

创建Application类运行应用

src/main/java/tmy/Application.java

package tmy;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.CommandLineRunner;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class Application implements CommandLineRunner {    @Autowired    UserRepository repository;    public static void main(String[] args) {        SpringApplication.run(Application.class);    }    @Override    public void run(String... strings) throws Exception {        // save a couple of users        repository.save(new User("Jack", "Bauer"));        repository.save(new User("Chloe", "O'Brian"));        repository.save(new User("Kim", "Bauer"));        repository.save(new User("David", "Palmer"));        repository.save(new User("Michelle", "Dessler"));        // fetch all users        System.out.println("User found with findAll():");        System.out.println("-------------------------------");        for (User user : repository.findAll()) {            System.out.println(user);        }        System.out.println();        // fetch an individual user by ID        User user = repository.findOne(1L);        System.out.println("User found with findOne(1L):");        System.out.println("--------------------------------");        System.out.println(user);        System.out.println();        // fetch customers by last name        System.out.println("User found with findByLastName('Bauer'):");        System.out.println("--------------------------------------------");        for (User user : repository.findByLastName("Bauer")) {            System.out.println(user);        }    }}

总结

这节课中我们使用Spring Data JPA对关系型数据库进行访问,在实现过程中借助Spring Boot框架很轻易的配置了Spring Data JPA。这让我们更加专注于业务并且能够编写出质量更高、可维护性更好的代码。

更多文章请访问

你可能感兴趣的文章
霸榜 GitHub:去你丫的算法!
查看>>
卧槽!MIT 正式开放 AI 学习资源网,连小孩都能学!
查看>>
前女友让我撸个植物大战僵尸,我一怒之下把代码开源了...
查看>>
卧槽!长达 5000 页的 Java 中文必备手册正式开放下载!
查看>>
不吹不黑!逛 GitHub 没看过这 10 个开源项目,绝对血亏...
查看>>
这才是你需要的 C 语言、C++ 学习路线!
查看>>
IntelliJ IDEA 2020.1 稳定版正式发布!
查看>>
PyCharm 2020.1 稳定版正式发布!
查看>>
苹果新系统遭吐槽!SSH 默认规则被破坏,程序员无法登录 Web 服务器...
查看>>
卧槽!小姐姐用动画图解 Git 命令,这也太秀了吧?!
查看>>
厉害了!Python 编辑器界的神器 Jupyter ,推出官方可视化 Debug 工具!
查看>>
你的银行账户信息,可能正被人拿到暗网上公开售卖!
查看>>
太赞啦!GitHub 重磅宣布,私有仓库将对外免费开放,不限人数!
查看>>
我用 Python 分析了 “青你 2” 漂亮小姐姐的颜值,结果真香!
查看>>
这款开源神器,让你能在 iPad 上随心所欲写代码!
查看>>
卧槽!Java 虚拟机竟然还有这些性能调优技巧...
查看>>
JavaScript 诞生的这 20 年来,都发生了什么...
查看>>
听说玩这些游戏能提升编程能力?
查看>>
7 年工作经验,面试官竟然还让我写算法题???
查看>>
被 Zoom 逼疯的歪果仁,造出了视频会议机器人,同事已笑疯丨开源
查看>>