成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Spring Boot快速入門(mén)(四):使用jpa進(jìn)行數(shù)據(jù)庫(kù)操作

Kyxy / 1660人閱讀

摘要:最常用的屬性,第一次加載時(shí)根據(jù)類會(huì)自動(dòng)建立起表的結(jié)構(gòu)前提是先建立好數(shù)據(jù)庫(kù),以后加載時(shí)根據(jù)類自動(dòng)更新表結(jié)構(gòu),即使表結(jié)構(gòu)改變了但表中的行仍然存在不會(huì)刪除以前的行。

添加依賴

新建項(xiàng)目選擇web,JPA,MySQL三個(gè)依賴

對(duì)于已存在的項(xiàng)目可以在bulid.gradle加入,spring boot將會(huì)幫你自動(dòng)配置好

compile("org.springframework.boot:spring-boot-starter-data-jpa")
compile("org.springframework.boot:spring-boot-starter-web")
runtime("mysql:mysql-connector-java")
配置基本信息

然后在src/main/resources/application.properties下添加基本配置

#數(shù)據(jù)庫(kù)連接地址
spring.datasource.url=jdbc:mysql://localhost:3306/jpa?useSSL=false
#數(shù)據(jù)庫(kù)賬號(hào)
spring.datasource.username=root
#數(shù)據(jù)庫(kù)密碼
spring.datasource.password=123456zxc
#數(shù)據(jù)庫(kù)驅(qū)動(dòng)
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#jpa設(shè)置
spring.jpa.hibernate.ddl-auto=create
#是否在控制臺(tái)顯示數(shù)據(jù)庫(kù)語(yǔ)句
spring.jpa.show-sql=true

spring.jpa.properties.hibernate.hbm2ddl.auto 其作用是:自動(dòng)創(chuàng)建、更新、驗(yàn)證數(shù)據(jù)庫(kù)表結(jié)構(gòu)。該參數(shù)的幾種配置如下:

create:每次加載hibernate時(shí)都會(huì)刪除上一次的生成的表,然后根據(jù)你的model類再重新來(lái)生成新表,哪怕兩次沒(méi)有任何改變也要這樣執(zhí)行,這就是導(dǎo)致數(shù)據(jù)庫(kù)表數(shù)據(jù)丟失的一個(gè)重要原因。

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

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

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

none:什么都不做

至此基本配置完成

創(chuàng)建實(shí)體

創(chuàng)建一個(gè)User實(shí)體,包含id(主鍵)、name(姓名)、age(年齡)屬性,通過(guò)ORM框架其會(huì)被映射到數(shù)據(jù)庫(kù)表中,由于配置了hibernate.hbm2ddl.auto,在應(yīng)用啟動(dòng)的時(shí)候框架會(huì)自動(dòng)去數(shù)據(jù)庫(kù)中創(chuàng)建對(duì)應(yīng)的表。

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity//這是一個(gè)和數(shù)據(jù)庫(kù)表相關(guān)聯(lián)的類
public class User
{
    @Id//主鍵
    @GeneratedValue//自增長(zhǎng)
    private Long id;//id
    @Column(length = 30)//長(zhǎng)度30
    private String name;//名稱
    @Column(nullable = false)//不可空
    private Integer age;//年齡

    public User()
    {
    }

    public User(String name, Integer age)
    {
        this.name = name;
        this.age = age;
    }

    public Long getId()
    {
        return id;
    }

    public void setId(Long id)
    {
        this.id = id;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public Integer getAge()
    {
        return age;
    }

    public void setAge(Integer age)
    {
        this.age = age;
    }
}
創(chuàng)建數(shù)據(jù)訪問(wèn)接口

創(chuàng)建一個(gè)userRepository接口,進(jìn)行數(shù)據(jù)庫(kù)操作

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;

public interface UserRepository extends JpaRepository//JpaRepository<實(shí)體類型,主鍵類型>
{
    // 通過(guò)名稱找到用戶
    User findByName(String name);

    // 通過(guò)名稱和年齡找到用戶
    User findByNameAndAge(String name, Integer age);

    // 通過(guò)名稱模糊查詢
    List findByNameLike(String name);

    // 使用hql查詢
    @Query("from User u where u.name=:name")//:name對(duì)應(yīng)@Param里的name
    User findByHQL(@Param("name") String name);

    // 使用sql查詢
    @Query(value = "select * from user where name = ?1 and age = ?2", nativeQuery = true)//?1表示第一個(gè)參數(shù),?2表示第二個(gè)參數(shù)
    User findBySQL(String name, Integer age);
}
單元測(cè)試

在src/test/java/你的包名/你的項(xiàng)目名ApplicationTests編寫(xiě)對(duì)應(yīng)的單元測(cè)試來(lái)驗(yàn)證編寫(xiě)的內(nèi)容是否正確

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class JpaLearnApplicationTests
{
    // 注入userRepository
    @Autowired
    private UserRepository userRepository;

    @Test
    public void contextLoads()
    {
        // 添加10個(gè)測(cè)試用例
        userRepository.save(new User("QQQ",1));
        userRepository.save(new User("WWW",2));
        userRepository.save(new User("EEE",3));
        userRepository.save(new User("AAA",4));
        userRepository.save(new User("SSS",5));
        userRepository.save(new User("DDD",6));
        userRepository.save(new User("ZZZ",7));
        userRepository.save(new User("XXX",8));
        userRepository.save(new User("CCC",9));
        userRepository.save(new User("QQQ2",10));

        // 測(cè)試findAll, 查詢所有記錄
        Assert.assertEquals(10, userRepository.findAll().size());

        // 測(cè)試findByName, 查詢姓名為AAA的User
        Assert.assertEquals(4, userRepository.findByName("AAA").getAge().longValue());

        // 測(cè)試findByHQL, 查詢姓名為AAA的User
        Assert.assertEquals(4, userRepository.findByHQL("AAA").getAge().longValue());

        // 測(cè)試findByNameAndAge, 查詢姓名為SSS并且年齡為5的User
        Assert.assertEquals("SSS", userRepository.findByNameAndAge("SSS", 5).getName());

        // 測(cè)試findBySQL, 查詢姓名為SSS并且年齡為5的User
        Assert.assertEquals("SSS", userRepository.findBySQL("SSS", 5).getName());

        // 測(cè)試刪除姓名為AAA的User
        userRepository.delete(userRepository.findByName("AAA"));

        // 測(cè)試findAll, 查詢所有記錄, 驗(yàn)證上面的刪除是否成功
        Assert.assertEquals(9, userRepository.findAll().size());

        // 測(cè)試findAll, 查詢名字有Q的有幾個(gè)
        Assert.assertEquals(2,userRepository.findByNameLike("%Q%").size());
    }

}

點(diǎn)擊運(yùn)行測(cè)試用例

源碼地址:https://github.com/LieRabbit/...
原文地址:https://lierabbit.cn/2018/01/...

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/68288.html

相關(guān)文章

