一、引言
这篇博文送给那些想要学习后端,又不知从何入手的前端小伙伴。
二、数据库
后端主要跟数据打交道,所以第一关就是数据库,推荐使用mysql,这个也是市面上的主流数据库。
1、第一步安装数据库,至于怎么安装,百度呀一度一大把
2、安装mysql客户端管理工具,推荐Navicat Premium这个工具,好用!
3、使用客户端连接mysql,自行度娘,然后快快乐乐的玩一下增删改查,玩明白了,再接着往下看。
三、JDK下载安装
JDK就是java开发的核心开发工具了,推荐下载1.8的版本,自行百度下载安装去吧,又给度度打了个广告,害。
四、Maven下载
maven是后端项目的管理工具,自行下载安装,也可以不下载,后续可以使用 idea 自带的。但是要注意配置maven仓库之类的,所以推荐自己下载安装一个,推荐3.5系列的版本。
五、下载后端编码工具
推荐使用 IntelliJ IDEA,简称 idea,自行百度下载安装,使用社区版就可以了,功能差不了多少,再说你现在也玩不了这么多,哈哈。
1、打开idea,配置JDK
2、配置Maven仓库
3、安装插件,Free Mybatis plugin,Lombok,可以百度idea如何安装插件,这里不贴图了
六、构建一个后端应用
现在基本上是SpringBoot框架一统天下了,我们就用他来构建一个后端服务吧。
1、file -> new -> project -> 选择maven项目 -> 勾上Create from archetype -> 选择下图中的选项 -> next
2、修改项目的名称,目录等信息
3、选择maven仓库
4、点击finish,就可以创建好一个项目了,接下来就是完善了
七、完善项目
1、添加jar包,可以理解为前端的一些别人开发好的js库,我们直接拿来使用。点开pom.xml文件,删掉我们不需要的,添加我们需要的,下面是一份我整理的。
<?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.ren</groupId> <artifactId>demo</artifactId> <version>1.0-SNAPSHOT</version> <name>demo</name> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.5.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.2</version> <optional>true</optional> </dependency> <!-- orm --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.1.5</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>4.1.5</version> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.7</version> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.7</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>3.4.3</version> </dependency> </dependencies> </project>
2、添加配置文件
在main目录下,新建一个resources文件夹,再在resources文件夹下新建一个application.properties文件(有些开发可能会用其他后缀的文件,比如:.yml类型的文件,后续自己再学),完善配置文件,我贴出完整的
#服务的端口号 server.port=8080 #应用名称 spring.application.name=demo #数据库连接 #用户名 spring.datasource.username = root #密码 spring.datasource.password = Zyli*M1fX%09q #127.0.0.1 连接数据库的ip,3306是端口,nacos是自己建的库名,如果用的是自己本地的数据库ip和端口都不用修改 spring.datasource.url = jdbc:mysql://127.0.0.1:3306/nacos?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver spring.datasource.type = com.zaxxer.hikari.HikariDataSource spring.datasource.hikari.minimum-idle = 5 spring.datasource.hikari.maximum-pool-size = 15 spring.datasource.hikari.auto-commit = true spring.datasource.hikari.idle-timeout = 30000 spring.datasource.hikari.pool-name = DatebookHikariCP spring.datasource.hikari.max-lifetime = 1800000 spring.datasource.hikari.connection-timeout = 30000 spring.datasource.hikari.connection-test-query = SELECT 1 #mapper映射文件路径 mybatis.mapper-locations = classpath:mapper/*.xml mybatis.mapper = com.karle.tk.TkMapper mybatis.identity = MYSQL pagehelper.helperDialect = mysql pagehelper.reasonable = false pagehelper.supportMethodsArguments = true pagehelper.params = count=countSql pagehelper.pageSize = 10
3、在mysql新建一张表,表名定为user,表有3个字段 id,name,password,我贴出语句
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `password` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;
新增一条数据,id为1,name为react,password为123456
4、在项目结构目录下(我的是com.ren)新建五个文件夹controller,service,dao,models,web,后端的架构现在基本上都是三层架构了。
第一层控制层,也就是controller文件夹,简单理解就是这个包下定义的类,主要和前端请求的url相关;
第二层逻辑层,也就是service文件夹,负责写业务逻辑,定义的类大都以service结尾;
第三层ORM,也就是dao文件夹,负责通过sql从数据库查询数据。
models文件夹主要就是定义一些实体对象,例如:我们在数据库建了一张表user,那么我们要在models目录下定义一个User实体。
web文件夹可以定义一些拦截器或者web应用配置等,可以用来处理跨域等问题。
5、在web文件夹下新建两个class(在文件夹上右键-> new ->java class),一个LoginInterceptor,一个WebMvcConfig,后面有的内容我就不贴了,后面我会把整个项目上传到gitee,自行下载copy
6、我们就模拟一下登录流程,在models文件夹下新建model,req,resp文件夹,在model文件夹下新建User类,在req文件夹下新建UserReq类,在resp文件夹下新建Response类
7、在controller文件夹下新建LoginController类,定义两个方法登录方法和通过id查询用户信息的方法,一开始就是下面这样:
@RestController @RequestMapping("/user") public class LoginController { /** * @author canove * @date 2022/4/1 10:28 * @description 登录接口 */ @PostMapping("/login") public Response<UserReq> login(@RequestBody UserReq req){ return null; } /** * @author canove * @date 2022/4/1 10:29 * @description 根据id查询用户信息 */ @GetMapping("/id") public Response<User> getById(@RequestParam String id){ return null; } }
可以看到类上@RequestMapping这个东西,括号里面对应的就是前端请求的后缀了,对应到方法上的注解@PostMapping和@GetMapping,也就是所谓的get和post请求的区别,所以完整的前端访问路径,登录接口就是http://ip:port/user/login,根据id查询用户信息就是http://ip:port/user/id?id=1。
8、写我们的业务逻辑,在service文件夹下创建一个UserService接口(现在不知道接口是啥也没关系,先创建),再在service文件夹下创建一个impl文件夹,在impl文件下创建UserServiceImpl类,此类实现UserService接口。
9、在UserService接口中定义两个方法,如下
public interface UserService { boolean loginCheck(UserReq req); User getById(String id); }
10、在UserServiceImpl中写具体方法的实现逻辑
@Service public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Override public boolean loginCheck(UserReq req) { // 从数据库中查询用户信息 User user = userDao.getByName(req.getName()); // 查询出来的用户为null 或者 查询出来的用户密码 和 用户输入的密码不一致 返回false if(null == user || user.getPassword().equals(user.getPassword())){ return false; } return true; } @Override public User getById(String id) { // 根据用户id查询用户信息 return userDao.getById(id); } }
我简单解释一下第一个方法,首先通过userDao.getByName(req.getName);这个方法,根据用户名从数据库查询出用户的信息,此时有两种情况,我们可能查出来的用户信息是null,还有一种情况查出来的用户信息中的密码跟前端传过来的不一致。这两种情况都会返回false,如果不是这两种情况就会返回true。
11、上面用到了一个接口userDao,这个接口就是我们去访问数据库的关键了,首先在dao文件夹新建一个UserDao接口,再在接口中定义两个方法,如下
@Repository public interface UserDao { User getByName(@Param("name") String name); User getById(@Param("id") String id); }
12、在resources文件夹下,新建mapper文件夹,然后在mapper文件夹下,新建UserMapper.xml文件,内容如下
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ren.dao.UserDao"> <select id="getByName" resultType="com.ren.models.model.User"> select id,name,password from user where name = #{name} </select> <select id="getById" resultType="com.ren.models.model.User"> select id,name,password from user where id = #{id} </select> </mapper>
是不是看到了熟悉的sql语句?
13、我们补全LoginController类中的方法逻辑,如下
@RestController @RequestMapping("/user") public class LoginController { @Autowired private UserService userService; /** * @author canove * @date 2022/4/1 10:28 * @description 登录接口 */ @PostMapping("/login") public Response<UserReq> login(@RequestBody UserReq req){ boolean flag = userService.loginCheck(req); // 根据方法返回的结果 flag 到底是true 还是 false 来决定是否登录成功 if(flag){ // flag 为true 登录成功 直接return return Response.ok(req); } return Response.faile(null); } /** * @author canove * @date 2022/4/1 10:29 * @description 根据id查询用户信息 */ @GetMapping("/id") public Response<User> getById(@RequestParam String id){ return Response.ok(userService.getById(id)); } }
14、进入到App类,一般建好项目都会附带建好,如果没有就在com.ren的目录下新建一个App类,然后进行改造,如下
@MapperScan("com.ren.dao") @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class,args); } }
@MapperScan后面跟的就是我们写dao层映射的路径
15、在main方法上面点击,右键找到如下的运行按钮,将项目启动
我们就完成了简单的登录校验流程了,前端小伙伴可以自己写个登录页面验证了。
八、总结
我们通过登录流程简单模拟了一下后端的开发过程,实际上的开发过程,会有很多要考虑的地方,这里仅仅是个入门。看到这里,你应该还会有很多的疑惑,不知道怎么去实现一个其他的业务?这里我给出一个学习路径吧。
1、从各大视频网站上找java基础的视频开始学习,例如:B站,腾讯课堂,找一份免费视频就好,学习一下java基础
2、基础学完之后,学习springboot,mybatis框架(其实还有spring,springmvc),不要找那些原理性的视频,找一些实战性的视频学习,直到你能自己搭建出一个像上面这样的一个项目,并且可以写出其他业务为止
3、正常的后端还会用到分布式,网关,缓存,消息中间件等框架,这推荐spring cloud,zuul,redis和rabbitMq。
4、如果不满足使用,那么就自行去找后端学习视频吧,如果你能坚持到这一步,你已经是一个全栈工程师了,可以自己实现一个完整的项目了,后面的路自己走。
祝你成功!
项目源码:https://gitee.com/sglx666/demo.git