最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring?Boot深入學(xué)習(xí)數(shù)據(jù)訪問之Spring?Data?JPA與Hibernate的應(yīng)用

 更新時(shí)間:2022年10月27日 11:34:30   作者:showswoller  
Spring?Data?JPA是Spring?Data的子項(xiàng)目,在使用Spring?Data?JPA之前,先了解一下Hibernate,因?yàn)镾pring?Data?JPA是由Hibernate默認(rèn)實(shí)現(xiàn)的

前言

Hibernate是一個(gè)開源的對(duì)象關(guān)系映射框架,它對(duì)JDBC及進(jìn)行了非常輕量級(jí)的對(duì)象封裝,它將POJO簡(jiǎn)單的java對(duì)象與數(shù)據(jù)庫(kù)表建立映射關(guān)系,是一個(gè)全自動(dòng)的ORM框架,Hibernate可以自動(dòng)生成SQL語(yǔ)句自動(dòng)執(zhí)行。

JPA是官方提出的Java持久化規(guī)范,JPA通過注解或XML描述對(duì)象一關(guān)系表的映射關(guān)系,并將內(nèi)存中的實(shí)體對(duì)象持久化到數(shù)據(jù)庫(kù)

Spring Data JPA通過提供基于JPA的Repository極大的簡(jiǎn)化了JPA的寫法,在幾乎不寫實(shí)現(xiàn)的情況下,實(shí)現(xiàn)數(shù)據(jù)庫(kù)的訪問和操作,使用Spring Data JPA建立數(shù)據(jù)訪問層十分方便,只需要定義一個(gè)集成JapRepository的接口即可

Hibernate的詳細(xì)解析

Spring Boot的支持

可以在STS創(chuàng)建Spring Boot應(yīng)用時(shí)就選擇Spring Data JPA模塊依賴

如果在Maven項(xiàng)目中需要使用它,則可以在pom.xml文件中通過如下配置添加Spring Data JPA模塊依賴

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

下面通過一個(gè)簡(jiǎn)單的條件查詢實(shí)例來(lái)實(shí)戰(zhàn)

1:創(chuàng)建數(shù)據(jù)庫(kù) 此處不再贅述 有問題可以私信

2:修改pom.xml文件 添加mysql依賴

<?xml version="1.0" encoding="UTF-8"?>
-<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
-<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
<relativePath/>
<!-- lookup parent from repository -->
</parent>
<groupId>com.ch</groupId>
<artifactId>ch6_1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>ch6_1</name>
<description>Demo project for Spring Boot</description>
-<properties>
<java.version>11</java.version>
</properties>
-<dependencies>
-<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
-<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
-<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 添加MySQL依賴 -->
-<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
<!-- MySQL8.x時(shí),請(qǐng)使用8.x的連接器 -->
</dependency>
-<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
-<build>
-<plugins>
-<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

3:在application.properties文件中配置如下內(nèi)容

server.servlet.context-path=/ch6_1
###
##數(shù)據(jù)源信息配置
###
#數(shù)據(jù)庫(kù)地址
spring.datasource.url=jdbc:mysql://localhost:3306/springbootjpa?characterEncoding=utf8
#數(shù)據(jù)庫(kù)MySQL為8.x時(shí),url為jdbc:mysql://localhost:3306/springbootjpa?useSSL=false&serverTimezone=Asia/Beijing&characterEncoding=utf-8
#數(shù)據(jù)庫(kù)用戶名
spring.datasource.username=root
#數(shù)據(jù)庫(kù)密碼
spring.datasource.password=root
#數(shù)據(jù)庫(kù)驅(qū)動(dòng)
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#數(shù)據(jù)庫(kù)MySQL為8.x時(shí),驅(qū)動(dòng)類為com.mysql.cj.jdbc.Driver
####
#JPA持久化配置
####
#指定數(shù)據(jù)庫(kù)類型
spring.jpa.database=MYSQL
#指定是否在日志中顯示SQL語(yǔ)句
spring.jpa.show-sql=true
#指定自動(dòng)創(chuàng)建、更新數(shù)據(jù)庫(kù)表等配置,update表示如果數(shù)據(jù)庫(kù)中存在持久化類對(duì)應(yīng)的表就不創(chuàng)建,不存在就創(chuàng)建對(duì)應(yīng)的表
spring.jpa.hibernate.ddl-auto=update
#讓控制器輸出的JSON字符串格式更美觀
spring.jackson.serialization.indent-output=true 

4:創(chuàng)建持久化實(shí)體類MyUser

創(chuàng)建名為com.ch.ch6_1entity的包 并在該包中創(chuàng)建名為MyUser的持久化實(shí)體類 部分代碼如下

