SpringBoot 整合 JPA-Hibernate|学习笔记

简介: 快速学习 SpringBoot 整合 JPA-Hibernate

开发者学堂课程【SpringBoot 实战教程: SpringBoot 整合 JPA-Hibernate】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/651/detail/10804


SpringBoot 整合 JPA-Hibernate


1、jpa 是持久化规范,它制定了一些持久化的接口,hibernate 是它具体的实现。

2、首先需要依赖 jpa 的包。

<!--springboot 整合 jpa-->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-jpa</artifactId> spring提供的依赖

</dependency>

<dependency>

<groupId>mysql</groupId>使用的是 mysql 数据库,所以还要将 mysql 的包进行依赖

<artifactId>mysql-connector-java</artifactId>

</dependency>

把依赖加到工程中,已经做好 web 的依赖,写好启动类,接下来配置连接 mysql 的相关信息,以及 jpa 的相关信息,这些需要在全局配置文件中配置。

和数据库相关的配置主要有以下四项,全局配置配置文件:

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.username=root

spring.datasource.password=root

spring.datasource.url=jdbc:mysql://localhost:3306/db6

使用 db6 数据库

#让控制器输出 json 字符串格式

spring.jackson.serialization.indent-output=true让控制器输出字符串的格式

spring.jpa.hibernate.ddl-auto=update在执行 ddl 操作时执行哪一种

spring.jpa.show-sql=true显示 sql 语句spring.jpa.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect 以及使用的方言

3、这些配置好后,创建实体类,jpa 会根据实体类自动生成相应的表,创建包,命名为 com.qianfeng.pojo。

比如创建 user 实体类。

定义一些属性。生成 set,get 方法,它现在只是普通的实体类,不可能自动生成相应的表。加注解 Entity 后,jpa 就知道需要为 user 实体类生成相应的表,表的名字默认和实体类的名字相同,如果不想用这个名字,使用 table 注解表明。一张表是需要有主见的,如何指定 id 作为表的主见,需要使用注解 id,主见上的值如何生成,生成策略是什么?使用注解 GeneratedValue。指定主见上的值如何生成。

auto 表示自动生成,对 mysql 仍然是自动增长,identity 也是自动增长,sequence 序列,mysql 不支持,用表的方式。其他的属性映射到表中就是相应的字段,如果希望字段名和属性名相同,不需要做任何操作,如果不同需要添加注解 column,添加表中的名字,如果只写注解,不指定,表中字段名和属性名是一样的。。

import java.util. Date;

import javax.persistence . Entity;

@Entity

@Table (name="t_user")

