Springboot 入门

SpringBoot–“春天的靴子”给java web开发带来了春天,穿上了加速的靴子

2小时急速上手SpringBoot(儿童版)

修改IDEA的Maven镜像

公共代理库-阿里云帮助中心

打开如图所示的文件

在修改文件前,请务必备份原文件,以避免不要要的损失

把原<mirror></mirror>标签中的内容替换为以下内容即可

1
2
3
4
5
6
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>

如遇到没有权限的问题,把修改后的文件另存到桌面,然后再从桌面复制回原来的地方即可(复制的过程中会提示需要提供管理员权限)

单元测试的使用

项目结构

方法一

Hello.java文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.hokin.springbootlearn;

/**
* @Description
* @Author: Ho Kin
* @Date: 2023/10/08 00:48 周日
*/
public class Hello {

public static void say() {
System.out.println("hello");
}
}

SpringbootLearnApplicationTests.java文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.hokin.springbootlearn;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class SpringbootLearnApplicationTests {

@Test
void contextLoads() {
Hello.say();
}

}

点击@Test旁边的三角形按钮即可开始进行单元测试

方法二

Hello.java文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.hokin.springbootlearn;

import org.springframework.stereotype.Component;

/**
* @Description
* @Author: Ho Kin
* @Date: 2023/10/08 00:48 周日
*/
@Component
public class Hello {

public void say() {
System.out.println("hello");
}
}

SpringbootLearnApplicationTests.java文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.hokin.springbootlearn;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class SpringbootLearnApplicationTests {

@Autowired
Hello hello;
@Test
void contextLoads() {
hello.say();
}

}

测试结果

Controller、Service、dao、pojo四大包(功能)

web通过http请求处理给到controller(相当于门,os:web你是过来增加人员的,好,我带你去找那个业务。于是找到了service)service(os:你要增加一个人啊,然后service到dao找了,然后找到了增加是这个方法,然后想增加一个人?这个人在哪?然后就找到了pojo)

连接数据库

项目结构

数据库结构

创建数据库及表代码如下

1
2
3
4
5
6
7
8
create schema imau_learn;
create table user
(
username varchar(32) not null comment '用户名',
password varchar(32) not null comment '密码',
constraint user_pk
primary key (username)
);

操作步骤

  1. 在pom.xml中添加spring-boot-starter-jdbc和mysql-connector-j依赖(复制代码后重新载入pom.xml即可),可以在文章结尾的Maven依赖官网仓库搜索复制代码,也可复制以下代码

    spring-boot-starter-jdbc依赖

    1
    2
    3
    4
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>

    mysql-connector-j依赖

    1
    2
    3
    4
    5
    <dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
    </dependency>

    重新载入pom.xml

  2. 重命名配置文件为application.yml并输入以下信息:

    1
    2
    3
    4
    5
    6
    spring:
    datasource:
    username: root
    password: Guistar_
    url: jdbc:mysql://localhost:3306/imau_learn
    driver-class-name: com.mysql.cj.jdbc.Driver
  3. 运行主程序中的Application文件即可查看连接是否正常(无报错即正常)

  4. 添加mybatis-plus-boot-starter依赖

    注意:springboot3及以上的需要用3.5.3.1版本,否则会无法加载dao层的bean

    1
    2
    3
    4
    5
    6
    7
    <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
    <!-- 3.5.3.1 是springboot3.0以后用的,如果用其他版本会提示找不到Dao的bean!-->
    <dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3.1</version>
    </dependency>

    重载Maven

  5. 项目结构

  6. UserPojo文件(类)

    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
    package com.hokin.springbootlearn.pojo;

    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.annotation.TableField;
    import com.baomidou.mybatisplus.annotation.TableId;
    import com.baomidou.mybatisplus.annotation.TableName;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;

    /**
    * @Description
    * @Author: Ho Kin
    * @Date: 2023/10/09 23:40 周一
    */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @TableName(value = "user")
    public class UserPojo {

    @TableId(value = "username", type = IdType.NONE)
    private String username;

    @TableField(value = "password")
    private String password;
    }

  7. UserDao文件(接口)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    package com.hokin.springbootlearn.dao;

    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import com.hokin.springbootlearn.pojo.UserPojo;
    import org.apache.ibatis.annotations.Mapper;

    /**
    * @Description
    * @Author: Ho Kin
    * @Date: 2023/10/10 00:33 周二
    */


    @Mapper
    public interface UserDao extends BaseMapper<UserPojo> {

    }
  8. UserServiceImpl文件(类)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    package com.hokin.springbootlearn.service;


    import com.hokin.springbootlearn.dao.UserDao;
    import com.hokin.springbootlearn.pojo.UserPojo;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;

    /**
    * @Description
    * @Author: Ho Kin
    * @Date: 2023/10/09 23:49 周一
    */
    @Service
    public class UserServiceImpl {

    @Autowired
    UserDao userDao;

    public void addUser(String username, String password) {
    userDao.insert(new UserPojo(username, password));
    }

    }
  9. Test测试文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    package com.hokin.springbootlearn;

    import com.hokin.springbootlearn.service.UserServiceImpl;
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;

    @SpringBootTest
    class SpringbootLearnApplicationTests {


    @Autowired
    Hello hello;

    @Autowired
    UserServiceImpl userServiceimpl;
    @Test
    void contextLoads() {
    hello.say();
    userServiceimpl.addUser("aaa", "123456");
    }

    }

