激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務(wù)器之家 - 編程語言 - JAVA教程 - 使用SpringBoot開發(fā)Restful服務(wù)實(shí)現(xiàn)增刪改查功能

使用SpringBoot開發(fā)Restful服務(wù)實(shí)現(xiàn)增刪改查功能

2021-03-18 12:01虛無境 JAVA教程

Spring Boot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來簡化新Spring應(yīng)用的初始搭建以及開發(fā)過程。這篇文章主要介紹了基于SpringBoot開發(fā)一個(gè)Restful服務(wù),實(shí)現(xiàn)增刪改查功能,需要的朋友可以參考下

在去年的時(shí)候,在各種渠道中略微的了解了springboot,在開發(fā)web項(xiàng)目的時(shí)候是如何的方便、快捷。但是當(dāng)時(shí)并沒有認(rèn)真的去學(xué)習(xí)下,畢竟感覺自己在struts和springmvc都用得不太熟練。不過在看了很多關(guān)于springboot的介紹之后,并沒有想象中的那么難,于是開始準(zhǔn)備學(xué)習(xí)springboot。 在閑暇之余的時(shí)候,看了下springboot實(shí)戰(zhàn)以及一些大神關(guān)于springboot的博客之后,開始寫起了我的第一個(gè)springboot的項(xiàng)目。在能夠?qū)pringboot進(jìn)行一些簡單的開發(fā)restful風(fēng)格接口實(shí)現(xiàn)crud功能之后,于是便有了本篇博文。

springboot介紹

spring boot是由pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來簡化新spring應(yīng)用的初始搭建以及開發(fā)過程。該框架使用了特定的方式來進(jìn)行配置,從而使開發(fā)人員不再需要定義樣板化的配置。

簡單的來說就是,只需幾個(gè)jar和一些簡單的配置,就可以快速開發(fā)項(xiàng)目。

假如我就想簡單的開發(fā)一個(gè)對(duì)外的接口,那么只需要以下代碼就可以了。

一個(gè)主程序啟動(dòng)springboot

?
1
2
3
4
5
6
@springbootapplication
public class application {
 public static void main(string[] args) {
 springapplication.run(application.class, args);
 }
}

控制層

?
1
2
3
4
5
6
7
@restcontroller
public class helloworldcontroller {
 @requestmapping("/hello")
 public string index() {
 return "hello world";
 }
 }

成功啟動(dòng)主程序之后,編寫控制層,然后在瀏覽器輸入 http://localhost:8080//hello 便可以查看信息。

感覺使用springboot開發(fā)程序是不是非常的簡單呢!

用springboot實(shí)戰(zhàn)的話來說:

這里沒有配置,沒有web.xml,沒有構(gòu)建說明,甚至沒有應(yīng)用服務(wù)器,但這就是整個(gè)應(yīng)用程序了。springboot會(huì)搞定執(zhí)行應(yīng)用程序所需的各種后勤工作,你只要搞定應(yīng)用程序的代碼就好。

基于springboot開發(fā)一個(gè)restful服務(wù)

在開發(fā)程序之前,應(yīng)先做好一下準(zhǔn)備

一、開發(fā)準(zhǔn)備

 

1.1 數(shù)據(jù)庫和表

?
1
2
3
4
5
6
7
8
9
create database `springboot`;
use `springboot`;
drop table if exists `t_user`;
create table `t_user` (
 `id` int(11) not null auto_increment comment 'id',
 `name` varchar(10) default null comment '姓名',
 `age` int(2) default null comment '年齡',
 primary key (`id`)
) engine=innodb auto_increment=12 default charset=utf8;

1.2 maven相關(guān)依賴

springboot最核心的jar

