Spring Boot快速入門


安裝

安裝依賴

maven是一個依賴管理工具,我們利用maven進行構建。創建一個maven項目,在pom.xml里面添加依賴項

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>1.0</groupId>
    <artifactId>SpringBoot</artifactId>
    <version>1.0-SNAPSHOT</version>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
    </parent>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

,接着在idea里面import change,或者執行mvn install來下載依賴。

啟動

在src根目錄創建一個包,然后將項目的代碼放進去。(注:App類不能直接放在src根目錄,否則將無法正常啟動)

package App;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

運行

點擊RUN,即可運行。如果是正常啟動,控制台會輸出

 

路由

什么是路由?

路由是什么?路由即我們瀏覽器上的地址,我們通過路由與服務器進行信息交互。例如:https://search.bilibili.com/all?keyword=老友記。在這個例子中,我們訪問https://search.bilibili.com/all,並且參數是老友記,直觀意思是搜索keyword是老友記的視頻。也可以這么理解,https://search.bilibili.com/all是一個函數,keyword是參數,通過調用函數來獲得對應的結果。

匹配方法和路由

在Spring Boot中,我們需要指定哪一個路由對應哪一個方法。

我們在一個Controller里面通過@RequestMapping注解來匹配路徑和對應的方法,以下是代碼例子。

@RestController
@RequestMapping("test")
public class IndexController { @RequestMapping("index") public String fun() { return "hello Spring boot"; } }

@RestController注解的作用是表示這一個類是一個控制器類,並且返回的對象會自動轉換為JSON(如果返回字符串則還是字符串形式)。@RequestMapping作用是匹配路由和方法,當它加在類上的時候,就是給該類的所有路徑前加一層,但它加在方法上的時候,表示該路徑匹配該方法。在這個例子中訪問http://localhost:8080/hello/index,頁面即打印hello Spring boot。

返回Json對象

進一步,如果我們想要返回JSON對象,怎么辦呢?

@RestController注解的類會自動轉換對象為JSON的,如果只是用@Controller修飾類,則要在方法前加上@ResponseBody。以下演示如何返回Json對象。

 @RequestMapping("person")
    public Object testJson()
    {
        return new Person("Overflow",18);
    }

在之前的控制器上加上以上代碼,Person是我們自己定義的類。在瀏覽器上打開即可以看到Json字符串

{"name":null,"age":18}。

指定請求方法

如果我們想指定路由的請求方法,我們可以在@RequestMapping指定method,method可以是單個對象,也可以是數組形式。

@RequestMapping( value = "index",method ={RequestMethod.GET,RequestMethod.POST} )

以上例子說明該路由請求可以用GET和POST訪問。如果不特別指定,則任何方法都可以訪問該路由。

 接受路由參數

只有單純的路由是不夠的,路由可以附帶參數對服務器,那么我們綁定的方法要如何接受這些參數呢?

在Spring Boot里,我們只需要結合注解即可,以下介紹幾種例子

1、匹配路由中的參數

 @RequestMapping("/person/{name}")
    public Object testJson(@PathVariable(name = "name")String name)

2、獲得get 或者post方法的參數

get方法路徑就是 http:localhost:8080/hello/data?name=Tom

post方法要把參數放在form-data中

@RequestMapping(value = "/data",method={RequestMethod.GET,RequestMethod.POST})
    public Object accessData(@RequestParam(name="name") String name)
    {
        return name;
    }

3、接受Json對象

當參數比較多的時候,可以將參數解釋為一個對象。注意該類一定要有一個默認的構造方法。

@RequestMapping(value = "/json")
    public Object accessJsonData(Person person)
    {
        return person.getName();
    }

4、接收HttpServletRequest對象

事實上以上的接收參數方法都是框架封裝HttpServletRequest對象,而我們獲得這個對象的方法很簡單,只需要在函數的參數列表里面聲明就好,Spring框架會為我們的方法注入該對象。

  @RequestMapping(value = "/servlet")
    public Object selvlet(HttpServletRequest request)
    {
        return request.getRequestURL();
    }

 

Session和Cookie

cookie的作用

cookie是存儲在瀏覽器端的數據。通常用於保存客戶端的狀態信息。

Session的作用

Http請求,與普通的程序不一樣,他是沒有狀態的。但是許多應用需要記錄用戶的狀態,例如用戶的登錄信息等等,這時候就利用session技術來存儲。當瀏覽器與服務器進行交互,服務器會分配一個SessionID給瀏覽器,瀏覽器會把這個ID保存在cookie里,然后每一次發送請求的時候都會將這一個sessionID附上,然后服務器就可以獲得該ID的相關數據。