测试结果

可以看到已经成功把数据添加到数据库中去了!

开发接口并测试(初步)

项目结构

各文件代码

UserController文件

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
package com.hokin.springbootlearn.controller;

import com.hokin.springbootlearn.service.UserServiceImpl;
import com.hokin.springbootlearn.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
* @Description
* @Author: Ho Kin
* @Date: 2023/10/10 11:19 周二
*/
@RestController
public class UserController {

@Autowired
UserServiceImpl userService;

@RequestMapping(value = "/addUser", method = RequestMethod.POST)
public String addUser(@RequestParam("username") String username,
@RequestParam("password") String password) {
userService.addUser(username, password);
return Result.okGetString("添加成功");
}

@RequestMapping(value = "/deleteUser", method = RequestMethod.DELETE)
public String delUser(@RequestParam("username") String username) {
userService.delUser(username);
return Result.okGetString("删除成功");
}

@RequestMapping(value = "/updateUser", method = RequestMethod.PUT)
public String updateUser(@RequestParam("username") String username,
@RequestParam("password") String password) {
userService.updateUserByName(username, password);
return Result.okGetString("修改成功");
}

@RequestMapping(value = "/findUser/{username}", method = RequestMethod.GET)
public String findUser(@PathVariable("username") String username) {
Object list = userService.findUserByNameFuzzy(username);
return Result.okGetStringByData("查询成功", list);
}
}

UserServiceImpl文件

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
package com.hokin.springbootlearn.service;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.hokin.springbootlearn.dao.UserDao;
import com.hokin.springbootlearn.pojo.UserPojo;
import org.apache.catalina.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
* @Description
* @Author: Ho Kin
* @Date: 2023/10/09 23:49 周一
*/
@Service
public class UserServiceImpl {

@Autowired
UserDao userDao;

public void addUser(String username, String password) {
userDao.insert(new UserPojo(username, password));
}

public void delUser(String username) {
userDao.deleteById(username);
}

public void delUserByName(String username) {
userDao.delete(new QueryWrapper<UserPojo>().like("username", username));
}

public void findUserByName(String username) {
UserPojo pojo = userDao.selectOne(new QueryWrapper<UserPojo>().eq("username", username));
System.out.println(pojo);
}

public Object findUserByNameFuzzy(String username) {
List<UserPojo> pojo = userDao.selectList(new QueryWrapper<UserPojo>().like("username", username));
pojo.forEach(item -> {
System.out.println(item);
});

return pojo;
}

public void updateUserByName(String username, String password) {
UserPojo pojo = userDao.selectById(username);
pojo.setPassword(password);
userDao.update(pojo, new QueryWrapper<UserPojo>().eq("username", username));
}
}

UserDao文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.hokin.springbootlearn.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hokin.springbootlearn.pojo.UserPojo;
import org.apache.ibatis.annotations.Mapper;

/**
* @Description
* @Author: Ho Kin
* @Date: 2023/10/10 00:33 周二
*/


@Mapper
public interface UserDao extends BaseMapper<UserPojo> {

}

UserPojo文件

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
package com.hokin.springbootlearn.pojo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
* @Description
* @Author: Ho Kin
* @Date: 2023/10/09 23:40 周一
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "user")
public class UserPojo {

@TableId(value = "username", type = IdType.NONE)
private String username;

@TableField(value = "password")
private String password;
}

Result文件

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
package com.hokin.springbootlearn.utils;

import com.alibaba.fastjson2.JSONObject;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

/**
* @Description
* @Author: Ho Kin
* @Date: 2023/10/10 11:15 周二
*/

public class Result {

public static String okGetString(String message) {
Map<String, Object> map = new HashMap<>();
map.put("code", 200);
map.put("message", message);
String s = JSONObject.toJSONString(map);
return s;
}

public static String okGetStringByData(String message, Object data) {
Map<String, Object> map = new HashMap<>();
map.put("code", 200);
map.put("message", message);
map.put("data", data);
String s = JSONObject.toJSONString(map);
return s;
}
}

测试步骤

把以上文件都完善好后就可以利用Apipost进行接口测试了

Apipost官网

下载Apipost并安装打开

运行主App文件,主App文件不用修改什么,直接运行即可

打开Apipost

以下为测试添加用户接口示例:

实时响应处能看到消息即为可用接口,可以看到数据库已经发生了变化了

以下为测试查询用户的接口示例:

测试成功!

其他

Maven依赖官网仓库

phpStudy(小皮面板) - 让天下没有难配的服务器环境!