spring-boot-starter :核心模塊,包括自動(dòng)配置支持、日志和yaml;

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<parent>
 <groupid>org.springframework.boot</groupid>
 <artifactid>spring-boot-starter-parent</artifactid>
 <version>1.5.9.release</version>
 <relativepath/>
 </parent>
 <properties>
 <project.build.sourceencoding>utf-8</project.build.sourceencoding>
 <java.version>1.7</java.version>
 <mybatis-spring-boot>1.2.0</mybatis-spring-boot>
 <mysql-connector>5.1.39</mysql-connector>
 </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-thymeleaf</artifactid>
 </dependency>
 <dependency>
 <groupid>org.springframework.boot</groupid>
 <artifactid>spring-boot-starter-data-jpa</artifactid>
 </dependency>
 <dependency>
 <groupid>org.springframework.boot</groupid>
 <artifactid>spring-boot-devtools</artifactid>
 <optional>true</optional>
 </dependency>
 <dependency>
 <groupid>org.springframework.boot</groupid>
 <artifactid>spring-boot-starter-test</artifactid>
 <scope>test</scope>
 </dependency>
 <!-- spring boot mybatis 依賴 -->
 <dependency>
 <groupid>org.mybatis.spring.boot</groupid>
 <artifactid>mybatis-spring-boot-starter</artifactid>
 <version>${mybatis-spring-boot}</version>
 </dependency>
 <!-- mysql 連接驅(qū)動(dòng)依賴 -->
 <dependency>
 <groupid>mysql</groupid>
 <artifactid>mysql-connector-java</artifactid>
 <version>${mysql-connector}</version>
 </dependency>
 </dependencies>
 <build>
 <plugins>
 <!--運(yùn)用springboot 插件 使用spring-boot-devtools模塊的應(yīng)用,當(dāng)classpath中的文件有改變時(shí),會(huì)自動(dòng)重啟! -->
 <plugin>
 <groupid>org.springframework.boot</groupid>
 <artifactid>spring-boot-maven-plugin</artifactid>
 <configuration>
  <fork>true</fork>
 </configuration>
 </plugin>
 </plugins>
 </build>

二、工程說明

 

2.1工程結(jié)構(gòu)圖:

com.pancm.web - controller 層
com.pancm.dao - 數(shù)據(jù)操作層 dao
com.pancm.bean - 實(shí)體類
com.pancm.bean.service - 業(yè)務(wù)邏輯層
application - 應(yīng)用啟動(dòng)類
application.properties - 應(yīng)用配置文件,應(yīng)用啟動(dòng)會(huì)自動(dòng)讀取配置

使用SpringBoot開發(fā)Restful服務(wù)實(shí)現(xiàn)增刪改查功能

2.2 自定義配置文件

一般我們需要一些自定義的配置,例如配置jdbc的連接配置,在這里我們可以用 application.properties 進(jìn)行配置。數(shù)據(jù)源實(shí)際的配置以各位的為準(zhǔn)。

?
1
2
3
4
5
6
7
8
9
10
## 數(shù)據(jù)源配置
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useunicode=true&characterencoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.driver
## mybatis 配置
# 配置為 com.pancm.bean 指向?qū)嶓w類包路徑。
mybatis.typealiasespackage=com.pancm.bean
# 配置為 classpath 路徑下 mapper 包下,* 代表會(huì)掃描所有 xml 文件。
mybatis.mapperlocations=classpath\:mapper/*.xml

三、代碼編寫

 

3.1 pojo類user的編寫

來到重點(diǎn)的代碼這快了。

我們開始先編寫pojo類,對(duì)應(yīng)數(shù)據(jù)庫中的t_user表。

代碼如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class user {
 /** 編號(hào) */
 private int id;
 /** 姓名 */
 private string name;
 
 /** 年齡 */
 private int age;
 
 public user(){
 }
 public class user {
 /** 編號(hào) */
 private int id;
 /** 姓名 */
 private string name;
 
 /** 年齡 */
 private int age;
 
 public user(){
 }
// getter和 setter 略
}

3.2 dao層編寫

在以前的dao層這塊,hibernate和mybatis 都可以使用注解或者使用mapper配置文件。在這里我們使用spring的jpa來完成crud。

說明:

一般有兩種方式實(shí)現(xiàn)與數(shù)據(jù)庫實(shí)現(xiàn)crud:

第一種是xml的mapper配置。

第二種是使用注解,@insert、@select、@update、@delete 這些來完成。本篇使用的是第二種

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import org.apache.ibatis.annotations.delete;
import org.apache.ibatis.annotations.insert;
import org.apache.ibatis.annotations.mapper;
import org.apache.ibatis.annotations.result;
import org.apache.ibatis.annotations.results;
import org.apache.ibatis.annotations.select;
import org.apache.ibatis.annotations.update;
import org.springframework.data.repository.query.param;
import com.pancm.bean.user;
@mapper
public interface userdao {
 /**
 * 用戶數(shù)據(jù)新增
 */
 @insert("insert into t_user(id,name,age) values (#{id},#{name},#{age})")
 void adduser(user user);
 /**
 * 用戶數(shù)據(jù)修改
 */
 @update("update t_user set name=#{name},age=#{age} where id=#{id}")
 void updateuser(user user);
 /**
 * 用戶數(shù)據(jù)刪除
 */
 @delete("delete from t_user where id=#{id}")
 void deleteuser(int id);
 /**
 * 根據(jù)用戶名稱查詢用戶信息
 *
 */
 @select("select id,name,age from t_user")
 // 返回 map 結(jié)果集
 @results({
 @result(property = "id", column = "id"),
 @result(property = "name", column = "name"),
 @result(property = "age", column = "age"),
 })
 user findbyname(@param("name") string username);
 /**
 * 根據(jù)用戶id查詢用戶信息
 *
 */
 @select("select id,name,age from t_user")
 user findbyid(@param("id") int userid);
 /**
 * 根據(jù)用戶age查詢用戶信息
 */
 @select("select id,name,age from t_user where age = #{userage}")
 user findbyage( int userage);
}

