Springboot数据库访问JPA

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Springboot数据库访问JPA

本篇将介绍几种连接数据库的方式。首先我们今天使用JPA进行连接数据库进行测试。

首先我们先得安装一个数据库,我本机是使用虚拟机上进行安装docker,docker安装的mysql数据库。

docker安装

docker的安装直接参考官方文档:

docker常用的命令

我们可以查询命令https://docs.docker.com/engine/reference/commandline/docker/,也可以在docker里边输入docker help查询命令。

docker search  #从docker搜索镜像 Search the Docker Hub for images

docker pull #拉取镜像  Pull an image or a repository from a registry

#拉取的时候可以加上版本号,或者拉取最新的

docker ps #查看当前运行的镜像

docker ps -a #查看所有的,包括停止运行的

docker rename #给容器修改名字  Rename a container

docker restart #重启容器  Restart one or more containers

docker run #创建容器Run a command in a new container

docker rm #删除容器Remove one or more containers

docker 安装mysql

#拉取mysql

docker pull mysql

#创建容器

docker run -itd -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql

#查看容器

docker ps

docker ps查看mysql

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

c71ff8eff881 mysql “docker-entrypoint.s…” 40 hours ago Up 18 hours 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql

命令创建数据库

命令登录mysql

docker exec -it mysql bash

#登录mysql

mysql -u root -p

操作数据库

#创建数据库

create database dbname;

#创建数据库test

create database test;  

#查看数据库

show databases;

#使用选择数据库

use database;  

use test;//Database changed

引入依赖

<!--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>

     <version>5.1.47</version>

   </dependency>

yml配置

需要配置数据库连接信息以及jpa信息

server:

 port: 8812

spring:

 application:

   name: SpringbootJPA

 #配置数据库

 datasource:

   url: jdbc:mysql://数据库ip:3306/test

   driver-class-name: com.mysql.jdbc.Driver

   username: root

   password: 123456

 jpa:

   hibernate:

     ddl-auto: update #更新或者创建数据表结构

     dialect: org.hibernate.dialect.MySQL8Dialect

   show-sql: true  #控制台显示SQL

创建实体类

package com.elite.springboot.Entity;

import lombok.Data;

import lombok.Getter;

import lombok.Setter;

import org.springframework.data.annotation.Id;

import javax.persistence.*;

//使用JPA注解配置映射关系

@Entity //告诉JPA这是一个实体类(和数据表映射的类)

@Table(name = "user") //@Table,指定表明,不指定默认和类名字一样

@Getter

@Setter

@Data

public class User {

   @javax.persistence.Id

   @Id //这是一个主键

   @GeneratedValue(strategy = GenerationType.IDENTITY)//自增主键

   private Integer id;

   @Column(name = "user_name", length = 50) //这是和数据表对应的一个列

   private String username;

   @Column(name = "age", length = 3) //这是和数据表对应的一个列

   private Integer age;

   @Column //省略默认列名就是属性名

   private String address;

}

创建一个接口UserDao来操作实体类对应的表

package com.elite.springboot.Dao;

import com.elite.springboot.Entity.User;

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

import org.springframework.stereotype.Repository;

/**

* 编写一个UserDao接口来操作实体类User对应的数据表

*/

@Repository

public interface UserDao extends JpaRepository<User,Integer> {

}

提供的核心接口源码

//查找所有的

List<T> findAll();

List<T> findAll(Sort var1);

List<T> findAllById(Iterable<ID> var1);

<S extends T> List<S> saveAll(Iterable<S> var1);

void deleteInBatch(Iterable<T> var1);

void deleteAllInBatch();

//根据ID获取

T getOne(ID var1);

<S extends T> List<S> findAll(Example<S> var1);

<S extends T> List<S> findAll(Example<S> var1, Sort var2);

应用启动类

package com.elite.springboot;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.boot.autoconfigure.domain.EntityScan;

@SpringBootApplication

//需要扫描实体

@EntityScan("com.elite.springboot.Entity")

public class SpringbootJPA {

   public static void main(String[] args) {

       SpringApplication.run(SpringbootJPA.class,args);

   }

}

测试CRUD

package com.elite.springboot;

import com.elite.springboot.Dao.UserDao;

import com.elite.springboot.Entity.User;

import lombok.extern.slf4j.Slf4j;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;

import java.util.List;

/**

* 测试User CRUD

*/

@Slf4j

@RunWith(SpringRunner.class)

@SpringBootTest

public class AppTest {

   @Resource

