在银行呆了一年,很久没写SpringBoot名目了,搭建一个繁难的SpringBoot名目回忆下
用到的工具:idea 2021、Maven 3.6.3、postman
框架:SpringBoot、Mybatis
数据库:Mysql8.0.30
一、Maven 装置&性能
装置&性能参考博文
留意:
1.下载maven留意idea与Maven版本的适配:
IDEA 2022 兼容maven 3.8.1及之前的所用版本IDEA 2021 兼容maven 3.8.1及之前的所用版本IDEA 2020 兼容Maven 3.6.3及之前一切版本IDEA 2018 兼容Maven3.6.1及之前一切版本
2.为了防止每次创立名目都要改Maven性能,可以修正idea创立新名目的设置
二、装置数据库
mysql8装置参考博文
三、设计库表(这里用的idea自带的数据库治理工具,其余诸如Dbeaver、SQLyog等也可以)
**留意:**衔接不上往往是驱动的疑问,把对应的驱动下载好即可
新建表
新建字段
参与数据
留意
:参与成功后须要提交
- 参与的快捷键:alt+insert
- 提交的快捷键:ctrl+enter
四、搭建SpringBoot名目
1.创立名目
2. 勾选会用到的依赖
3.名目刚创立好时的结构(图片是拷贝的他人的,所以名目名不分歧,别在意,重点关注名目结构即可)
4.templates文件下新建index.html页面,作为启动的初始页面
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Hello</title>
</head>
<body>
SpringBoot 繁难启动页面
</body>
</html>
5. 在com.susu.testsimplespringboot下新建controller文件夹,在controller文件夹下建一个繁难的LoginController类;(Controller类要参与@Controller注解,名目启动时,SpringBoot会智能扫描加载Controller)
package com.susu.testsimplespringboot;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;/*** @ClassName HelloController* @Description TODO* @Author susu* @Date 2023/4/9 15:53* @Version 1.0*/
@Controller
public class HelloController {@RequestMapping("/index")public String sayHello() {return "index";}
}
6.在resources文件夹下application中先性能DataSource基本消息
application文件有两种文件格局,一种是以**.properties 为后缀,一种是以 .yml**为后缀的,两种性能模式略有差异,概略可参考:https://blog.csdn.net/qq_29648651/article/details/78503853;在这我是用.yml后缀的文件格局。右键application文件选用Refact,选用Rename,将后缀改为yml;
spring:>7. 运转名目TestSimpleSpringBootApplication.java(图片是拷贝的,所以文件名不分歧,别在意,重点关注启动类没动过,间接启动即可)
8.在阅读器中输入localhost:8080,回车显示初始的index界面
9. SpringBoot 名目大略可以分为以下四层
- mapper层(dao层)
- service层(包括service接口、成功类)
- controller层(web层)
10.最终的名目结构
11 名目代码展现
(1)在application性能文件中参与:数据库性能、MyBatis性能:
spring:alt="在这里拔出图片形容" />
留意!!!
-
namespace、id的属性值
namespace:mapper接口名;
id:mapper接口中形象方法的名字
-
mybatis映射文件的一些技术点可参考上方的博文
https://blog.csdn.net/zxdspaopao/article/details/112919320
(6)service接口
package com.susu.testsimplespringboot.service;import com.susu.testsimplespringboot.pojo.UserLogin;/*** @ClassName UserService* @Description TODO* @Author susu* @Date 2023/4/9 16:27* @Version 1.0*/
public interface UserService {public abstract UserLogin loginCheck(String userAccount, String userPwd);}
(6)service成功类
package com.susu.testsimplespringboot.serviceImpl;import com.susu.testsimplespringboot.DTO.UserLoginDTO;
import com.susu.testsimplespringboot.service.UserService;
import com.susu.testsimplespringboot.mapper.UserMapper;
import com.susu.testsimplespringboot.pojo.UserLogin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** @ClassName UserServiceImpl* @Description TODO* @Author susu* @Date 2023/4/9 16:37* @Version 1.0*/
@Service
public class UserServiceImpl implements UserService {@AutowiredUserMapper userMapper;@Overridepublic UserLogin loginCheck(String userAccount, String userPwd) {UserLoginDTO userLoginDTO = userMapper.selectUserInfo(userAccount, userPwd);UserLogin userLogin = new UserLogin();if (userLoginDTO != null) {userLogin.setUserAccount(userLoginDTO.getUserAccount());userLogin.setUserPwd(userLoginDTO.getUserPwd());}return userLogin;}
}
(7)到此时,可以在测试类测试下Mapper层能否可以反常失掉数据
package com.susu.testsimplespringboot;import com.susu.testsimplespringboot.pojo.UserLogin;
import com.susu.testsimplespringboot.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class TestSimpleSpringBootApplicationTests {@AutowiredUserService userService;@Testvoid contextLoads() {UserLogin userLogin = userService.loginCheck("huahua", "123");System.out.println(userLogin);}}
(8)controller
package com.susu.testsimplespringboot.controller;import com.susu.testsimplespringboot.DTO.UserLoginDTO;
import com.susu.testsimplespringboot.pojo.UserLogin;
import com.susu.testsimplespringboot.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;/*** @ClassName LoginController* @Description TODO* @Author susu* @Date 2023/4/9 16:27* @Version 1.0*/
@Controller
//@ResponseBody
public class LoginController {@AutowiredUserService userService;/*** @param testGetStaticSource* @param index* @return*/@RequestMapping("{testGetStaticSource}/{index}")public String getStaticSource(@PathVariable String testGetStaticSource, @PathVariable String index) {return testGetStaticSource + "/" + index;}@GetMapping(value = "login")public String login() {return "login";}@GetMapping(value = "loginIn")public String loginGet(String userAccount, String userPwd) {UserLogin user1 = userService.loginCheck(userAccount, userPwd);if (user1 != null) {return "success";} else {return "error";}}@PostMapping(value = "loginIn")public String loginPost(UserLoginDTO userLoginDTO) {UserLogin user1 = userService.loginCheck(userLoginDTO.getUserAccount(), userLoginDTO.getUserPwd());if (user1 != null) {return "success";} else {return "error";}}}
留意:
1.@RequestMapping,任何恳求模式都可以
2.@GetMapping,只能Get恳求(前端恳求模式如下所示)
3.@PostMapping,只能Post恳求
3.1 用postman发送post恳求参考博文
3.2前端json格局报文:
{
"userAccount":"huahua",
"userPwd":"123"
}
4.测试了失掉templates文件下的静态资源
@RequestMapping("{testGetStaticSource}/{index}")public String getStaticSource(@PathVariable String testGetStaticSource, @PathVariable String index) {return testGetStaticSource + "/" + index;}
细节可以参考如下两篇博文
https://blog.csdn.net/zhuzicc/article/details/105465814#%E9%97%AE%E9%A2%98%E5%8E%9F%E5%9B%A0
https://blog.csdn.net/weixin_53106424/article/details/123502419
此处触及springmvc的原理:
可以参考博文:
https://blog.csdn.net/weixin_53106424/article/details/115309018?spm=1001.2014.3001.5502
(9)几个静态文件
9.1 login.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>login</title>
</head>
<body>
<form role="form" action="/loginIn" method="post">账号:<input type="text" id="userAccount" name="userAccount"><br>明码:<input type="password" id="userPwd" name="userPwd"><br><input type="submit" id="login" value="login">
</form>
</body>
</html>
9.2 success.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>success</title>
</head>
<body>
<h1>登录成功</h1>
</body>
</html>
9.3 error.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>eoor</title>
</head>
<body>
<h1>登录失败</h1>
</body>
</html>