這個(gè)接口使用的注解個(gè)人理解:

mapper : 在接口上添加了這個(gè)注解表示這個(gè)接口是基于注解實(shí)現(xiàn)的crud。

results: 返回的map結(jié)果集,property 表示user類的字段,column 表示對(duì)應(yīng)數(shù)據(jù)庫的字段。

param:sql條件的字段。

insert、select、update、delete:對(duì)應(yīng)數(shù)據(jù)庫的增、查、改、刪。

3.3 service 業(yè)務(wù)邏輯層

這塊和hibernate、mybatis的基本一樣。

代碼如下:

接口

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import com.pancm.bean.user;
/**
 *
* title: userservice
* description:用戶接口
* version:1.0.0
* @author pancm
* @date 2018年1月9日
 */
public interface userservice {
 /**
 * 新增用戶
 * @param user
 * @return
 */
 boolean adduser(user user);
 /**
 * 修改用戶
 * @param user
 * @return
 */
 boolean updateuser(user user);
 /**
 * 刪除用戶
 * @param id
 * @return
 */
 boolean deleteuser(int id);
 /**
 * 根據(jù)用戶名字查詢用戶信息
 * @param username
 */
 user finduserbyname(string username);
 /**
 * 根據(jù)用戶id查詢用戶信息
 * @param userid
 */
 user finduserbyid(int userid);
 /**
 * 根據(jù)用戶id查詢用戶信息
 * @param userage
 */
 user finduserbyage(int userage);
}

實(shí)現(xiàn)類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.stereotype.service;
import com.pancm.bean.user;
import com.pancm.dao.userdao;
import com.pancm.service.userservice;
/**
 *
* title: userserviceimpl
* description:
* 用戶操作實(shí)現(xiàn)類
* version:1.0.0
* @author pancm
* @date 2018年1月9日
 */
@service
public class userserviceimpl implements userservice {
 @autowired
 private userdao userdao;
 @override
 public boolean adduser(user user) {
 boolean flag=false;
 try{
 userdao.adduser(user);
 flag=true;
 }catch(exception e){
 e.printstacktrace();
 }
 return flag;
 }
 @override
 public boolean updateuser(user user) {
 boolean flag=false;
 try{
 userdao.updateuser(user);
 flag=true;
 }catch(exception e){
 e.printstacktrace();
 }
 return flag;
 }
 @override
 public boolean deleteuser(int id) {
 boolean flag=false;
 try{
 userdao.deleteuser(id);
 flag=true;
 }catch(exception e){
 e.printstacktrace();
 }
 return flag;
 }
 @override
 public user finduserbyname(string username) {
 return userdao.findbyname(username);
 }
 @override
 public user finduserbyid(int userid) {
 return userdao.findbyid(userid);
 }
 @override
 public user finduserbyage(int userage) {
 return userdao.findbyage(userage);
 }
}

3.4 controller 控制層

控制層這塊和springmvc很像,但是相比而言要簡潔不少。

關(guān)于控制層的注解個(gè)人的理解如下:

restcontroller:默認(rèn)類中的方法都會(huì)以json的格式返回。

requestmapping: 接口路徑配置。

method : 請(qǐng)求格式。

requestparam: 請(qǐng)求參數(shù)。

具體實(shí)現(xiàn)如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.web.bind.annotation.requestmapping;
import org.springframework.web.bind.annotation.requestmethod;
import org.springframework.web.bind.annotation.requestparam;
import org.springframework.web.bind.annotation.restcontroller;
import com.pancm.bean.user;
import com.pancm.service.userservice;
/**
 *
* title: userrestcontroller
* description:
* 用戶數(shù)據(jù)操作接口
* version:1.0.0
* @author pancm
* @date 2018年1月9日
 */
