国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

SpringBoot2.0之三 優(yōu)雅整合Spring Data JPA

ningwang / 3325人閱讀

摘要:的配置后在其他低版本的中也有使用這種配置的,具體根據(jù)版本而定。等注解是的相關(guān)知識,后面的文章將詳細(xì)講述。

??在我們的實際開發(fā)的過程中,無論多復(fù)雜的業(yè)務(wù)邏輯到達(dá)持久層都回歸到了“增刪改查”的基本操作,可能會存在關(guān)聯(lián)多張表的復(fù)雜sql,但是對于單表的“增刪改查”也是不可避免的,大多數(shù)開發(fā)人員對于這個簡單而繁瑣的操作都比較煩惱。

??為了解決這種大量枯燥的簡單數(shù)據(jù)庫操作,大致的解決該問題的有三種方式
1、使用類似Hibernate的ORM框架,通過Hibernate完成java實體類和數(shù)據(jù)庫之間的映射,完成簡單的單表的“增刪改查”

2、使用代碼生成工具生成單表的“增刪改查”代碼,省去我們手動編寫的過程(我將在后面的文章中給出可定制化生成代碼方法,敬請關(guān)注!)

3、使用Spring-data-jpa這樣的技術(shù),它實現(xiàn)了模板Dao層,只需要在Dao,通過繼承一個接口,就可輕松完成“增刪改查”,具體使用方法如下:

一、在pom.xml文件中添加如下依賴


    org.springframework.boot
    spring-boot-starter-data-jpa

二、在application.yml文件中配置數(shù)據(jù)庫信息和jpa信息(注意:不同的SpringBoot版本jpa配置的方法可能會有不同)

spring:    
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8
    username: root

    password: 123456

  jpa:
    hibernate:
      ddl-auto: update

??個人推薦使用yml格式的配置文件,看起來更加清晰簡單(注意:每個配置屬性的縮進(jìn)是兩個空格,這點一定要注意,不然會出現(xiàn)配置錯誤的情況,也可以在開發(fā)工具中安裝相關(guān)的yml的插件方便查看)。

jpa的配置后 jpa.hibernate.ddl-auto= update,在其他低版本的SpringBoot中也有使用spring.jpa.properties.hibernate.hbm2ddl.auto=create-drop 這種配置的,具體根據(jù)版本而定。該配置的主要作用是:自動創(chuàng)建、更新、驗證數(shù)據(jù)庫結(jié)構(gòu)

1、create:每次加載hibernate時都會刪除上一次的生成的表,然后根據(jù)你的model類再重新來生成新表,哪怕兩次沒有任何改變也要這樣執(zhí)行,這就是導(dǎo)致數(shù)據(jù)庫表數(shù)據(jù)丟失的一個重要原因(一般只會在第一次創(chuàng)建時使用)

2、create-drop:每次加載hibernate時根據(jù)model類生成表,但是sessionFactory一關(guān)閉,表就自動刪除

3、update:最常用的屬性,第一次加載hibernate時根據(jù)model類會自動建立起表的結(jié)構(gòu)(前提是先建立好數(shù)據(jù)庫),以后加載hibernate時根據(jù)model類自動更新表結(jié)構(gòu),即使表結(jié)構(gòu)改變了但表中的行仍然存在不會刪除以前的行。要注意的是當(dāng)部署到服務(wù)器后,表結(jié)構(gòu)是不會被馬上建立起來的,是要等應(yīng)用第一次運行起來后才會

4、validate:每次加載hibernate時,驗證創(chuàng)建數(shù)據(jù)庫表結(jié)構(gòu),只會和數(shù)據(jù)庫中的表進(jìn)行比較,不會創(chuàng)建新表,但是會插入新值

三、創(chuàng)建實體

創(chuàng)建一個User類,配置好上面的信息后,啟動項目,對應(yīng)的數(shù)據(jù)庫就會自動生成對應(yīng)的表結(jié)構(gòu)。@Table、@Entity、@Id等注解是jpa的相關(guān)知識,后面的文章將詳細(xì)講述。

@Table(name = "t_user")
@Entity
public class User {
    @Id
    @GeneratedValue

    private Long id;

    @Column
    private String name;//姓名
    
    @Column
    private Integer age;//年齡

     // .....
}

四、創(chuàng)建數(shù)據(jù)庫訪問Dao層

@Repository
public interface UserRepository  extends JpaRepository{

    /**
     * 根據(jù)年紀(jì)查詢用戶
     * @param age
     * @return
     */
    User findByAge(Integer age);

    /**
     * 根據(jù)年紀(jì)和姓名查詢
     * @param name
     * @param age
     * @return
     */
    User findByNameAndAge(String name, Integer age);

    /**
     * 對于復(fù)雜查詢可以使用@Query 編寫sql
     * @param name
     * @return
     */
    @Query("from User u where u.name=:name")
    User findUser(@Param("name") String name);
    
}

??該Dao成繼承了JpaRepository接口,指定了需要操作的實體對象和實體對象的主鍵類型,通過查看JpaRepository接口源碼可以看到,里面已經(jīng)封裝了創(chuàng)建(save)、更新(save)、刪除(delete)、查詢(findAll、findOne)等基本操作的函數(shù),使用起來非常方便了,但是還是會存在一些復(fù)雜的sql,spring-data-jpa還提供了一個非常方便的方式,通過實體屬性來命名方法,它會根據(jù)命名來創(chuàng)建sql查詢相關(guān)數(shù)據(jù),對應(yīng)更加復(fù)雜的語句,還可以用直接寫sql來完成,具體例子如上所示。

五、單元測試
使用junit進(jìn)行單元測試,代碼如下

