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

SpringBoot整合SpringDataJPA的示例

 更新時(shí)間:2023年06月16日 10:18:34   作者:Java勸退師、  
本文主要介紹了SpringBoot整合SpringDataJPA的示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1.JPA是什么

首先,我們說說JPA是什么?

JPA(java persistence api),它并不是一個(gè)框架,而是一組規(guī)范。我覺得對(duì)于任何一個(gè)開發(fā)人員來說,理解“規(guī)范”這個(gè)詞應(yīng)該不在話下。其中,Hibernate就實(shí)現(xiàn)了這個(gè)規(guī)范,而且那是相當(dāng)成功的(其實(shí)TopLink和OpenJPA也都實(shí)現(xiàn)了JPA規(guī)范,不過它們被Hinernate的光環(huán)籠罩了)。所以呢,當(dāng)我們說到JPA的時(shí)候,好多人首先想到的就是Hibernate。

2.SpringBootData JPA是什么

SpringData:其實(shí)SpringData就是Spring提供了一個(gè)操作數(shù)據(jù)的框架。而SpringData JPA只是SpringData框架下的一個(gè)基于JPA標(biāo)準(zhǔn)操作數(shù)據(jù)的模塊。
SpringData JPA:基于JPA的標(biāo)準(zhǔn)數(shù)據(jù)進(jìn)行操作。簡(jiǎn)化操作持久層的代碼。只需要編寫接口就可以。

廢話不多說了,直接開始

3.環(huán)境/版本一覽

  • 開發(fā)工具:Intellij IDEA 2020.2.3
  • springboot:2.3.7.RELEASE
  • jdk:1.8.0_211
  • maven: 3.6.3

4.工程結(jié)構(gòu) 

5.開始搭建

創(chuàng)建數(shù)據(jù)庫(kù)

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for sys_user
-- ----------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `pwd` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of sys_user
-- ----------------------------
BEGIN;
INSERT INTO `sys_user` VALUES (1, 'test', '123');
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;

新建項(xiàng)目

pom.xml依賴配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.niu</groupId>
    <artifactId>datasource</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <name>datasource</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <!-- alibaba的druid數(shù)據(jù)庫(kù)連接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.9</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.39</version>
            <scope>runtime</scope>
        </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>

創(chuàng)建配置文件 application.yml

server:
  port: 8080
spring:
  datasource:
    name: main_db
    type: com.alibaba.druid.pool.DruidDataSource
    #druid相關(guān)配置
    druid:
      #監(jiān)控統(tǒng)計(jì)攔截的filters
      filters: stat
      driver-class-name: com.mysql.jdbc.Driver
      #基本屬性
      url: jdbc:mysql://127.0.0.1:3306/t_user_db?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
      username: root
      password: Abcdef@123456
      #配置初始化大小/最小/最大
      initial-size: 1
      min-idle: 1
      max-active: 20
      #獲取連接等待超時(shí)時(shí)間
      max-wait: 60000
      #間隔多久進(jìn)行一次檢測(cè),檢測(cè)需要關(guān)閉的空閑連接
      time-between-eviction-runs-millis: 60000
      #一個(gè)連接在池中最小生存的時(shí)間
      min-evictable-idle-time-millis: 300000
      validation-query: SELECT 'x'
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      #打開PSCache,并指定每個(gè)連接上PSCache的大小。oracle設(shè)為true,mysql設(shè)為false。分庫(kù)分表較多推薦設(shè)置為false
      pool-prepared-statements: false
      max-pool-prepared-statement-per-connection-size: 20
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

創(chuàng)建model  類多的話可以使用逆向工程創(chuàng)建

@Entity(name = "sys_user") //name值代表數(shù)據(jù)庫(kù)對(duì)應(yīng)的表名,如不寫默認(rèn)按照實(shí)體類的駝峰命名法單詞中間加_
@JsonIgnoreProperties(value = { "hibernateLazyInitializer"}) //加這個(gè)注解是為了防止本項(xiàng)目把jpa對(duì)象直接轉(zhuǎn)json有空值報(bào)錯(cuò)
public class SysUser {
    @Id
    @GeneratedValue
    private Integer id;
    /**
     *
     *   這里是映射數(shù)據(jù)表字段與實(shí)體字段 若數(shù)據(jù)庫(kù)表字段為 user_name  這里需要寫成
     *   @Column(name = "user_name") 
     *   private String userName;
     *   如果一致可以不寫   
     */
    @Column(name = "name") 
    private String name;
    private String pwd;
        //get/set省略,記得加上
}

創(chuàng)建Repository

/**
 *  
 * JpaRepository<SysUser,Integer> 參數(shù)1 要映射的實(shí)體類
 *                                參數(shù)2 實(shí)體類主鍵的數(shù)據(jù)類型
 *  每個(gè)dao層接口都要繼承這個(gè)類
 **/
