JAVA从入门到出家-致前端小伙伴

一、引言

  这篇博文送给那些想要学习后端,又不知从何入手的前端小伙伴。

二、数据库

  后端主要跟数据打交道,所以第一关就是数据库,推荐使用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

posted @ 2022-04-01 11:20  上官兰夏  阅读(126)  评论(1)    收藏  举报