日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

【笔记】springboot使用Spring-data-jpa

發布時間:2024/9/30 javascript 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【笔记】springboot使用Spring-data-jpa 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Spring-data-jpa

Spring-data-jpa依賴于Hibernate。通過整合Hibernate之后,我們以操作Java實體的?式最終將數據改變映射到數據庫表中。
添加依賴:

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

在 application.xml 中配置:數據庫連接信息(如使?嵌?式數據庫則不需要)、?動創建表結構的
設置,例如使?mysql的情況如下:
spring.datasource.url=jdbc:mysql://localhost:3308/data1
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.hbm2ddl.auto=create-drop

spring.jpa.properties.hibernate.hbm2ddl.auto 是hibernate的配置屬性,其主要作?是:?動創建、更新、驗證數據庫表結構。該參數的?種配置如下:
create :每次加載hibernate時都會刪除上?次的?成的表,然后根據你的model類再重新來?成新表,哪怕兩次沒有任何改變也要這樣執?,這就是導致數據庫表數據丟失的?個重要原因。
create-drop :每次加載hibernate時根據model類?成表,但是sessionFactory?關閉,表就?動刪除。
update :最常?的屬性,第?次加載hibernate時根據model類會?動建?起表的結構(前提是先建?好數據庫),以后加載hibernate時根據model類?動更新表結構,即使表結構改變了但表中的?仍然存在不會刪除以前的?。要注意的是當部署到服務器后,表結構是不會被?上建?起來的,是要等應?第?次運?起來后才會。
validate :每次加載hibernate時,驗證創建數據庫表結構,只會和數據庫中的表進??較,不會創建新表,但是會插?新值。

創建實體
創建?個User實體,包含id(主鍵)、name(姓名)、age(年齡)屬性,通過ORM框架其會被映射到數據庫表中,由于配置了 hibernate.hbm2ddl.auto ,在應?啟動的時候框架會?動去數據庫中創建對應的表。

