SpringBoot2 基礎案例(09):整合JPA持久層框架,簡化資料庫操作
本文原始碼: GitHub·點這裡 || GitEE·點這裡
一、JAP框架簡介
JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0後提出的Java持久化規範。主要是為了簡化持久層開發以及整合ORM技術,結束Hibernate、TopLink、JDO等ORM框架各自為營的局面。JPA是在吸收現有ORM框架的基礎上發展而來,易於使用,伸縮性強。
二、與SpringBoot2整合
1、核心依賴
<!-- JPA框架 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
2、配置檔案
spring:
application:
name: node09-boot-jpa
datasource:
url: jdbc:mysql://localhost:3306/data_jpa?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true
ddl-auto幾種配置說明
1)create
每次載入hibernate時都刪除上一次的生成的表,然後根據bean類重新來生成新表,容易導致資料丟失,(建議首次建立時使用)。
2)create-drop
每次載入hibernate時根據bean類生成表,但是sessionFactory一關閉,表就自動刪除。
3)update
第一次載入hibernate時根據bean類會自動建立起表的結構,以後載入hibernate時根據bean類自動更新表結構,即使表結構改變了但表中的行仍然存在不會刪除以前的行。
4)validate
每次載入hibernate時,驗證建立資料庫表結構,只會和資料庫中的表進行比較,不會建立新表,但是會插入新值。
3、實體類物件
就是根據這個物件生成的表結構。
@Table(name = "t_user")
@Entity
public class User {
@Id
@GeneratedValue
private Integer id;
@Column
private String name;
@Column
private Integer age;
// 省略 GET SET
}
4、JPA框架的用法
定義物件的操作的介面,繼承JpaRepository核心介面。
import com.boot.jpa.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends JpaRepository<User,Integer> {
// 但條件查詢
User findByAge(Integer age);
// 多條件查詢
User findByNameAndAge(String name, Integer age);
// 自定義查詢
@Query("from User u where u.name=:name")
User findSql(@Param("name") String name);
}
5、封裝一個服務層邏輯
import com.boot.jpa.entity.User;
import com.boot.jpa.repository.UserRepository;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class UserService {
@Resource
private UserRepository userRepository ;
// 儲存
public void addUser (User user){
userRepository.save(user) ;
}
// 根據年齡查詢
public User findByAge (Integer age){
return userRepository.findByAge(age) ;
}
// 多條件查詢
public User findByNameAndAge (String name, Integer age){
return userRepository.findByNameAndAge(name,age) ;
}
// 自定義SQL查詢
public User findSql (String name){
return userRepository.findSql(name) ;
}
// 根據ID修改
public void update (User user){
userRepository.save(user) ;
}
//根據id刪除一條資料
public void deleteStudentById(Integer id){
userRepository.deleteById(id);
}
}
三、測試程式碼塊
import com.boot.jpa.JpaApplication;
import com.boot.jpa.entity.User;
import com.boot.jpa.service.UserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.annotation.Resource;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = JpaApplication.class)
public class UserJpaTest {
@Resource
private UserService userService ;
@Test
public void addUser (){
User user = new User() ;
user.setName("知了一笑");
user.setAge(22);
userService.addUser(user);
User user1 = new User() ;
user1.setName("cicada");
user1.setAge(23);
userService.addUser(user1);
}
@Test
public void findByAge (){
Integer age = 22 ;
// User{id=3, name='知了一笑', age=22}
System.out.println(userService.findByAge(age));
}
@Test
public void findByNameAndAge (){
System.out.println(userService.findByNameAndAge("cicada",23));
}
@Test
public void findSql (){
// User{id=4, name='cicada', age=23}
System.out.println(userService.findSql("cicada"));
}
@Test
public void update (){
User user = new User() ;
// 如果這個主鍵不存在,會以主鍵自增的方式新增入庫
user.setId(3);
user.setName("哈哈一笑");
user.setAge(25);
userService.update(user) ;
}
@Test
public void deleteStudentById (){
userService.deleteStudentById(5) ;
}
}
四、原始碼地址
GitHub·地址
https://github.com/cicadasmile/spring-boot-base
GitEE·地址
https://gitee.com/cicadasmile/spring-boot-base
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69957347/viewspace-2671548/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SpringBoot2 基礎案例(08):整合Redis資料庫,實現快取管理Spring BootRedis資料庫快取
- 使用Spring Data JPA實現持久化層的簡化開發Spring持久化
- EasyAndroid基礎整合元件庫之:EasyToast 簡化你的Toast操作Android元件AST
- SpringBoot2 基礎案例(12):基於轉賬案例,演示事務管理操作Spring Boot
- Spring Boot整合Spring Data JPA進行資料庫操作Spring Boot資料庫
- hibernate及SpringBoot整合Jpa實現對資料庫操作Spring Boot資料庫
- RxCache 整合 Android 的持久層框架 greenDAO、RoomAndroid框架OOM
- SpringBoot2 基礎案例(07):整合Druid連線池,配置監控介面Spring BootUI
- SpringBoot2 基礎案例(06):引入JdbcTemplate,和多資料來源配置Spring BootJDBC
- Mysql資料庫基礎操作命令MySql資料庫
- Spring 持久層整合Spring
- Android快速開發框架,基礎庫,樣式庫,元件化,元件整合Android框架元件化
- 工作流中的資料持久化詳解!Activiti框架中JPA的使用分析持久化框架
- FastAPI - Tortoise ORM 資料庫基礎操作ASTAPIORM資料庫
- Django基礎之七(資料庫操作)Django資料庫
- Spring Cloud Alibaba基礎教程:Nacos的資料持久化SpringCloud持久化
- 使用Spring Data JPA進行資料庫操作Spring資料庫
- Java資料持久層Java
- 圖資料庫基礎簡介 -KDnuggets資料庫
- MongoDB資料庫操作詳解:基礎篇MongoDB資料庫
- 09.Django-資料庫優化Django資料庫優化
- MVVM的資料持久化(一)——ROOM的整合MVVM持久化OOM
- 企業資訊化管理:銷售出庫單資料整合案例
- 達夢資料庫安裝及基礎操作資料庫
- 2019年開源資料庫報告:熱門資料庫、雲基礎設施分析與混合持久化趨勢資料庫持久化
- 基於Docker部署Oracle、MySQL等資料庫的資料檔案持久化DockerOracleMySql資料庫持久化
- QT知識整合--資料庫操作QT資料庫
- Java 持久層框架之 MyBatisJava框架MyBatis
- SpringBoot2 基礎案例(13):基於Cache註解,管理Redis快取Spring BootRedis快取
- Redis資料持久化—RDB持久化與AOF持久化Redis持久化
- Redis基礎—瞭解Redis是如何做資料持久化的Redis持久化
- 資料庫 基礎資料庫
- 資料庫基礎資料庫
- 淺談Mybatis持久化框架在Spring、SSM、SpringBoot整合的演進及簡化過程MyBatis持久化框架SSMSpring Boot
- Pyspark資料基礎操作集合Spark
- Redis——Redis用作資料庫(持久化/RDB/AOF)Redis資料庫持久化
- 河青的持久層框架hqbatis框架BAT
- Java持久層框架Mybatis入門Java框架MyBatis