久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

【原創(chuàng)】Spring Boot 集成Spring Data JPA的玩法

 田維常 2020-08-18

回復“面試”獲取全套大廠面試資料

通過本文你可以收獲:

  1. 什么是JPA?

  2. 認識Spring data JPA

  3. 快速搞定Spring boot集成Spring data JPA

  4. Spring data JPA高級用法入門

什么是JPA

JPA是Java Persistence API的簡稱

目前市面上比較流行的ORM框架有Mybatis、Hibernate,、SpringJDBC等。

在沒有JPA規(guī)范之前,,由于沒有官方的標準,,使得每個ORM框架之間的API差距都蠻大的,只要使用了一種ORM框架后系統(tǒng)會嚴重受限于該ORM框架的標準,。

基于上這些原因,,Sun引入新的JPA ORM,主要原因有兩點:

  1. 簡化現(xiàn)有Java EE 應(yīng)用開發(fā)工作

  2. Sun希望整合ORM技術(shù),,實現(xiàn)統(tǒng)一的API調(diào)用接口

JPA由EJB 3.0軟件專家組開發(fā),,作為JSR-220實現(xiàn)的一部分。但它又不限于EJB 3.0,,你可以在Web應(yīng)用,、甚至桌面應(yīng)用中使用。JPA的宗旨是為POJO提供持久化標準規(guī)范,,由此可見,,經(jīng)過這幾年的實踐探索,能夠脫離容器獨立運行,,方便開發(fā)和測試的理念已經(jīng)深入人心了,。Hibernate3.2+、TopLink 10.1.3以及OpenJPA都提供了JPA的實現(xiàn),。

JPA是一套規(guī)范,,不是產(chǎn)品。那么像Hibernate,、TopLink,、JDO他是一套產(chǎn)品。如果某產(chǎn)品實現(xiàn)了這個JPA規(guī)范,,我們就稱之為JPA的實現(xiàn)產(chǎn)品,。

總的來說jap包含三個方面的技術(shù):

  • ORM映射元數(shù)據(jù),支持xml和注解兩種元數(shù)據(jù)的形式,,元數(shù)據(jù)描述對象和表之間的映射關(guān)系。

  • API,,操作實體對象來執(zhí)行增刪改查操作(CRUD)

  • 查詢語言,,通過面向?qū)ο蠓敲嫦驍?shù)據(jù)庫的查詢語言(JPQL)查詢數(shù)據(jù),避免程序的SQL語句緊密耦合,。

以下是JPA的架構(gòu)圖

Spring data JPA入場

Spring data JPA  是spring家族下的Spring data下面的一個子項目,。

官網(wǎng)地址:

https:///projects/spring-data-jpa#overview

Spring data JPA  是Spring基于ORM框架、JPA規(guī)范的基礎(chǔ)之上封裝的一套JPA應(yīng)用框架,,可以讓使用者(程序員)用最簡單的代碼即可實現(xiàn)對象數(shù)據(jù)的CRUD操作,,上手容易,,能提高開發(fā)效率。其實說白了Spring就是基于Hibernate之上構(gòu)建的JPA使用解決方案,,方便于大家在Spring Boot項目中的使用JPA技術(shù),。

快速上手Spring data jpa

首先是快速建一個Spring Boot項目。

參考:如何快速構(gòu)建Spring Boot基礎(chǔ)項目,?

添加依賴

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

添加相關(guān)配置項

#mysql配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:
mysql://localhost:3306/my_jpa?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=lwt123456@

spring.jpa.properties.hibernate.hbm2ddl.auto=update
#展示sql(調(diào)試或者排查問題時候很有用)
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

配置項簡單說明

spring.data配置的是數(shù)據(jù)庫相關(guān)信息