@Entity public class User { @Id @GeneratedValue private Long id; @Column(nullable = false) private String name; @Column(nullable = false) private Integer age; // 省略構造函數 // 省略getter和setter }

創建數據訪問接?
下?針對User實體創建對應的 Repository 接?實現對該實體的數據訪問,如下代碼:

public interface UserRepository extends JpaRepository<User, Long> { User findByName(String name); User findByNameAndAge(String name, Integer age); @Query("from User u where u.name=:name") User findUser(@Param("name") String name); }

在Spring-data-jpa中,只需要編寫類似上?這樣的接?就可實現數據訪問。不再像我們以往編寫了接?時候還需要??編寫接?實現類,直接減少了我們的?件清單。
在上例中,我們可以看到下?兩個函數:
User findByName(String name)
User findByNameAndAge(String name, Integer age)
它們分別實現了按name查詢User實體和按name和age查詢User實體,可以看到我們這?沒有任何類 SQL語句就完成了兩個條件查詢?法。這就是Spring-data-jpa的??特性:通過解析?法名創建查詢。

單元測試

在完成了上?的數據訪問接?之后,按照慣例就是編寫對應的單元測試來驗證編寫的內容是否正確。

@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(Application.class) public class ApplicationTests { @Autowired private UserRepository userRepository; @Test public void test() throws Exception { // 創建10條記錄 userRepository.save(new User("AAA", 10)); userRepository.save(new User("BBB", 20)); userRepository.save(new User("CCC", 30)); userRepository.save(new User("DDD", 40)); userRepository.save(new User("EEE", 50)); userRepository.save(new User("FFF", 60)); userRepository.save(new User("GGG", 70)); userRepository.save(new User("HHH", 80)); userRepository.save(new User("III", 90)); userRepository.save(new User("JJJ", 100)); // 測試findAll, 查詢所有記錄 Assert.assertEquals(10, userRepository.findAll().size()); // 測試findByName, 查詢姓名為FFF的User Assert.assertEquals(60, userRepository.findByName("FFF").getAge().longValue()); // 測試findUser, 查詢姓名為FFF的User Assert.assertEquals(60, userRepository.findUser("FFF").getAge().longValue()); // 測試findByNameAndAge, 查詢姓名為FFF并且年齡為60的User Assert.assertEquals("FFF", userRepository.findByNameAndAge("FFF", 60).getName()); // 測試刪除姓名為AAA的User userRepository.delete(userRepository.findByName("AAA")); // 測試findAll, 查詢所有記錄, 驗證上?的刪除是否成功 Assert.assertEquals(9, userRepository.findAll().size()); }

多數據源配置:

創建?個Spring配置類,定義兩個DataSource?來讀取 application.properties 中的不同配置。如下例?中,主數據源配置為 spring.datasource.primary 開頭的配置,第?數據源配置為 spring.datasource.secondary 開頭的配置。

@Configuration public class DataSourceConfig { @Bean(name = "primaryDataSource") @Qualifier("primaryDataSource") @ConfigurationProperties(prefix="spring.datasource.primary") public DataSource primaryDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "secondaryDataSource") @Qualifier("secondaryDataSource") @Primary @ConfigurationProperties(prefix="spring.datasource.secondary") public DataSource secondaryDataSource() { return DataSourceBuilder.create().build(); } }

對應的 application.properties 配置如下:
spring.datasource.primary.url=jdbc:mysql://localhost:3306/test1
spring.datasource.primary.username=root
spring.datasource.primary.password=root
spring.datasource.primary.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.secondary.url=jdbc:mysql://localhost:3306/test2
spring.datasource.secondary.username=root
spring.datasource.secondary.password=root
spring.datasource.secondary.driver-class-name=com.mysql.jdbc.Driver

JdbcTemplate?持

對JdbcTemplate的?持?較簡單,只需要為其注?對應的datasource即可,如下例?,在創建JdbcTemplate的時候分別注?名為 primaryDataSource 和 secondaryDataSource 的數據源來區分不同的JdbcTemplate。

@Bean(name = "primaryJdbcTemplate") public JdbcTemplate primaryJdbcTemplate( @Qualifier("primaryDataSource") DataSource dataSource) { return new JdbcTemplate(dataSource); } @Bean(name = "secondaryJdbcTemplate") public JdbcTemplate secondaryJdbcTemplate( @Qualifier("secondaryDataSource") DataSource dataSource) { return new JdbcTemplate(dataSource); } //接下來通過測試?例來演示如何使?這兩個針對不同數據源的JdbcTemplate。 @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(Application.class) public class ApplicationTests { @Autowired @Qualifier("primaryJdbcTemplate") protected JdbcTemplate jdbcTemplate1; @Autowired @Qualifier("secondaryJdbcTemplate") protected JdbcTemplate jdbcTemplate2; @Before public void setUp() { jdbcTemplate1.update("DELETE FROM USER "); jdbcTemplate2.update("DELETE FROM USER "); } @Test public void test() throws Exception { // 往第?個數據源中插?兩條數據 jdbcTemplate1.update("insert into user(id,name,age) values(?, ?, ?)", 1, "aaa", 20 ); jdbcTemplate1.update("insert into user(id,name,age) values(?, ?, ?)", 2, "bbb", 30 ); jdbcTemplate2.update("insert into user(id,name,age) values(?, ?, ?)", 1, "aaa", 20 ); 查?下第?個數據源中是否有兩條數據,驗證插?是否成功 Assert.assertEquals("2", jdbcTemplate1.queryForObject("select count(1) from user", String.class)); // 查?下第?個數據源中是否有兩條數據,驗證插?是否成功 Assert.assertEquals("1", jdbcTemplate2.queryForObject("select count(1) from user", String.class)); } }

總結

以上是生活随笔為你收集整理的【笔记】springboot使用Spring-data-jpa的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。