@Repository
public interface SysUserRepository  extends JpaRepository<SysUser,Integer> {
}

創(chuàng)建service

@Service
public class UserService {
    @Autowired
    private SysUserRepository sysUserRepository;
    public SysUser getUser(Integer id){
        return  sysUserRepository.getOne(id);
    }
}

創(chuàng)建controller 這里我們讓接口都返回json 使用@RestController注解

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;
    @GetMapping("/{userId}")
    public SysUser user(@PathVariable  Integer userId){
        return userService.getUser(userId);
    }
}

創(chuàng)建主類

@SpringBootApplication
public class SpringbootJPAApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootJPAApplication.class, args);
    }
}

6.啟動(dòng)測(cè)試

查看下日志:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.3.7.RELEASE)

2020-12-17 10:05:32.976  INFO 3434 --- [           main] c.n.springboot.SpringbootJPAApplication  : Starting SpringbootJPAApplication on MacBook-Pro.local with PID 3434 (/Users/laoniu/IdeaProjects/datasource/target/classes started by laoniu in /Users/laoniu/IdeaProjects/datasource)
2020-12-17 10:05:32.979  INFO 3434 --- [           main] c.n.springboot.SpringbootJPAApplication  : No active profile set, falling back to default profiles: default
2020-12-17 10:05:33.606  INFO 3434 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2020-12-17 10:05:33.668  INFO 3434 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 55ms. Found 1 JPA repository interfaces.
2020-12-17 10:05:34.014  INFO 3434 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2020-12-17 10:05:34.021  INFO 3434 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-12-17 10:05:34.021  INFO 3434 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.41]
2020-12-17 10:05:34.096  INFO 3434 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-12-17 10:05:34.096  INFO 3434 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1058 ms
2020-12-17 10:05:34.150  INFO 3434 --- [           main] c.a.d.s.b.a.DruidDataSourceAutoConfigure : Init DruidDataSource
Thu Dec 17 10:05:34 CST 2020 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
2020-12-17 10:05:34.627  INFO 3434 --- [           main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
2020-12-17 10:05:34.774  INFO 3434 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2020-12-17 10:05:34.807  INFO 3434 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.4.25.Final
2020-12-17 10:05:34.903  INFO 3434 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
2020-12-17 10:05:34.981  INFO 3434 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL57Dialect
2020-12-17 10:05:35.360  INFO 3434 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2020-12-17 10:05:35.367  INFO 3434 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2020-12-17 10:05:35.580  WARN 3434 --- [           main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2020-12-17 10:05:35.680  INFO 3434 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-12-17 10:05:35.878  INFO 3434 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2020-12-17 10:05:35.890  INFO 3434 --- [           main] c.n.springboot.SpringbootJPAApplication  : Started SpringbootJPAApplication in 3.227 seconds (JVM running for 3.93)
2020-12-17 10:05:49.330  INFO 3434 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-12-17 10:05:49.331  INFO 3434 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2020-12-17 10:05:49.335  INFO 3434 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 4 ms
Hibernate: select sysuser0_.id as id1_0_0_, sysuser0_.name as name2_0_0_, sysuser0_.pwd as pwd3_0_0_ from sys_user sysuser0_ where sysuser0_.id=?

 

可以看到最后一行是SpringDataJPA為我們生成的查詢語(yǔ)句,我們并沒有寫sql,只是調(diào)用的SpringDataJPA自帶的方法,讓我們?nèi)タ匆幌耂pringDataJPA都為我們提供哪些可用的方法

7.Repository接口的使用

7.1SpringDataJPA提供的方法

按照SpringDataJPA規(guī)范可以讓我們只寫方法就可以進(jìn)行操作數(shù)據(jù)庫(kù),讓我們?cè)囈幌?/p>

7.2編寫Repository接口方法

//方法名稱必須要遵循駝峰式命名規(guī)則,findBy(關(guān)鍵字)+屬性名稱(首字母大寫)+查詢條件(首字母大寫)  
SysUser findByNameAndPwd(String name,String pwd);

這樣就能完成基本的查詢

刪除用deleteBy開頭方法

如果方法不能滿足我的需求呢,我們還可以通過@Query注解手動(dòng)寫sql

8.@Query基本使用

   /***
     *
     * ?1表示第一個(gè)參數(shù),?2表示第二個(gè)參數(shù)
     * 這里的寫法是hql寫法
     * nativeQuery = false 代表使用hql ,默認(rèn)不設(shè)置的話就是false 默認(rèn)使用的hql
     * 要想使用 原生的sql  改為 true即可
     */
    @Query(value = "from SysUser where name = ?1 and pwd =?2",nativeQuery = false)
    SysUser findByNameAndPwdUseSQL(String name,String pwd);

到此,SpringBoot整合SpringDataJPA基本的使用結(jié)束,代碼已經(jīng)推送至github,https://github.com/NiuXiangQian/springboot-jpa

到此這篇關(guān)于SpringBoot整合SpringDataJPA的示例的文章就介紹到這了,更多相關(guān)SpringBoot整合SpringDataJPA內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JAVA一個(gè)快速排序?qū)崿F(xiàn)代碼

    JAVA一個(gè)快速排序?qū)崿F(xiàn)代碼

    排序有哪幾種方法?請(qǐng)列舉。并用JAVA實(shí)現(xiàn)一個(gè)快速排序.,需要的朋友可以參考下
    2017-02-02
  • SpringBoot啟動(dòng)yaml報(bào)錯(cuò)的解決

    SpringBoot啟動(dòng)yaml報(bào)錯(cuò)的解決

    這篇文章主要介紹了SpringBoot啟動(dòng)yaml報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java生成抽樣隨機(jī)數(shù)的多種算法

    java生成抽樣隨機(jī)數(shù)的多種算法

    本文主要介紹了java生成抽樣隨機(jī)數(shù)的多種算法,主要是基于random庫(kù)函數(shù)的,有需要的可以了解一下。
    2016-10-10
  • SpringBoot項(xiàng)目實(shí)現(xiàn)分布式事務(wù)的實(shí)戰(zhàn)指南

    SpringBoot項(xiàng)目實(shí)現(xiàn)分布式事務(wù)的實(shí)戰(zhàn)指南

    在微服務(wù)架構(gòu)中,分布式事務(wù)是確??绶?wù)數(shù)據(jù)一致性的關(guān)鍵技術(shù),SpringBoot作為主流的Java開發(fā)框架,提供了多種分布式事務(wù)解決方案,本文將深入探討這些方案,幫助開發(fā)者根據(jù)業(yè)務(wù)場(chǎng)景選擇最適合的方案,需要的朋友可以參考下
    2025-10-10
  • springboot自定義Starter過程解析

    springboot自定義Starter過程解析

    這篇文章主要介紹了springboot自定義Starter過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Spring?Boot從3.x到4.0的分步升級(jí)保姆級(jí)實(shí)戰(zhàn)指南

    Spring?Boot從3.x到4.0的分步升級(jí)保姆級(jí)實(shí)戰(zhàn)指南

    Spring Boot 4.0的發(fā)布標(biāo)志著Java生態(tài)向云原生與開發(fā)效能革命的全面邁進(jìn),下面這篇文章主要介紹了Spring Boot從3.x到4.0的分步升級(jí)保姆級(jí)實(shí)戰(zhàn)指南,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2026-05-05
  • Java打開瀏覽器訪問指定頁(yè)面的實(shí)現(xiàn)方法

    Java打開瀏覽器訪問指定頁(yè)面的實(shí)現(xiàn)方法

    在開發(fā)Java應(yīng)用程序時(shí),有時(shí)需要從程序中啟動(dòng)默認(rèn)的Web瀏覽器并訪問特定的網(wǎng)頁(yè),這在實(shí)現(xiàn)幫助文檔鏈接、用戶指南或在線資源導(dǎo)航等功能時(shí)非常有用,本文將介紹如何使用Java代碼來實(shí)現(xiàn)這一功能,需要的朋友可以參考下
    2025-01-01
  • Java的Spring框架下RMI與quartz的調(diào)用方法

    Java的Spring框架下RMI與quartz的調(diào)用方法

    這篇文章主要介紹了Java的Spring框架下RMI與quartz的調(diào)用方法,Spring是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-11-11
  • MyBatis 動(dòng)態(tài)拼接Sql字符串的問題

    MyBatis 動(dòng)態(tài)拼接Sql字符串的問題

    MyBatis的動(dòng)態(tài)SQL,解決了SQL字符串拼接的痛苦。下文分步驟給大家詳細(xì)介紹了MyBatis 動(dòng)態(tài)拼接Sql字符串的問題,非常不錯(cuò),感興趣的朋友一起看下吧
    2016-08-08
  • java為移動(dòng)端寫接口開發(fā)實(shí)例

    java為移動(dòng)端寫接口開發(fā)實(shí)例

    本篇文章主要介紹了java如何為移動(dòng)端寫接口,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08

最新評(píng)論

邢台市| 正阳县| 宜州市| 丹阳市| 南部县| 庄浪县| 滦平县| 黔南| 青龙| 武乡县| 汾阳市| 婺源县| 曲阳县| 德化县| 英吉沙县| 报价| 景泰县| 策勒县| 宜城市| 特克斯县| 名山县| 彰武县| 封开县| 本溪市| 徐闻县| 姚安县| 文化| 咸阳市| 伊宁市| 厦门市| 卢湾区| 闵行区| 宝坻区| 宝应县| 铁岭市| 麻栗坡县| 基隆市| 临澧县| 繁昌县| 开鲁县| 西林县|