  • 寫(xiě)這么多系列博客,怪不得找不到女朋友

    摘要:前提好幾周沒(méi)更新博客了,對(duì)不斷支持我博客的童鞋們說(shuō)聲抱歉了。熟悉我的人都知道我寫(xiě)博客的時(shí)間比較早,而且堅(jiān)持的時(shí)間也比較久,一直到現(xiàn)在也是一直保持著更新?tīng)顟B(tài)。 showImg(https://segmentfault.com/img/remote/1460000014076586?w=1920&h=1080); 前提 好幾周沒(méi)更新博客了,對(duì)不斷支持我博客的童鞋們說(shuō)聲:抱歉了!。自己這段時(shí)...

    JerryWangSAP 評(píng)論0 收藏0
  • 【從零入門(mén)系列-2】Spring Boot數(shù)據(jù)庫(kù)實(shí)體定義實(shí)現(xiàn)

    摘要:文章系列從零入門(mén)系列之從零入門(mén)系列之程序結(jié)構(gòu)設(shè)計(jì)說(shuō)明前言本篇文章開(kāi)始代碼實(shí)踐,系統(tǒng)設(shè)計(jì)從底向上展開(kāi),因此本篇先介紹如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)表實(shí)體類的設(shè)計(jì)實(shí)現(xiàn)。主鍵由數(shù)據(jù)庫(kù)自動(dòng)生成主要是自動(dòng)增長(zhǎng)型主鍵由程序控制。 文章系列 【從零入門(mén)系列-0】Sprint Boot 之 Hello World 【從零入門(mén)系列-1】Sprint Boot 之 程序結(jié)構(gòu)設(shè)計(jì)說(shuō)明 前言 本篇文章開(kāi)始代碼實(shí)踐,系統(tǒng)...

    nemo 評(píng)論0 收藏0
  • spring boot - 收藏集 - 掘金

    摘要:引入了新的環(huán)境和概要信息,是一種更揭秘與實(shí)戰(zhàn)六消息隊(duì)列篇掘金本文,講解如何集成,實(shí)現(xiàn)消息隊(duì)列。博客地址揭秘與實(shí)戰(zhàn)二數(shù)據(jù)緩存篇掘金本文,講解如何集成,實(shí)現(xiàn)緩存。 Spring Boot 揭秘與實(shí)戰(zhàn)(九) 應(yīng)用監(jiān)控篇 - HTTP 健康監(jiān)控 - 掘金Health 信息是從 ApplicationContext 中所有的 HealthIndicator 的 Bean 中收集的, Spring...

    rollback 評(píng)論0 收藏0
  • SpringBoot入門(mén)

    摘要:入門(mén)簡(jiǎn)介是一種全新的框架,目的是簡(jiǎn)化應(yīng)用的初始搭建和開(kāi)發(fā)過(guò)程,讓開(kāi)發(fā)者寫(xiě)更少的配置,程序更快的啟動(dòng)和運(yùn)行,致力于成為快速開(kāi)發(fā)應(yīng)用領(lǐng)域的領(lǐng)導(dǎo)者。并且可以內(nèi)嵌,這樣我們無(wú)需以包的形式部署項(xiàng)目。 SpringBoot入門(mén) SpringBoot簡(jiǎn)介 spring boot是一種全新的Java web框架,目的是簡(jiǎn)化Spring應(yīng)用的初始搭建和開(kāi)發(fā)過(guò)程,讓開(kāi)發(fā)者寫(xiě)更少的配置,程序更快的啟動(dòng)和運(yùn)行...

    leone 評(píng)論0 收藏0
  • Spring Boot 配置文件中的花樣,看這一篇足矣!

    摘要:的默認(rèn)配置文件位置為。比如,我們需要自定義模塊的服務(wù)端口號(hào),可以在中添加來(lái)指定服務(wù)端口為,也可以通過(guò)來(lái)指定應(yīng)用名該名字在應(yīng)用中會(huì)被注冊(cè)為服務(wù)名。同時(shí),配置內(nèi)容都對(duì)開(kāi)發(fā)人員可見(jiàn),本身這也是一種安全隱患。 在快速入門(mén)一節(jié)中,我們輕松的實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的RESTful API應(yīng)用,體驗(yàn)了一下Spring Boot給我們帶來(lái)的諸多優(yōu)點(diǎn),我們用非常少的代碼量就成功的實(shí)現(xiàn)了一個(gè)Web應(yīng)用,這是傳統(tǒng)的...

    pingan8787 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<