spring.jpa.properties.hibernate.hbm2ddl.auto=update
  • create:每次運行程序時,都會重新創(chuàng)建表,,故而數(shù)據(jù)會丟失

  • create-drop:每次運行程序時會先創(chuàng)建表結(jié)構(gòu),然后待程序結(jié)束時清空表

  • upadte:每次運行程序,,沒有表時會創(chuàng)建表,,如果對象發(fā)生改變會更新表結(jié)構(gòu),,原有數(shù)據(jù)不會清空,只會更新(推薦使用)

  • validate:運行程序會校驗數(shù)據(jù)與數(shù)據(jù)庫的字段類型是否相同,,字段不同會報錯

  • none: 禁用DDL處理

建表語句

CREATE TABLE `tuser` (
`id` int(11NOT NULL AUTO_INCREMENT,
`name` varchar(32DEFAULT NULL,
`password` varchar(16DEFAULT NULL,
`phone` varchar(11DEFAULT NULL,
PRIMARY KEY (`id`)
ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

初始化一條數(shù)據(jù)

INSERT INTO `my_jpa`.`tuser``name``password``phone`VALUES ('zhangsan''123456''17256154321');

Entity

import javax.persistence.*;
@Entity
public class TUser {
   @Id
   @GeneratedValue
   private Integer id ;
   private String name;
   private String password;
   private String phone;
   //get set
}    

UserJpaDao繼承JpaRepository,。有的項目可能會定義成UserRepository,跟上父類的命名方式,。這個是項目規(guī)范而已,不在本次技術(shù)討論范圍,,這里還是采用傳統(tǒng)方式:

controller--service--dao模式

UserJpaDao的代碼如下

import com.tian.usercenter.jpa.TUser;
import org.springframework.data.jpa.repository.JpaRepository;
public interface  UserJpaDao extends JpaRepository<TUser,Integer> {
}

UML圖如下

其中JpaRepository中已有的方法

另外QueryByExampleExecutor中已有的方法,,通過方法名可以看出是查詢使用:

另外CrudRepository中定義的方法,CRUD就是增刪改查的意思,,顧名思義,這個類主要是增刪改查的基本方法的定義,。

寫一個Controller

@RestController
public class JpsController {

   @Resource
   private UserJpaDao userJpaDao;

   @GetMapping("/testjpa")
   public Object test(){
      long count = userJpaDao.count();
       System.out.println("cout="+count);
       return userJpaDao.findAll();
  }
}

這里使用了count方法和findAll方法,都是使用已有的方法,,細心的人看出來了,,這兩個方法并不是我們dao里實現(xiàn)的,。

提醒:這里是為了演示,,所以controller直接調(diào)用dao了,通常開發(fā)的時候中間至少還有一層service,。

啟動類

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

啟動main方法

已經(jīng)成功啟動了,。

訪問一下:http://localhost:8080/testjpa

sql日志打印

這樣spring data jpa就這么簡單的集成到Spring Boot項目中明了,。

高級用法
自定義sql

在實際項目開發(fā)中,,簡單的增刪改查通常是很難滿足的,,基本都會使用到一些自定義sql來實現(xiàn)業(yè)務(wù)。下面就是用自定義sql

public interface  UserJpaDao extends JpaRepository<TUser,Integer{

   @Query(value = "select * from tuser tu where tu.name= ?1 ", nativeQuery = true)
   TUser findByName(String name);
}

很多人都習慣于原生態(tài)sql,,所以這里需要加上一個nativeQuery=true

sql中的?1表示方法參數(shù)中的第一個參數(shù),。

除了上面指定參數(shù)以外還有可以使用,。

注意:注解@Param別導錯包

@Query(value = "select tu from TUser tu where tu.id= :id ")TUser findByPId(@Param("id") Integer id);

啟動類

@RestController
public class JpsController {

   @Resource
   private UserJpaDao userJpaDao;

   @GetMapping("/testjpa")
   public Object test() {
       TUser user = userJpaDao.findByName("zhangsan");
       System.out.println("findByName=" + user);
       return userJpaDao.findByPId(1);
  }
}

啟動項目,。

請求:http://localhost:8080/testjpa

后臺輸出

OK,今天就到這里,。

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多