SpringBoot搭建(框架搭建-->請求測試-->數據庫操作(事務))

1.框架搭建。

       採用的開發工具是IntelliJ IDEA 2017.3.4 x64

(1).File --> New Project --> Spring Initializr,如圖下所示:


(2).填寫maven的座標,選擇打包方式,沒啥好多的,用過maven的都很熟悉。


(3).選擇依賴。


(4).選擇項目在磁盤上的工作空間,點擊Finish


(5).項目新建成功,項目結構如圖所示。

 

(6)運行Demo,直接運行CsdnApplication的main方法就好了,出現如下界面則搭建成功。


2.HelloWord

(1).新建HelloController(暫時將HelloController和CsdnApplication同一級目錄下,後續再說爲什麼再做相關改變),如圖所示:


(2).測試Helloworld,本人用的PostMan工具,其他的接口測試工具,瀏覽器啥的都可以。


3.springboot配置

springboot的一大亮點就是配置超級簡單,本文只是一個demo,只做做基礎的配置。配置文件這邊我用的是.yml文件,它比.properties的好處是,有天然的樹狀結構,比較清晰,但是作用都是一樣的。我的配置文件如下(配置文件內容可以到最下面的鏈接下載):


pom文件詳情:

<?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>com.example</groupId>
	<artifactId>csdn</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>csdn</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.1.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<!-- 移除嵌入式tomcat插件 部署到tomcat的時候使用 -->
			<!--<exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>-->
		</dependency>

		<!-- 部署到tomcat的時候打開 -->
		<!--<dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-servlet-api</artifactId>
            <version>8.0.36</version>
            <scope>provided</scope>
        </dependency>-->

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

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

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

		<dependency>
			<groupId>javax.el</groupId>
			<artifactId>javax.el-api</artifactId>
			<version>3.0.0</version>
		</dependency>

		<dependency>
			<groupId>org.glassfish</groupId>
			<artifactId>javax.el</artifactId>
			<version>3.0.0</version>
		</dependency>

	</dependencies>

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


</project>


4.數據庫操作

新建實體類:User.java。user裏面的字段上的註解,看名字都看出來什麼意思了,就是和數據庫表的映射。

package com.example.csdn;

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


/**
 * Created by Administrator on 2017/7/21.
 */
@Entity
public class User  {
    @Id
    @Column(name="id",nullable = false)
    @GeneratedValue
    private Long id;

    @Column
    private String username;

    @Column
    private String name;

    @Column
    private String password;

    public Long getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getName() {
        return name;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public User(String username,String name,String password){
        super();
        this.username=username;
        this.name=name;
        this.password=password;
    }

    //必須有一個無參構造方法,否則會報錯
    public User(){

    }

    @Override
    public String toString() {
        return getId()+","+getUsername()+","+getName();
    }
}

創建mapper查詢接口 UserMapper,UserMapper繼承自JpaRePository,jpa幫我們實現了好多實用的CRUD方法。

package com.example.csdn;

import com.example.csdn.User;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface UserMapper extends JpaRepository<User, Long> {



}

建立service,注入Usermapper。

package com.example.csdn;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Optional;

@Service
public class UserService {

    @Autowired
    UserMapper userMapper;

    @Transactional
    public User insert(User user){
        return userMapper.save(user);
    }

    public void deleteById(Long userId){
         userMapper.deleteById(userId);
    }

    public User update(User user){
        return userMapper.save(user);
    }
    
    public Optional<User> findById(Long id){
        Optional<User> user = userMapper.findById(id);
        List<User> all = userMapper.findAll();
        return user;
    }

    public List<User> findList(){
        List<User> userList = userMapper.findAll();
        return userList;
    }
}

新建UserController.java,調用Service,實現用戶新增。

ackage com.example.Controller;


import com.example.bean.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class UserController {
    @Autowired
    private UserService userService;




    @RequestMapping("/users/insert")
    public User insert(User user){
        return userService.insert(user);
    }
}




postman發送測試請求。


測試成功,再到數據庫裏面看一看。


5.其他

(1).實際開發中肯定要分包分類,肯定不能將Controller,Service,Bean都放在一起,這個時候就新建包,新建類。新建包的時候要注意,想要讓SpringBoot能夠掃描到你的類,將其注入到IOC容器裏,最直接的方法是將CsdnApplication.java這個文件放到Controller,Service這些包的父級,因爲SpringBoot默認掃描的是啓動類文件的同級及其子集的所有.java文件。結構如圖所示:


(2)若要開啓Springboot的事務(最簡單的事務,關於事務的隔離級別,spring的事務傳播等就不說了),最簡單的方法是註解。第一步在啓動類上聲明開啓註解

@EnableTransactionManagement
@SpringBootApplication
public class CsdnApplication {

	public static void main(String[] args) {
		SpringApplication.run(CsdnApplication.class, args);
	}
}
然後在Service方法上加入註解

    @Transactional
    public User insert(User user){
        return userMapper.save(user);
    }
如果寫上了如上的兩個註解,事務還是不會滾,可以在springboot的配置文件裏面加上dialect:org.hibernate.dialect.MySQL5InnoDBDialect(參照前文的springboot配置文件)。

(3)更改啓動輸出的banner。springboot啓動的時候,會有如下輸出,如果不喜歡的話,可以更改。更改方法:將banner.txt(到最下面的文件下載鏈接裏面找)放到\src\main\resources目錄下,啓動就Ok了。
更改前:



更改後(苦中作樂一下,是不是很好玩):



6.總結。

springboot還是很簡介的,本文只介紹了最基礎的功能,關於springboot的高級應用,例如定時任務,異步任務,上傳下載,springboot攔截器等後續再說明吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章