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

資訊專欄INFORMATION COLUMN

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

Kyxy / 1656人閱讀

摘要:最常用的屬性,第一次加載時(shí)根據(jù)類會(huì)自動(dòng)建立起表的結(jié)構(gòu)前提是先建立好數(shù)據(jù)庫,以后加載時(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ù)庫連接地址
spring.datasource.url=jdbc:mysql://localhost:3306/jpa?useSSL=false
#數(shù)據(jù)庫賬號(hào)
spring.datasource.username=root
#數(shù)據(jù)庫密碼
spring.datasource.password=123456zxc
#數(shù)據(jù)庫驅(qū)動(dòng)
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#jpa設(shè)置
spring.jpa.hibernate.ddl-auto=create
#是否在控制臺(tái)顯示數(shù)據(jù)庫語句
spring.jpa.show-sql=true

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

create:每次加載hibernate時(shí)都會(huì)刪除上一次的生成的表,然后根據(jù)你的model類再重新來生成新表,哪怕兩次沒有任何改變也要這樣執(zhí)行,這就是導(dǎo)致數(shù)據(jù)庫表數(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ù)庫),以后加載hibernate時(shí)根據(jù)model類自動(dòng)更新表結(jié)構(gòu),即使表結(jié)構(gòu)改變了但表中的行仍然存在不會(huì)刪除以前的行。要注意的是當(dāng)部署到服務(wù)器后,表結(jié)構(gòu)是不會(huì)被馬上建立起來的,是要等應(yīng)用第一次運(yùn)行起來后才會(huì)。

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

none:什么都不做

至此基本配置完成

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

創(chuàng)建一個(gè)User實(shí)體,包含id(主鍵)、name(姓名)、age(年齡)屬性,通過ORM框架其會(huì)被映射到數(shù)據(jù)庫表中,由于配置了hibernate.hbm2ddl.auto,在應(yīng)用啟動(dòng)的時(shí)候框架會(huì)自動(dòng)去數(shù)據(jù)庫中創(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ù)庫表相關(guān)聯(lián)的類
public class User
{
    @Id//主鍵
    @GeneratedValue//自增長
    private Long id;//id
    @Column(length = 30)//長度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ù)訪問接口

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

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í)體類型,主鍵類型>
{
    // 通過名稱找到用戶
    User findByName(String name);

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

    // 通過名稱模糊查詢
    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編寫對(duì)應(yīng)的單元測(cè)試來驗(yàn)證編寫的內(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://m.specialneedsforspecialkids.com/yun/68288.html

相關(guān)文章

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

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

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

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

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

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

    摘要:的默認(rèn)配置文件位置為。比如,我們需要自定義模塊的服務(wù)端口號(hào),可以在中添加來指定服務(wù)端口為,也可以通過來指定應(yīng)用名該名字在應(yīng)用中會(huì)被注冊(cè)為服務(wù)名。同時(shí),配置內(nèi)容都對(duì)開發(fā)人員可見,本身這也是一種安全隱患。 在快速入門一節(jié)中,我們輕松的實(shí)現(xiàn)了一個(gè)簡單的RESTful API應(yīng)用,體驗(yàn)了一下Spring Boot給我們帶來的諸多優(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元查看
<