一名大佬和我說肄梨,作為一名大數(shù)據(jù)工程師,必備的技能挠锥,一是SQL众羡,二是對外提供數(shù)據(jù)接口。所以現(xiàn)在開始學(xué)習(xí)簡單的SpringBoot+MySQL實(shí)現(xiàn)GET請求從數(shù)據(jù)庫中查詢數(shù)據(jù)蓖租。
數(shù)據(jù)庫準(zhǔn)備
默認(rèn)MySQL數(shù)據(jù)庫已經(jīng)準(zhǔn)備好
create database springbootdb;
CREATE TABLE `user` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(25) DEFAULT NULL,
`age` int(10) DEFAULT NULL,
`email` varchar(25) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
INSERT INTO `user` (`name`, `age`, `email`) VALUES ('Jone', 18, 'test1@baomidou.com');
INSERT INTO `user` (`name`, `age`, `email`) VALUES ('Jack', 18, 'test1@baomidou.com');
INSERT INTO `user` (`name`, `age`, `email`) VALUES ('Tom', 18, 'test1@baomidou.com');
INSERT INTO `user` (`name`, `age`, `email`) VALUES ('Jone', 18, 'test1@baomidou.com');
建表以及插入數(shù)據(jù)成功以后粱侣,查詢?nèi)缦聢D所示:
image.jpeg
SpringBoot項(xiàng)目
首先創(chuàng)建一個(gè)maven項(xiàng)目,選擇Spring Initializr是因?yàn)榭梢詼p少自己手動(dòng)添加的依賴蓖宦。image.png
點(diǎn)擊下一步以后齐婴,注意使用的Java版本。
image.png
選擇添加的依賴稠茂。
image.png
需要手動(dòng)添加的依賴柠偶。
<!--內(nèi)置tomcat對Jsp支持的依賴,用于編譯Jsp-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<!--引入jsp相關(guān)-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<!--引入Servlet-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<!--引入jstl-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.75</version>
</dependency>
由于使用的模版構(gòu)建的項(xiàng)目睬关,所以會(huì)自動(dòng)創(chuàng)建一些文件目錄诱担,例如啟動(dòng)類。image.png
依次創(chuàng)建pojo->mapper->contrpller目錄电爹。
image.png
一般寫的順序:pojo->Mapper/Dao->Controller->Service
Entity/pojo:實(shí)體層蔫仙,數(shù)據(jù)庫在項(xiàng)目中的類
Dao/Mapper:持久層,主要與數(shù)據(jù)庫交互(接口藐不,需要寫實(shí)現(xiàn)類)
Service:業(yè)務(wù)層匀哄,控制業(yè)務(wù)(接口,需要寫實(shí)現(xiàn)類)
Controller:控制層雏蛮,控制業(yè)務(wù)邏輯
最后的結(jié)構(gòu)如下:image.png
不要忘記填寫配置文件
application.properties
# 應(yīng)用名稱
spring.application.name=demo
# 應(yīng)用服務(wù) WEB 訪問端口
server.port=8080
# 數(shù)據(jù)庫驅(qū)動(dòng):
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 數(shù)據(jù)源名稱
spring.datasource.name=defaultDataSource
# 數(shù)據(jù)庫連接地址
spring.datasource.url=jdbc:mysql://localhost:3306/springbootdb?serverTimezone=UTC
# 數(shù)據(jù)庫用戶名&密碼:
spring.datasource.username=root
spring.datasource.password=123456
User.java
package com.example.demo.pojo;
public class User {
private Integer id;
private String name;
private Integer age;
private String email;
public User() {
}
public User(Integer id, String name, Integer age, String email) {
this.id = id;
this.name = name;
this.age = age;
this.email = email;
}
public Integer getId() {
return id;
}
public void setId(Integer 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;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", email='" + email + '\'' +
'}';
}
}
也可以使用lombok注解(lombok插件需要自己安裝一下涎嚼,并且由于我們在創(chuàng)建項(xiàng)目選擇依賴時(shí),已經(jīng)選擇了lombok挑秉,所以在pom文件中已經(jīng)有l(wèi)ombok的依賴法梯,如果pom文件中沒有l(wèi)ombok的依賴,需要手動(dòng)添加)
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
使用lombok注解的User類
package com.example.demo.pojo;
import lombok.Generated;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Generated
@Getter
@Setter
@ToString
public class User {
private Integer id;
private String name;
private Integer age;
private String email;
}
UserMapper.java
package com.example.demo.mapper;
import com.example.demo.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
//@Mapper : MyBatis 映射器的標(biāo)記接口
@Mapper
public interface UserMapper {
//@Select : 可以執(zhí)行SQL
@Select("select * from user")
List<User> findAll();
}
UserController.java
package com.example.demo.controller;
import com.alibaba.fastjson.JSON;
import com.example.demo.mapper.UserMapper;
import com.example.demo.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
//返回Rest風(fēng)格的json,類注釋
//
@RestController
public class UserController {
//@Autowired注解自動(dòng)注入Mapper
@Autowired
UserMapper userMapper;
//JdbcTemplate是Spring對JDBC的封裝立哑,目的是使JDBC更加易于使用夜惭。
//JdbcTemplate是Spring的一部分。JdbcTemplate處理了資源的建立和釋放铛绰。他幫助我們避免一些常見的錯(cuò)誤诈茧,比如忘了總要關(guān)閉連接。
@Autowired
JdbcTemplate jdbcTemplate;
//請求一:訪問http://localhost:8080/user接口捂掰,查詢表中所有數(shù)據(jù)
//@RequestMapping:映射請求敢会,也就是通過它來指定控制器可以處理哪些URL請求
@RequestMapping(value = "/user")
public List<User> hello(){
List<User> users = userMapper.findAll();
return users;
}
//請求二:訪問http://localhost:8080/userinfo?id=2接口,返回傳入?yún)?shù)
@RequestMapping(value = "/userinfo", method = RequestMethod.GET)
public String findUser(HttpServletRequest request, HttpServletResponse response){
String id = request.getParameter("id");
return id;
}
//請求三:訪問http://localhost:8080/userinfo?id=2接口这嚣,返回指定數(shù)據(jù)庫數(shù)據(jù)鸥昏,不手動(dòng)封裝json
@RequestMapping(value = "/id", method = RequestMethod.GET)
public List findUserWithId(HttpServletRequest request, HttpServletResponse response){
List<Map<String, Object>> tmpList = jdbcTemplate.queryForList("select * from user where id>=" + request.getParameter("id"));
return tmpList;
}
////請求三:訪問http://localhost:8080/userinfo?id=2接口,返回指定數(shù)據(jù)庫數(shù)據(jù)姐帚,手動(dòng)封裝json
@RequestMapping(value = "/eq", method = RequestMethod.GET)
public String findUserWithId2(HttpServletRequest request, HttpServletResponse response){
List<Map<String, Object>> tmpList = jdbcTemplate.queryForList("select * from user where id=" + request.getParameter("id"));
return JSON.toJSON(tmpList).toString();
}
}
請求一測試結(jié)果:
image.png
image.png
請求二測試結(jié)果:
image.png
image.png
請求三測試結(jié)果:
image.png
image.png
請求四測試結(jié)果:
image.png
image.png
總結(jié):
一般寫的順序:pojo->Mapper/Dao->Controller->Service
pojo/entity:
編寫實(shí)體類吏垮,每一個(gè)參數(shù)是需要private定義
需要無參構(gòu)造類型、全參構(gòu)造類型罐旗、相應(yīng)的get/set方法膳汪、實(shí)現(xiàn)toString方法
dao/mapper:
需要使用@Mapper注解
定義的是接口,不是方法
使用@Select("SQL")注解尤莺,進(jìn)行數(shù)據(jù)庫操作
Service:
Controller:
@Controller是返回頁面旅敷,return '頁面的標(biāo)識(shí)'
@RestController返回Rest風(fēng)格的json串
使用@AutoWired注解自動(dòng)注入Mapper
JdbcTemplate是Spring對JDBC的封裝,目的是使JDBC更加易于使用颤霎,可以進(jìn)行數(shù)據(jù)庫操作媳谁。
其他注意:如果查詢數(shù)據(jù)庫,那么pojo類需要和數(shù)據(jù)庫中的字段一樣友酱,否則會(huì)查不到數(shù)
至此晴音,一個(gè)簡單的SpringBoot WebAPI 的GET請求完成。
參考:
https://blog.csdn.net/qq_28202661/article/details/79946176
https://blog.csdn.net/p812438109/article/details/106629526
https://blog.csdn.net/p812438109/article/details/106629526