簡單介紹JPA。html
介紹快速SpringBoot快速整合JPAjava
The Java Persistence API is a standard technology that lets you 「map」 objects to relational databases. The spring-boot-starter-data-jpa POM provides a quick way to get started.mysql
The Java Persistence API
標準,Java持久層API,是一種能讓對象可以快速映射到關係型數據庫的技術規範。Hibernate
是最爲強大的一個。Spring Data JPA
是採用基於JPA規範的Hibernate
框架基礎下提供了Repository
層的實現。Spring Data Repository
極大地簡化了實現各類持久層的數據庫訪問而寫的樣板代碼量,同時CrudRepository
提供了豐富的CRUD功能去管理實體類。SpringBoot框架爲Spring Data JPA提供了整合,spring-boot-starter-data-jpa
可以讓你快速使用這門技術,它提供瞭如下依賴。git
<!--SpringBoot對jpa的封裝--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!--mysql驅動,8.x版本--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/jpa?serverTimezone=GMT%2B8 username: root password: 123456 hikari: maximum-pool-size: 20 minimum-idle: 5 jpa: #在建表的時候,將默認的存儲引擎切換爲 InnoDB database-platform: org.hibernate.dialect.MySQL5InnoDBDialect # 配置在日誌中打印出執行的 SQL 語句信息。 show-sql: true # 配置指明在程序啓動的時候要刪除而且建立實體類對應的表。 hibernate: ddl-auto: create #update
值得注意的是:spring.jpa.hibernate.ddl-auto
第一建表的時候能夠create,指明在程序啓動的時候要刪除而且建立實體類對應的表。後續使用就須要改成update。spring
JPA規範定義在javax.persistence
包下,注意導包的時候不要導錯。sql
@Entity(name = "t_user") @Data public class User implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private String password; @Transient private String email; }
@Entity標註保證明體可以被SpringBoot掃描到,對應表名爲t_user
。數據庫
@Id代表id。springboot
@GeneratedValue中標註主鍵生成策略。session
@Transient表示不須要映射的字段。框架
首先在數據庫中建立jpa庫,庫名無所謂,和配置對應上就能夠。
啓動項目,你會發現控制檯輸出日誌以下:
Hibernate: drop table if exists t_user Hibernate: create table t_user (id bigint not null auto_increment, password varchar(255), username varchar(255), primary key (id)) engine=InnoDB
此時咱們配置的create效果已經顯現,咱們以後將它改成update,否則每次啓動程序,數據表又得重建咯。
Spring Data JPA repositories是你能夠定義訪問數據的接口,JPA查詢是根據你的方法名稱自動建立的。
這裏咱們編寫一個接口,繼承JpaRepository便可。User是對象名,不是表名,Long爲主鍵的類型。
public interface UserDao extends JpaRepository<User, Long> { /** * 根據用戶名和密碼查詢用戶 */ User findByUsernameAndPassword(String username, String password); }
JPA默認支持常見的增刪改查,也支持findByUsernameAndPassword
這種以字段命名的方法,對於更復雜的查詢,您能夠使用Spring Data的Query註解對方法進行註解。
@SpringBootTest class SpringBootJpaApplicationTests { @Resource UserDao userDao; @Test void testJPA() { User user = userDao.save(new User(null, "summerday", "123456", "hangzhou")); System.out.println("添加用戶: " + user); User u = userDao.findByUsernameAndPassword("summerday", "123456"); System.out.println("根據用戶名和密碼查詢用戶: " + u); long count = userDao.count(); System.out.println("當前用戶數量: " + count); PageRequest page = PageRequest.of(0, 5, Sort.by(Sort.Order.desc("id"))); Page<User> all = userDao.findAll(page); System.out.println("分頁 + 根據id逆序 查詢結果: " + all.getContent()); if(userDao.existsById(u.getId())) { userDao.deleteById(u.getId()); System.out.println("刪除id爲" + u.getId()+ "的用戶成功"); } long c = userDao.count(); System.out.println("剩餘用戶數爲: " + c); } }
控制檯輸出以下:
本文內容均爲對優秀博客及官方文檔總結而得,原文地址均已在文中參考閱讀處標註。最後,文中的代碼樣例已經所有上傳至Gitee:https://gitee.com/tqbx/springboot-samples-learn,另有其餘SpringBoot的整合哦。