Map<String,Map<String,Object>> Session

Session的使用類似於以上的代碼說明,一個SessionID對應一個Map來存儲數據。

當然在Spring Boot里面,不需要手動地調用sessionID,就能獲取對應該ID的HttpSession對象。

@RequestMapping(value = "/sessionAndCookie")
    public Object sessionAndCookie(HttpSession session, HttpCookie cookie)

 

與數據庫交互數據

什么是ORM?

數據庫的數據是通過字段來存儲信息的,如果Java類的屬性能夠與數據庫的字段互相映射,那么我們就可以像操作Java對象一樣操作數據庫數據,方便的進行增刪查改操作。

SpringBoot與MySQL進行數據交互

添加依賴

在原來的pom.xml里面添加以下依賴

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

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

在resource文件夾新建一個application.properties文件,這是一個配置文件

spring.jpa.hibernate.ddl-auto=none
spring.datasource.url=jdbc:mysql://localhost:3306/你的數據庫名稱
spring.datasource.username=username
spring.datasource.password=password
spring.jpa.hibernate.ddl-auto的作用,在這里我直接引用文檔的解釋

Here, spring.jpa.hibernate.ddl-auto can be noneupdatecreatecreate-drop, refer to the Hibernate documentation for details.

  • none This is the default for MySQL, no change to the database structure.

  • update Hibernate changes the database according to the given Entity structures.

  • create Creates the database every time, but don’t drop it when close.

  • create-drop Creates the database then drops it when the SessionFactory closes.

創建與數據庫表對應的Entity類

 

@Entity
@Table(name = "user")
public class User
{
    @Id
    public int id;
    public String username;
    public String password;
    public int power;
}

注解解釋,@Entity注解表示該類是一個與數據庫映射的類,@Table表示這個類綁定的是user表,@Id表示id是主鍵。

創建Repository類

這個類是與數據庫進行交互用的,我們要繼承Spring框架給我們提供的一個接口,CrudRepository<>,在使用的時候Spring框架會為我們自動注入相關的方法,方便我們進行增刪查改

public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID> {
    <S extends T> S save(S var1);

    <S extends T> Iterable<S> save(Iterable<S> var1);

    T findOne(ID var1);

    boolean exists(ID var1);

    Iterable<T> findAll();

    Iterable<T> findAll(Iterable<ID> var1);

    long count();

    void delete(ID var1);

    void delete(T var1);

    void delete(Iterable<? extends T> var1);

    void deleteAll();
}

解釋以上相關的函數

save(S var)    傳入對象即可保存在數據庫對象,如果我們的對象有指定ID,則會更新相應ID的記錄

delete(ID var1)  傳入ID即可刪除對應ID的記錄

構造查詢方法

以下是我們的UserRepository的例子

public interface UserRepository extends CrudRepository<User,Long>
{
    //1、通過函數名來進行查詢
    User findByUsername(String username);
    List<User> findUsersByUsername(String username);

    //2、通過指定HQL語句進行查詢
    @Query("select u from User u where u.username= :username and u.password= :password")
    User findUser(@Param("username") String name,@Param("password") String password);
}

查詢方式有兩種

一種是Spring Data提供的通過一定規范的函數名進行查詢

另一種是利用@Query注解,指定HQL,來實現復雜的查詢

大家看到這里可能會疑惑,為什么只需要定義方法名,而不需要寫具體的方法體呢。這是Spring框架的優勢,因為對象都是由Spring來管理,因此只需要給與必要的信息給框架識別,框架就能夠構建一個繼承你的接口的函數,接着按照Spirng自動載入的方法,將該對象引入類中即可。

 

在Controller類里使用Repository類

@RestController
@RequestMapping("user")
public class UserController
{
    @Autowired
    UserRepository userRepository;

    @RequestMapping("find/{name}")
    public Object findUser(@PathVariable("name")String name)
    {
        return userRepository.findByUsername("hello");
    }

    @RequestMapping("check/{name}/{password}")
    public Object checkUser(@PathVariable("name") String name,@PathVariable("password") String password)
    {
        return userRepository.findUser(name, password);
    }
}

利用@AutoWired即可自動載入我們定義的UserRepository

 參考資料

1、http請求方法:http://www.runoob.com/http/http-methods.html

2、spring boot文檔:http://docs.spring.io/spring-boot/docs/1.5.4.RELEASE/reference/htmlsingle/

3、spring data jpa文檔:http://docs.spring.io/spring-data/jpa/docs/2.0.0.M4/reference/html/#jpa.query-methods

4、spring boot guide:https://spring.io/guides/gs/rest-service/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM