• 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

  • 相关阅读:
    LintCode A+B问题
    LintCode 斐波纳契数列
    LintCode 删除链表中的元素
    LintCode 整数排序
    c++ lower_bound upper_bound
    259. 3Sum Smaller
    86. Partition List
    209. Minimum Size Subarray Sum
    11. Container With Most Water
    360. Sort Transformed Array
  • 原文地址:https://www.cnblogs.com/sglx/p/16082892.html
Copyright © 2020-2023  润新知