/**
 * 
 * @author 明天的地平線
 * 
 * SpringBoot 之前的版本配置單元測試類時使用       @SpringApplicationConfiguration(Application.class)
 * SpringBoot 1.5.9  改用@SpringBootTest(classes = Application.class)
 * 
 */
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Application.class)
public class JpaTest {

    @Autowired
    private UserRepository userRepository;
    
    /**
     * 新增用戶
     * @throws Exception
     */
    @Test
    public void testAddUser() throws Exception {
        User user = new User();
        user.setName("zhangsan");
        user.setAge(12);
        userRepository.save(user);
        
        User user2 = new User();
        user2.setName("lishi");
        user2.setAge(22);
        userRepository.save(user2);
    }
    
    /**
     * 刪除用戶(根據(jù)對象刪除時,必須要有ID屬性)
     * @throws Exception
     */
    @Test
    public void testDelUser() throws Exception {
        User user = new User();
        user.setId(1L);
        user.setName("zhangsan");
        user.setAge(12);
        userRepository.delete(user);
    }
    
    /**
     * 修改用戶信息
     * @throws Exception
     */
    @Test
    public void testUpdUser() throws Exception {
        User user = new User();
        user.setId(2L);
        user.setName("zhangsan11");
        user.setAge(122);
        userRepository.save(user);
    }
    
    /**
     * 查詢用戶
     * @throws Exception
     */
    @Test
    public void testQueryUser() throws Exception {
        User user = userRepository.findByAge(22);
        System.out.println(user.getName());
        
        User user2 = userRepository.findByNameAndAge("lishi", 22);
        System.out.println(user2.getName());
        
        User user3 = userRepository.findUser("zhangsan11");
        System.out.println(user3.getName());
    }
    
    /**
     * 查詢所有用戶
     * @throws Exception
     */
    @Test
    public void testQueryUserList() throws Exception {
        List list = userRepository.findAll();
        for (User user : list) {
            System.out.println(user.getName());
        }
    }
    

}

數(shù)據(jù)庫數(shù)據(jù)如下:

??本文主要以SpringBoot整合jpa為主,Spring-data-jpa的內(nèi)容遠(yuǎn)比以上內(nèi)容豐富和強大,例如分頁排序、對原生sql的支持等,后續(xù)將對此內(nèi)容進(jìn)行專門講解,感興趣的小伙伴可以關(guān)注我的博客和微信公眾號。

Git代碼地址:https://gitee.com/Somta/Sprin...
原文地址:http://somta.com.cn/#/blog/vi...

本文由明天的地平線創(chuàng)作,如想了解更多更詳細(xì)的內(nèi)容,請關(guān)注一下公眾號,公眾號內(nèi)將進(jìn)行最新最實時的更新!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/69754.html

相關(guān)文章

  • SpringBoot2.0之五 優(yōu)雅整合SpringBoot2.0+MyBatis+druid+Pa

    摘要:當(dāng)禁用時,所有關(guān)聯(lián)對象都會即時加載。不同的驅(qū)動在這方便表現(xiàn)不同。參考驅(qū)動文檔或充分測試兩種方法來決定所使用的驅(qū)動。需要適合的驅(qū)動。系統(tǒng)默認(rèn)值是設(shè)置字段和類是否支持駝峰命名的屬性。 ??上篇文章我們介紹了SpringBoot和MyBatis的整合,可以說非常簡單快捷的就搭建了一個web項目,但是在一個真正的企業(yè)級項目中,可能我們還需要更多的更加完善的框架才能開始真正的開發(fā),比如連接池、分...

    hatlonely 評論0 收藏0
  • 基于 SpringBoot2.0+優(yōu)雅整合 SpringBoot+Mybatis

    摘要:基于最新的,是你學(xué)習(xí)的最佳指南。驅(qū)動程序通過自動注冊,手動加載類通常是不必要。由于加上了注解,如果轉(zhuǎn)賬中途出了意外和的錢都不會改變。三的方式項目結(jié)構(gòu)相比于注解的方式主要有以下幾點改變,非常容易實現(xiàn)。公眾號多篇文章被各大技術(shù)社區(qū)轉(zhuǎn)載。 Github 地址:https://github.com/Snailclimb/springboot-integration-examples(Sprin...

    gghyoo 評論0 收藏0
  • 我就是不看好jpa

    摘要:要是緊急排查個問題,媽蛋雖然有很多好處,比如和底層的無關(guān)。你的公司如果有,是不允許你亂用的。 知乎看到問題《SpringBoot開發(fā)使用Mybatis還是Spring Data JPA??》,順手一答,討論激烈。我實在搞不懂spring data jpa為啥選了hibernate作為它的實現(xiàn),是Gavin King的裙帶關(guān)系么?DAO層搞來搞去,從jdbc到hibernate,從top...

    NusterCache 評論0 收藏0
  • Spring Boot 中 crud如何優(yōu)雅的實現(xiàn)-附代碼

    摘要:以下內(nèi)容基于如果你使用的也是相同的技術(shù)棧可以繼續(xù)往下閱讀,如果不是可以當(dāng)作參考。編寫的四種方式裸寫最簡單最粗暴也是使用最多的一種方式,在寫的多了之后可以用生成工具生成。 導(dǎo)讀 在目前接觸過的項目中大多數(shù)的項目都會涉及到: crud相關(guān)的操作, 哪如何優(yōu)雅的編寫crud操作呢?帶著這個問題,我們發(fā)現(xiàn)項目中大量的操作多是 創(chuàng)建實體 、刪除實例、 修改實體、 查詢單個實體、 分頁查詢多個實體...

    wing324 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<