@restcontroller
@requestmapping(value = "/api/user")
public class userrestcontroller {
 @autowired
 private userservice userservice;
 @requestmapping(value = "/adduser", method = requestmethod.post)
 public boolean adduser( user user) {
 system.out.println("開始新增...");
 return userservice.adduser(user);
 }
 @requestmapping(value = "/updateuser", method = requestmethod.put)
 public boolean updateuser( user user) {
 system.out.println("開始更新...");
 return userservice.updateuser(user);
 }
 @requestmapping(value = "/deleteuser", method = requestmethod.delete)
 public boolean delete(@requestparam(value = "username", required = true) int userid) {
 system.out.println("開始刪除...");
 return userservice.deleteuser(userid);
 }
 @requestmapping(value = "/username", method = requestmethod.get)
 public user findbyusername(@requestparam(value = "username", required = true) string username) {
 system.out.println("開始查詢...");
 return userservice.finduserbyname(username);
 }
 @requestmapping(value = "/userid", method = requestmethod.get)
 public user findbyuserid(@requestparam(value = "userid", required = true) int userid) {
 system.out.println("開始查詢...");
 return userservice.finduserbyid(userid);
 }
 @requestmapping(value = "/userage", method = requestmethod.get)
 public user findbyuserage(@requestparam(value = "userage", required = true) int userage) {
 system.out.println("開始查詢...");
 return userservice.finduserbyid(userage);
 }
}

3.5 application 主程序

springapplication 則是用于從main方法啟動(dòng)spring應(yīng)用的類。

默認(rèn),它會(huì)執(zhí)行以下步驟:

1.創(chuàng)建一個(gè)合適的applicationcontext實(shí)例 (取決于classpath)。

2.注冊一個(gè)commandlinepropertysource,以便將命令行參數(shù)作為spring properties。

3.刷新application context,加載所有單例beans。

4.激活所有commandlinerunner beans。

直接使用main啟動(dòng)該類,springboot便自動(dòng)化配置了。

ps:即使是現(xiàn)在我依舊覺得這個(gè)實(shí)在是太厲害了。

該類的一些注解說明。:

springbootapplication:開啟組件掃描和自動(dòng)配置。

mapperscan: mapper 接口類掃描包配置

代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import org.mybatis.spring.annotation.mapperscan;
import org.springframework.boot.springapplication;
import org.springframework.boot.autoconfigure.springbootapplication;
/**
 *
* title: application
* description:
* springboot 主程序
* version:1.0.0
* @author pancm
* @date 2018年1月5日
 */
@springbootapplication
@mapperscan("com.pancm.dao")
public class application {
 public static void main(string[] args) {
 // 啟動(dòng)嵌入式的 tomcat 并初始化 spring 環(huán)境及其各 spring 組件
 springapplication.run(application.class, args);
 system.out.println("程序正在運(yùn)行...");
 }
}

四、代碼測試

 

代碼編寫完之后,我們進(jìn)行代碼的測試。

啟動(dòng)application 之后,使用postman工具進(jìn)行接口的測試。

測試結(jié)果如下:

使用SpringBoot開發(fā)Restful服務(wù)實(shí)現(xiàn)增刪改查功能

使用SpringBoot開發(fā)Restful服務(wù)實(shí)現(xiàn)增刪改查功能

這里只使用了一個(gè)get和post測試,實(shí)際方法都測試過了,但是感覺沒必要貼圖了。

項(xiàng)目我放到github上面去了: https://github.com/xuwujing/springboot

總結(jié)

以上所述是小編給大家介紹的基于springboot開發(fā)一個(gè)restful服務(wù)實(shí)現(xiàn)增刪改查功能,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)服務(wù)器之家網(wǎng)站的支持!

原文鏈接:http://www.panchengming.com/2018/01/10/pancm67/?utm_source=tuicool&utm_medium=referral

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 最新黄色毛片 | 欧美精品久久久久久久久老牛影院 | 国产一级毛片高清视频完整版 | 国产精品一区二区在线 | 日韩av片在线免费观看 | 亚洲视频在线免费看 | 经典三级av在线 | 一级免费特黄视频 | 久久精品欧美一区 | 午夜视频久久久 | 91精品国产91久久久久久吃药 | 粉嫩av一区二区三区四区在线观看 | 宅男噜噜噜66国产免费观看 | 91网视频在线观看 | 色毛片| 午夜在线视频一区二区三区 | 91精品观看91久久久久久国产 | 久久99国产精品久久 | 国产精品久久久久一区二区 | 欧美精品国产综合久久 | 国产成人精品区一区二区不卡 | 久久久久国产成人精品亚洲午夜 | 欧美性生活视频免费看 | 久久人体 | av电影在线免费观看 | 激情久久一区二区 | 久久在线 | 国产精品久久久久久久av | 日本成年免费网站 | 成人毛片免费视频 | 好看的91视频 | 久久久噜噜噜久久熟有声小说 | 亚洲精品久久久久久久久久 | 超污视频在线看 | 爱高潮www亚洲精品 国产精品一区自拍 | 麻豆一区二区99久久久久 | 蜜桃成品人免费视频 | 中文字幕一区2区 | 日本aaaa片毛片免费观看视频 | 欧美日韩视频第一页 | 久久久日韩av免费观看下载 |