JPA、Hibernate、Spring data jpa之間的關系,以及和springboot的整合


什么么是JPA?

全稱Java Persistence API,可以通過注解或者XML描述【對象-關系表】之間的映射關系,並將實體對象持久化到數據庫中。

為我們提供了:

1)ORM映射元數據:JPA支持XML和注解兩種元數據的形式,元數據描述對象和表之間的映射關系,框架據此將實體對象持久化到數據庫表中;

如:@Entity、@Table、@Column、@Transient等注解。

 2)JPA 的API:用來操作實體對象,執行CRUD操作,框架在后台替我們完成所有的事情,開發者從繁瑣的JDBC和SQL代碼中解脫出來。

如:entityManager.merge(T t);

 3)JPQL查詢語言:通過面向對象而非面向數據庫的查詢語言查詢數據,避免程序的SQL語句緊密耦合。

如:from Student s where s.name = ?

但是:

JPA僅僅是一種規范,也就是說JPA僅僅定義了一些接口,而接口是需要實現才能工作的。所以底層需要某種實現,而Hibernate就是實現了JPA接口的ORM框架。

也就是說:

JPA是一套ORM規范,Hibernate實現了JPA規范!如圖:

什么是spring data jpa?

spirng data jpa是spring提供的一套簡化JPA開發的框架,按照約定好的【方法命名規則】寫dao層接口,就可以在不寫接口實現的情況下,實現對數據庫的訪問和操作。同時提供了很多除了CRUD之外的功能,如分頁、排序、復雜查詢等等。

Spring Data JPA 可以理解為 JPA 規范的再次封裝抽象,底層還是使用了 Hibernate 的 JPA 技術實現。如圖:

接口約定命名規則:

實例:

創建數據庫: 

在test數據庫中創建user表

-- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) DEFAULT NULL,
  `password` varchar(50) DEFAULT NULL,
  `name` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'zhangsan', '123', '張三');
INSERT INTO `user` VALUES ('2', 'lisi', '123', '李四');

 

 添加Spring Data JPA的起步依賴

<!-- springBoot 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>
</dependency>

 

 在application.properties中配置數據庫和jpa的相關屬性

#DB Configuration:
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
​
#JPA Configuration:
spring.jpa.database=MySQL
spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy

 

 創建實體配置實體

@Entity
public class User {
    // 主鍵
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    // 用戶名
    private String username;
    // 密碼
    private String password;
    // 姓名
    private String name;
 
    //此處省略setter和getter方法... ...
}

 

 編寫UserRepository

public interface UserRepository extends JpaRepository<User,Long>{
    public List<User> findAll();
}

 

 編寫測試類

@RunWith(SpringRunner.class)
@SpringBootTest(classes=MySpringBootApplication.class)
public class JpaTest {
​
    @Autowired
    private UserRepository userRepository;
​
    @Test
    public void test(){
        List<User> users = userRepository.findAll();
        System.out.println(users);
    }
​
}

 

 控制台打印信息

注意:如果是jdk9,執行報錯如下:

原因:jdk缺少相應的jar

解決方案:手動導入對應的maven坐標,如下:

<!--jdk9需要導入如下坐標-->
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.0</version>
</dependency>

 

第二種整合:

springboot集成spring data jpa只需兩步:

第一步:導入maven坐標

第二步:yml配置文件中配置jpa信息

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM