本章完成数据列表显示功能

ORM 和 JPA

ORM (Object Relation Mapping) 是对象/关系映射,它将数据库中的表
和内存中的对象建立映射关系。

对象和关系型数据是业务实体的两种表现形式。
业务实体在内存中表现为对象,在数据库中表现为关系型数据。
内存中的对象不会被永久保存,关系型数据库中的对象会被永久保存。

JPA 概念

  • JPA (Java Persistence API) 是一种 Java 持久化 API,用于对象的持久化,是一种非常强大的 ORM 解决方案。
  • JPA 通过简单约定好接口方法的规则自动生成相应的 JPQL 语句,然后映射成 POJO 对象。

JPA 基本用法

数据库启动有问题的见本人另一篇博客!
启动MySQL:net start mysql出现问题+本地Mysql忘记密码的修改方法

  1. 准备工作
  • 新建 Spring Boot 项目:jpademo
  • 添加相关依赖:
  • pom.xml
<!-- Spring Data JPA 依赖(重要) --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- MySQL 驱动(重要) --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency>
  • 添加完依赖,要重启IDEA

  • 数据库连接配置(这个很重要!)

  • 在 application.properties 添加数据库连接配置:(username和password记得填自己的!推荐全写root,好记!)

#自动生成数据库表(关键)update表示更新或者创建数据表结构(首次)
spring.jpa.hibernate.ddl-auto=update
#mysql数据库连接配置(非常重要)
#端口号,数据库名,时区信息
spring.datasource.url = jdbc:mysql://localhost:3306/testdb?serverTimezone=Asia/Shanghai
spring.datasource.username = root
spring.datasource.password = root
#mysql数据库驱动程序(重要)
spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver
#jpa配置:在控制台显示Hibernate的sql(可选)
spring.jpa.show-sql = true
#其他配置:关闭Thymeleaf 的缓存
spring.thymeleaf.cache = false
  • 运行项目,自动生成表。
  • 图中是Navicat和MySQL Workbench两个的界面,别看混了。
  • (因为我的老师使用的是MySQL Workbench,但是我比较喜欢用Navicat,所以就都用了试下。)
  • 怎么看?见本人另外一篇博客:MySQL新建数据库+用Navcat查看MySQL的方法

  1. 创建实体类
    在 entity 包中新建 User 类:用于映射数据库表
  • user.java
  • 自己敲的时候的顺序:
    先写以下内容:
import javax.persistence.*;
import java.util.Date;@Entity //声明类为实体类,不能掉!
public class User implements Serializable {private Long id; // Long 对应MySQL数据库 bigint 类型private String username;private String password;private Date regdate; // Date 对应MySQL数据库 datetime 类型private int status;
// getter/setter
}
  • 再加上注解(就是@的内容)
  • 再加上getter和setter
  • (不会还有人手动敲吧?不会还不会generate吧?)

  • 这里要按住shift全选
  • 点击ok,自动生成getter
  • setter同理~
  • 完成后的代码:
package com.example.demo.entity;import org.springframework.format.annotation.DateTimeFormat;import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;@Entity
public class User implements Serializable {@Id //表示该属性作为表的主键@GeneratedValue(strategy = GenerationType.IDENTITY)//设定主键生成策略:IDENTITY表示由数据库自动生成private Long id;// Long 对应MySQL数据库 bigint 类型@Column(nullable = false,unique = true,length = 20)//列字段,非空且唯一,字符最大长度20private String username;@Column(nullable = false,length = 20)//列字段,非空,字符最大长度20private String password;@Column(nullable = false)@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")//声明日期格式private Date regdate;// Date 对应MySQL数据库 datetime 类型@Column(nullable = false)private int status;//状态:0是离线,1是在线,等。public Long getId() {return id;}public String getUsername() {return username;}public String getPassword() {return password;}public Date getRegdate() {return regdate;}public int getStatus() {return status;}public void setId(Long id) {this.id = id;}public void setUsername(String username) {this.username = username;}public void setPassword(String password) {this.password = password;}public void setRegdate(Date regdate) {this.regdate = regdate;}public void setStatus(int status) {this.status = status;}
}
  • 添加记录:

    如果用的是MySQL Workbench:


  1. 创建数据接口访问层(repository仓库)
  • JPA 提供了操作数据库的接口。在开发过程中继承和使用这些接口,可
    简化持久化开发工作。
  • Spring能够找到自定义接口,并生成代理类,在开发过程中可以不写相
    关SQL操作,由代理类自动生成。
  • JPA接口:JpaRepository

public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T>
其中:T表示实体类,ID表示主键类型,ID必须实现序列化

创建过程:repository仓库

  • 新建 repository 包,并新建接口:UserRepository(仓库接口)
  • 该接口要 extends JpaRepository<User, Long> 接口(User:实体模型类,Long:主键类型)


UserRepository.java

package com.example.demo.repository;import com.example.demo.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;public interface UserRepository extends JpaRepository<User, Long> {// JpaRepository 自动实现了很多内置的CURD方法 (厉害啊!)
// 这些方法以后可直接调用,例如:
// List<T> findAll();
// Optional<T> findById(id);
// User save(user);
// void delete(user);
// void deleteById(id);
// long count();
// boolean existsById(id);
}

  1. 调用Repository完成业务控制
  • 在 controller 包中新建 UserController 控制器。

  • 代码顺序还是和上文介绍的一样,不复制粘贴总是有好处的~