package com.ch.ch6_1.entity;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "user_table")
/**
 * 如果沒寫表名,默認(rèn)為類名的詞組
 * (如MyUser類對(duì)應(yīng)的表名為my_user)
 */
public class MyUser implements Serializable{
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private int id;//主鍵
	/**使用@Column注解,可以配置列相關(guān)屬性(列名,長(zhǎng)度等),
	 * 可以省略,默認(rèn)為屬性名小寫
	 */
	private String uname;
	private String usex;
	private int age;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public String getUsex() {
		return usex;
	}
	public void setUsex(String usex) {
		this.usex = usex;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

@Entity注解表明該實(shí)體類時(shí)一個(gè)與數(shù)據(jù)庫(kù)表映射的實(shí)體類

@Table表示實(shí)體類與哪個(gè)數(shù)據(jù)庫(kù)表映射

5:創(chuàng)建數(shù)據(jù)訪問層

創(chuàng)建名為com.ch.ch6_1.repository并在該包中創(chuàng)建名為UserRepository的接口 代碼如下

package com.ch.ch6_1.repository;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import com.ch.ch6_1.entity.MyUser;
/**
 * 這里不需要使用@Repository注解數(shù)據(jù)訪問層,
 * 因?yàn)镾pring Boot自動(dòng)配置了JpaRepository
 */
public interface UserRepository extends JpaRepository<MyUser, Integer>{
	public MyUser findByUname(String uname);
	public List<MyUser> findByUnameLike(String uname);
}

6:創(chuàng)建業(yè)務(wù)層

創(chuàng)建名為com.ch.ch6_1.service的包 并在該包中創(chuàng)建UserService接口和接口的實(shí)現(xiàn)類UserServiceImpl

接口代碼如下

package com.ch.ch6_1.service;
import java.util.List;
import com.ch.ch6_1.entity.MyUser;
public interface UserService {
	public void saveAll();
	public List<MyUser> findAll();
	public MyUser findByUname(String uname);
	public List<MyUser> findByUnameLike(String uname);
	public MyUser getOne(int id);
}

實(shí)現(xiàn)類部分代碼如下

package com.ch.ch6_1.service;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.ch.ch6_1.entity.MyUser;
import com.ch.ch6_1.repository.UserRepository;
@Service
@Transactional
public class UserServiceImpl implements UserService{
	@Autowired
	private UserRepository userRepository;//依賴注入數(shù)據(jù)訪問層
	@Override
	public void saveAll() {
		MyUser mu1 = new MyUser();
		mu1.setUname("陳恒1");
		mu1.setUsex("男");
		mu1.setAge(88);
		MyUser mu2 = new MyUser();
		mu2.setUname("陳恒2");
		mu2.setUsex("女");
		eLike(String uname) {
		return userRepository.findByUnameLike("%" + uname + "%");
	}
	@Override
	public MyUser getOne(int id) {
		//調(diào)用父接口中的方法getOne
		return userRepository.getOne(id);
	}
}

7:創(chuàng)建控制器類UserTestController

創(chuàng)建名為com.ch.ch6_1.controller的包 并在該包中創(chuàng)建名為UserTestController的類 部分代碼如下

package com.ch.ch6_1.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ch.ch6_1.service.UserService;
@Controller
public class UserTestController {
	@Autowired
	private UserService userService;
	@RequestMapping("/save")
	@ResponseBody
	public String save() {
		userService.saveAll();
		return "保存用戶成功!";
	}
	}
	@RequestMapping("/findAll")
	public String findAll(Model model){
		model.addAttribute("title", "查詢所有用戶");
		model.addAttribute("allUsers",userService.findAll());
		return "showAll";
	}
	@RequestMapping("/findByUnameLike")
	public String findByUnameLike(String uname, Model model){
		model.addAttribute("title", "根據(jù)用戶名模糊查詢所有用戶");
		model.addAttribute("allUsers",userService.findByUnameLike(uname));
		return "showAll";
	}
}

8:整理腳本樣式靜態(tài)文件

JS腳本 CSS樣式 圖片等靜態(tài)文件默認(rèn)放在src/main/resourcex/static目錄下 有需求可以評(píng)論區(qū)留言找我要

9:創(chuàng)建View視圖頁(yè)面

創(chuàng)建視圖頁(yè)面showAll.html和showAuser.html 部分代碼如下

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>顯示查詢結(jié)果</title>
<link rel="stylesheet" th:href="@{css/bootstrap.min.css}" rel="external nofollow"  />
<link rel="stylesheet" th:href="@{css/bootstrap-theme.min.css}" rel="external nofollow"  />
</head>
<body>
	<div class="panel panel-primary">
		<div class="panel-heading">
			<h3 class="panel-title">Spring Data JPA簡(jiǎn)單查詢</h3>
		</div>
	</div>
	<div class="container">
		<div class="panel panel-primary">
			<div class="panel-heading">
				<h3 class="panel-title"><span th:text="${title}"></span></h3>
			</div>
			<div class="panel-body">
				<div class="table table-responsive">
					<tab
							</tr>
						</tbody>
					</table>
				</div>
			</div>
		</div>
	</div>
</body>
</html>

到此這篇關(guān)于Spring Boot深入學(xué)習(xí)數(shù)據(jù)訪問之Spring Data JPA與Hibernate的應(yīng)用的文章就介紹到這了,更多相關(guān)Spring Boot數(shù)據(jù)訪問內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入了解Java并發(fā)AQS的獨(dú)占鎖模式

    深入了解Java并發(fā)AQS的獨(dú)占鎖模式

    AQS是一種提供了原子式管理同步狀態(tài)、阻塞和喚醒線程功能以及隊(duì)列模型的簡(jiǎn)單框架。一般來(lái)說,同步工具實(shí)現(xiàn)鎖的控制分為獨(dú)占鎖和共享鎖,而AQS提供了對(duì)這兩種模式的支持。本文主要來(lái)介紹一下獨(dú)占鎖模式,需要的可以參考一下
    2022-10-10
  • Spring中的@ControllerAdvice和ResponseBodyAdvice詳解

    Spring中的@ControllerAdvice和ResponseBodyAdvice詳解

    這篇文章主要介紹了Spring中的@ControllerAdvice和ResponseBodyAdvice詳解,@ControllerAdvice作用于@Controller修飾的類里面的所有方法,ResponseBodyAdvice作用于@ResponseBody注解修飾的方法,它可以對(duì)這些方法的返回值進(jìn)行修改,需要的朋友可以參考下
    2024-01-01
  • Spring Cloud 動(dòng)態(tài)刷新配置信息教程詳解

    Spring Cloud 動(dòng)態(tài)刷新配置信息教程詳解

    這篇文章主要介紹了Spring Cloud 動(dòng)態(tài)刷新配置信息的教程,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06
  • java中對(duì)HashMap的put過程解讀

    java中對(duì)HashMap的put過程解讀

    這篇文章主要介紹了java中對(duì)HashMap的put過程解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 淺談Spring 重定向指南

    淺談Spring 重定向指南

    本篇文章主要介紹了淺談Spring 重定向指南,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2017-10-10
  • 一文搞懂Java中的線程安全與線程同步

    一文搞懂Java中的線程安全與線程同步

    線程安全指在被多個(gè)線程訪問時(shí),程序可以持續(xù)進(jìn)行正確的處理。線程同步是指程序中用于控制不同線程間操作發(fā)生相對(duì)順序的機(jī)制。本文將通過示例詳細(xì)為大家講講二者的使用,需要的可以參考一下
    2022-06-06
  • java中Ajax與Axios的使用小結(jié)

    java中Ajax與Axios的使用小結(jié)

    在項(xiàng)目中我們經(jīng)常會(huì)遇到需要向請(qǐng)求頭中添加消息的場(chǎng)景,本文主要介紹了java中Ajax與Axios的使用小結(jié),文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • 淺談Java垃圾回收的實(shí)現(xiàn)過程

    淺談Java垃圾回收的實(shí)現(xiàn)過程

    這篇文章主要介紹了淺談Java垃圾回收的實(shí)現(xiàn)過程,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • 國(guó)內(nèi)分布式框架Dubbo使用詳解

    國(guó)內(nèi)分布式框架Dubbo使用詳解

    這篇文章主要為大家介紹了國(guó)內(nèi)分布式框架Dubbo使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • jedis的borrow行為方法源碼解讀

    jedis的borrow行為方法源碼解讀

    這篇文章主要為大家介紹了jedis的borrow行為方法源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09

最新評(píng)論

梁平县| 托里县| 新安县| 南投县| 文水县| 博客| 阿鲁科尔沁旗| 雷州市| 林口县| 高碑店市| 伊宁市| 沿河| 调兵山市| 玉龙| 凌源市| 祁门县| 民和| 阿拉尔市| 广丰县| 垦利县| 佛冈县| 灵台县| 海晏县| 碌曲县| 延安市| 福鼎市| 江山市| 搜索| 娱乐| 子长县| 钟山县| 临沧市| 全南县| 锡林浩特市| 胶州市| 台州市| 天长市| 南部县| 瓦房店市| 黑水县| 法库县|