   private UserDao userDao;

   /**

    * 测试新增User

    * @throws Exception

    */

   @Test

   public void insertUser(){

       //select * from user

       //插入的sql日志:insert into user (address, age, user_name) values (?, ?, ?)

       User user = new User();

       user.setUsername("牛奶糖");

       user.setAge(22);

       user.setAddress("xx省市");

       User save = userDao.save(user);

   }

   /**

    * 更新User

    * @throws Exception

    */

   @Test

   public void updateUser() {

       //更新也是调用save方法

       //update user set address=?, age=?, user_name=? where id=?

       User user = new User();

       user.setUsername("牛奶糖");

       user.setId(1);

       user.setAge(24);

       user.setAddress("xx省市");

       userDao.save(user);

   }

   /**

    * 查询用户

    * @throws Exception

    */

   @Test

   public void getUser() {

       User user = userDao.getOne(1);

       System.out.println(user);

   }

   /**

    * 查询用户列表

    */

   @Test

   public void getUserList()  {

       //select user0_.id as id1_0_, user0_.address as address2_0_, user0_.age as age3_0_, user0_.user_name as user_nam4_0_ from user user0_

       List<User> userList = userDao.findAll();

       for (User user:userList){

           System.out.println(user);

       }

       //User(id=1, username=牛奶糖, age=24, address=xx省市)

       //User(id=2, username=tom, age=22, address=guangzhou)

   }

   /**

    * 删除用户

    */

   @Test

   public void DelUser()  {

       //delete from user where id=?

      userDao.deleteById(2);

   }

}


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
19天前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
38 4
SpringBoot入门(4) - 添加内存数据库H2
|
14天前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
54 13
|
8天前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
24 4
|
10天前
|
JSON JavaScript 前端开发
springboot中使用knife4j访问接口文档的一系列问题
本文介绍了在Spring Boot项目中使用Knife4j访问接口文档时遇到的一系列问题及其解决方案。作者首先介绍了自己是一名自学前端的大一学生,熟悉JavaScript和Vue,正在向全栈方向发展。接着详细说明了如何解决Swagger请求404错误,包括升级Knife4j依赖、替换Swagger 2注解为Swagger 3注解以及修改配置类中的代码。最后,针对报JS错误的问题,提供了删除消息转换器代码的解决方法。希望这些内容能对读者有所帮助。
|
16天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
30 3
|
21天前
|
前端开发 Java 测试技术
深入剖析:Spring Boot Controller中请求处理方法的访问修饰符
【10月更文挑战第21天】 在Spring Boot应用中,Controller类中的请求处理方法通常用于处理HTTP请求。这些方法的访问修饰符(private或public)对方法的行为和可访问性有着重要影响。本文将深入探讨在Controller中使用private和public修饰符的区别,以及它们对Spring MVC框架的影响。
24 8
|
18天前
|
SQL Java 数据库连接
打破瓶颈:利用Java连接池技术提升数据库访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,避免了频繁的连接建立和断开,显著提升了数据库访问效率。常见的连接池库包括HikariCP、C3P0和DBCP,它们提供了丰富的配置选项和强大的功能,帮助优化应用性能。
37 2
|
10天前
|
存储 安全 Java
springboot当中ConfigurationProperties注解作用跟数据库存入有啥区别
`@ConfigurationProperties`注解和数据库存储配置信息各有优劣,适用于不同的应用场景。`@ConfigurationProperties`提供了类型安全和模块化的配置管理方式,适合静态和简单配置。而数据库存储配置信息提供了动态更新和集中管理的能力,适合需要频繁变化和集中管理的配置需求。在实际项目中,可以根据具体需求选择合适的配置管理方式,或者结合使用这两种方式,实现灵活高效的配置管理。
10 0
|
Oracle NoSQL Java
SpringBoot | 1.4 数据库事务处理
前面讲解了Sring的AOP,可以知道它是用来抽取公共代码,增强方法的。而在JDBC操作数据库进行数据处理时,有很多重复的公共代码;事务的提交与回滚跟AOP的约定流程很相似。因此,Spring数据库事务编程的思想基于AOP的设计思想,数据库事务处理是AOP的一种典型应用。 注:在说明注解时,第一点加粗为注解中文含义,第二点为一般加在哪身上,缩进或代码块为示例,如: **@注解** - **中文含义** - 加在哪 - 其他…… - `语句示例` ```java //代码示例 ```
643 0
SpringBoot | 1.4 数据库事务处理
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
143 1