package com.example.demo.controller;import com.example.demo.entity.User;
import com.example.demo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
public class UserController {//@Autowired:自动注入,即对象只需声明,不用new就能使用(Spring IoC技术体现,厉害呀!)@AutowiredUserRepository userRepository;@RequestMapping("/get/{id}")public User getUserById(@PathVariable Long id){//Repository内置的方法,可直接使用,根据 id 查找对象//注:findById(id)返回的是Optional类(一个可以为null的容器对象),如果对象存在则调用get()方法返回该对象User user =userRepository.findById(id).get();return user;}@RequestMapping("/list")public List<User> list(){//Repository内置的方法,可直接使用,查找所有对象List<User> users = userRepository.findAll();return users;}
}
  • 请求试试
    http://localhost:8080/get/1

    在postman中测试:

http://localhost:8080/list

[JAVA EE] JPA技术基础:完成数据列表显示相关推荐

  1. [JAVA EE] JPA技术基础:完成数据列表的删除

    接上一篇:[JAVA EE] JPA技术基础:完成数据列表显示 本章完成数据列表的删除 修改 UserController.java package com.example.demo.controll ...

  2. [JAVA EE] JPA 技术实践:完成增、删、改、查操作

    项目已上传:https://codechina.csdn.net/qq_36286039/javaee 注意本项目是包含后文JPA 查询用法内容的,若您想看只有本文内容的项目,请下载: https:/ ...

  3. 开课吧:Java开发常用技术基础部分有哪些?

    在Java中,OOM是java.lang.OutOfMemoryError的缩写,简单来说是应用的内存用完了.而这个内存,指代的是JVM管理的内存模型. Java开发常用技术基础有如下几种: Priv ...

  4. Java毕业设计_基于SSH的Java EE开发技术课程网站设计

    基于SSH的Java EE开发技术课程网站设计 基于SSH的Java EE开发技术课程网站设计mysql数据库创建语句 基于SSH的Java EE开发技术课程网站设计oracle数据库创建语句 基于S ...

  5. Java EE服务技术

    Java EE容器为组件提供了各种服务,这些服务是企业应用经常用到但开发人员难以实现的,例如命名服务.数据库连接.上下文和依赖注入.事务.安全和连接框架等.现在这些服务已经由容器实现,因此Java E ...

  6. 工程数据计算机处理的方法有,第二章 CADCAM技术基础-工程数据的计算机处理2011.ppt...

    文档介绍: CAD/CAM技术基础 CAD/CAM Technology Base 主讲人:XXX E-mail:XXX 第二章 工程数据的计算机处理 Computer Processing of E ...

  7. Java EE组件技术

    组件是Java EE应用的基本单元.Java EE 6提供的组件主要包括三类:客户端组件.Web组件和业务组件. 1.客户端组件 用户通过客户端组件与企业应用进行交互.Java EE客户端既可以是一个 ...

  8. 1. Java EE简介 - JavaEE基础系列

    什么是Java EE? 真的是你理解的那样吗? Java EE, 原名J2EE, 其核心由一系列抽象的标准规范所组成, 是针对目前软件开发中所普遍面临问题的解决方案. 注意以上定义中的"抽象 ...

  9. java ee开发技术 上海大学_上海大学计算机工程与科学学院硕士生导师刘 炜

    刘炜,男,1978年生,副研究员,中国计算机协会会员,服务计算专委会委员.2005 年5月毕业于上海大学计算机学院,获控制理论与控制工程专业博士学位.2005 年9 月至2007 年11 月,在上海大 ...

最新文章

  1. 为什么vs数据库中文显示问号_本科论文知网不收录为什么会被知网查重到?
  2. Exchange Server 2010中控制台用命令设置用户邮箱自动回复
  3. Linux笔记1- 6 --文件
  4. mysql readline_readLine的两种用法
  5. python logging mysql_Python 操作 MySQL 的正确姿势
  6. 华为手机的分类有何区别_“鸿蒙”系统能不能玩安卓游戏?如果能,它跟安卓系统有何区别?...
  7. 20. Cookie 和 Session
  8. 漫画:如何优化 “字符串匹配算法”?
  9. mysql联合索引测试
  10. memcached教程_Memcached教程
  11. 你不知道的JS之作用域和闭包(三)函数 vs. 块级作用域
  12. 设计模式-01-设计模式简介及分类
  13. 复旦计算机系统基础课件,复旦大学软件工程考研(MSE)计算机系统基础复习资料.ppt...
  14. 常用的机器学习与深度学习算法简介
  15. 一个无穷积分方程的求解
  16. [TJOI2019]唱、跳、rap和篮球——NTT+生成函数+容斥
  17. 浅谈建站经验之网站建设的流程与步骤
  18. 书到用时方恨少,一大波JS开发工具函数来了
  19. python实现键盘自动输入_人生苦短我用Python——模拟鼠标点击和键盘输入的操作...
  20. iPhone 自动关机 原因 天气太冷

热门文章

  1. 2022-2028年中国SIP芯片行业市场前景预测及投资战略研究报告
  2. 2022-2028年中国抗菌不锈钢行业研究及前瞻分析报告
  3. c#打开数据库连接池的工作机制_数据库连接池-tomcat-jdbc使用笔记
  4. 只有变强大,才能照亮他人
  5. 日志处理logger
  6. seq2seq(1)- EncoderDecoder架构
  7. 数字汽车钥匙的安全性增强技术
  8. 2021年大数据Hadoop(七):HDFS分布式文件系统简介
  9. CentOs7中安装python3.7.6
  10. 山西农业大学c语言答案,第一章C语言及程序设计概述-东北农业大学教务处.doc...