public class User {

@id

@GeneratedValue(strategy=GenerationType. IDENTITY)这里选 IDENTITY 让它自动增长

PrivateIntegerid;

PrivateStringname ;

private String password;

private String email;

PrivateDate birthday;

public Integer getId() {

Returnid;

}

public void setId (Integer id) {

this. id = id;

}

public String getName () {

return name ;

}

public void setName (String name) {

this. name = name ;

4、创建 dao 层,命名为 com.qianfeng.dao。

只需要创建一个接口,命名为 userdao。

不需要创建实体类,只需要创建一个接口,只不过要让接口继承 jpaRepository,它有两个范型,一个范性是实体类的类型,第二个范型是实体类中做为主见属性的类型,integer 类型。jpaRepository 提供增删改成的功能。

package com. qianfeng.dao;

import org.spring framework.data.jpa. repository .JpaRepository;

import com. qianfeng .pojo.User;

public interface UserDao extends JpaRepository<User, Integer> {

}

5、创建 service,命名为 com.qianfeng.service。

首先写一个接口 UserService。

写一个功能,添加用户,写具体的实现类,UserServicelmpl。

加 service 注解,调用 dao,并且注入,添加用户,但是dao里面没有写具体的功能,只是继承了一个 JpaRepository。仍然可以实现添加,

package com. qianfeng . service;

import org. springframework. stereotype . Service;

importcom. qianfeng . dao. UserDao;

import com. qianfeng .pojo.User;

@Service

public class UserServiceImpl implements UserService {

private UserDaouserDao;

@ AutowiredPrivateUserDaouserDao;

@Override

public voidadlmUser (User user) {

userDao. save (user) ;

}

}

6、创建 controller,com.qianfeng.controller。Usercontroller。

加上注解,controller 调用 service,注入,实现添加 saveuser,手动创建 user 对象。

@Controller

public class UserController {

@Autowired

private UserService userService ;

@RequestMapping("/ save'')添加用户

@ResponseBody

public StringsaveUser ()

{

Useruser= newUser() ;

user . setName("小花") ;

user . setPassword("123") ;

user. set Email ("xiaohua@163. com") ;

user . setBirthday (new Date () ) ;

userService . addUser (user) ;实现用户添加

return"success";返回成功的字符串

}

7、controller 和 service 需要进行扫描,在启动类中进行扫描。

@SpringBootApplication(scanBasePackages="com. qianfeng")

8、另外注意 pojo 实体类也需要进行扫描,用注解 EntityScan 进行扫描实体类。

@EntityScan ("com. qianfeng.pojo")//扫描实体类

9、dao 也需要扫描,在启动类中加入注解,指明 dao 所在的包。

@EnableJpaReposi tories ("com. qianfeng.dao")//扫描 sao

10、查看数据库,添加功能可以正常使用,启动,添加功能,小花,密码123。成功。

image.png 

查看是否自动生成表,可以看到已经添加成功,并且规定的表名是 t-user,有 id,name,password,email,birthday。这和实体类中的属性名相同。

image.png

11、添加两个功能,在 service 中,根据 id 查找用户,删除用户。

@Override

public UserfindUser ( Integerid) {

return userDao. findOne (id) ;

}

@Override

public void delUser ( Integer id) {

userDao.delete (id) ;

}

在 controller 里写查找和删除,查找返回的是查到的对象。

@Reques tMapping("/ find/ {id}")接收 id 查找 find,传 id 值

@ResponseBody 阶层格式

public User findUser (@PathVariable Integer id)

return userService. findUser (id) ;

@RequestMapping("/del/ (id)")删除 del,传 id 值

@ResponseBody

PublicString delUser (@PathVariable Integer id) (

userService .delUser (id) ;

return "ok";

12、输入localhost:8080/find/1,查找 id 是1的,可以看到小花的阶层格式。

image.png

输入localhost:8080/del/1删除。

image.png

查看数据库已经删掉了。

image.png

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
XML Java 数据库连接
Spring Boot的数据访问之Spring Data JPA以及Hibernate的实战(超详细 附源码)
Spring Boot的数据访问之Spring Data JPA以及Hibernate的实战(超详细 附源码)
1058 0
|
Java 数据库连接 API
Java 8 + 特性及 Spring Boot 与 Hibernate 等最新技术的实操内容详解
本内容涵盖Java 8+核心语法、Spring Boot与Hibernate实操,按考试考点分类整理,含技术详解与代码示例,助力掌握最新Java技术与应用。
409 2
|
Java 关系型数据库 数据库连接
Spring Boot 学习研究笔记(八) - Spring Data JPA与Hibernate区别及配置(2)
Spring Boot 学习研究笔记(八) - Spring Data JPA与Hibernate区别及配置
1248 118
|
SQL Java 数据库连接
springBoot+Jpa(hibernate)数据库基本操作
springBoot+Jpa(hibernate)数据库基本操作
549 0
|
Java 数据库连接 数据库
如何在Spring Boot中集成Hibernate
如何在Spring Boot中集成Hibernate
1244 0
|
Java 关系型数据库 MySQL
【极光系列】springBoot集成Hibernate
【极光系列】springBoot集成Hibernate
219 2
|
Oracle Java 关系型数据库
[学习笔记] 在Eclipse中使用Hibernate,并创建第一个Demo工程,数据库为Oracle XE
[学习笔记] 在Eclipse中使用Hibernate,并创建第一个Demo工程,数据库为Oracle XE
|
Java 关系型数据库 数据库连接
Hibernate学习笔记(一)快速入门
Hibernate学习笔记(一)快速入门