java后端用户管理接口实现

一. 内容简介

实现java后端用户管理接口,数据库使用msyql。

二. 软件环境

2.1 java 1.8

2.2 mysql Ver 8.0.13 for Win64 on x86_64 (MySQL Community Server - GPL)

2.3 IDEA ULTIMATE 2019.3

2.4 Visual Studio Code 1.75.0

2.5 SQLyog v12.09(64 bit)

2.6 PDMan-win64_v2.1.6

下载链接 https://pan.baidu.com/s/1OpfQcgpijzYwHg2H-PxKPQ?pwd=1234

三.主要流程

3.1 创建数据库,创建数据表,添加数据

3.2 开始编写接口,并测试

四.具体步骤

4.1 创建数据库,创建数据表,添加数据

用pdman创建用户表结构,
在这里插入图片描述
然后pdman可以生成对应语言的代码
在这里插入图片描述
对应的mysql代码为

CREATE TABLE users(
    user_id VARCHAR(64) NOT NULL   COMMENT '主键id 用户id' ,
    username VARCHAR(32) NOT NULL   COMMENT '用户名 用户名' ,
    password VARCHAR(64) NOT NULL   COMMENT '密码 密码' ,
    nickname VARCHAR(32)    COMMENT '昵称 昵称' ,
    realname VARCHAR(128)    COMMENT '真实姓名 真实姓名' ,
    user_img VARCHAR(1024) NOT NULL   COMMENT '头像 头像' ,
    user_mobile VARCHAR(32)    COMMENT '手机号 手机号' ,
    user_email VARCHAR(32)    COMMENT '邮箱地址 邮箱地址' ,
    user_sex CHAR(1)    COMMENT '性别 M(男) or F(女)' ,
    user_birth DATE    COMMENT '生日 生日' ,
    user_regtime DATETIME NOT NULL   COMMENT '注册时间 创建时间' ,
    user_modtime DATETIME NOT NULL   COMMENT '更新时间 更新时间' ,
    PRIMARY KEY (user_id)
) COMMENT = '用户 ';
# comment为注释

放入SQLyog 运行后
在这里插入图片描述
然后添加数据

INSERT INTO `users` VALUES (1, 'zhangsan', 'f379eaf3c831b04de153469d1bec345e', NULL, NULL, 'img/default.png', NULL, NULL, NULL, NULL, '2021-04-15 16:10:53', '2021-04-15 16:10:53');
INSERT INTO `users` VALUES (2, 'aaaa', '1111', NULL, NULL, 'img/default.png', NULL, NULL, NULL, NULL, '2021-04-16 11:10:01', '2021-04-16 11:10:01');
INSERT INTO `users` VALUES (3, 'wahaha', '4297f44b13955235245b2497399d7a93', NULL, NULL, 'img/default.png', NULL, NULL, NULL, NULL, '2021-04-16 15:36:52', '2021-04-16 15:36:52');
INSERT INTO `users` VALUES (4, 'heihei', '4297f44b13955235245b2497399d7a93', '二狗', NULL, 'img/default.png', NULL, NULL, NULL, NULL, '2021-04-16 15:38:49', '2021-04-16 15:38:49');
INSERT INTO `users` VALUES (5, 'Tony', '4297f44b13955235245b2497399d7a93', '托尼', NULL, 'img/default.png', NULL, NULL, NULL, NULL, '2021-04-23 10:25:04', '2021-04-23 10:25:04');
INSERT INTO `users` VALUES (6, 'hanmeimei', 'f379eaf3c831b04de153469d1bec345e', NULL, NULL, 'img/default.png', NULL, NULL, NULL, NULL, '2021-04-23 10:30:52', '2021-04-23 10:30:52');
INSERT INTO `users` VALUES (7, 'lilei123', '4297f44b13955235245b2497399d7a93', NULL, NULL, 'img/default.png', NULL, NULL, NULL, NULL, '2021-04-23 10:33:03', '2021-04-23 10:33:03');
INSERT INTO `users` VALUES (8, 'tom123123', '4297f44b13955235245b2497399d7a93', NULL, NULL, 'img/default.png', NULL, NULL, NULL, NULL, '2021-04-23 10:34:49', '2021-04-23 10:34:49');

4.2 开始编写接口,并测试

4.2.1 更改mybatis配置信息

第一步先更改mapper中的application.yml,链接上自己数据库
在这里插入图片描述

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/server_java?characterEncoding=utf-8
      username: root
      password: 1234
mybatis:
  mapper-locations: classpath:mappers/*Mapper.xml
  type-aliases-package: com.qfedu.fmmall.entity

logging:
  level:
    io.swagger.models.parameters.AbstractSerializableParameter: error
4.2.2 实现DAO操作

有了数据表以后,DAO操作就根据数据表自动生成,这里使用的是tkMapper插件,第一就是添加依赖

<dependency>
     <groupId>tk.mybatis</groupId>
     <artifactId>mapper</artifactId>
     <version>3.4.4</version>
</dependency>

然后在resources文件下,创建tpMapper的配置文件,修改为自己的就可以了。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
    <!-- 引入数据库连接配置 -->
    <!--    <properties resource="jdbc.properties"/>-->
    <context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>
        <!-- 配置 GeneralDAO -->
        <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
            <property name="mappers" value="com.qfedu.fmmall.general.GeneralDAO"/>
        </plugin>
        <!-- 配置数据库连接 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/server_java"
                        userId="root" password="admin123">
        </jdbcConnection>
        <!-- 配置实体类存放路径 -->
        <javaModelGenerator targetPackage="com.qfedu.fmmall.entity" targetProject="src/main/java"/>
        <!-- 配置 XML 存放路径 -->
        <sqlMapGenerator targetPackage="/" targetProject="src/main/resources/mappers"/>
        <!-- 配置 DAO 存放路径 -->
        <javaClientGenerator targetPackage="com.qfedu.fmmall.dao" targetProject="src/main/java" type="XMLMAPPER"/>
        <!-- 配置需要指定生成的数据库和表,% 代表所有表 -->
        <table tableName="shopping_cart"></table>
    </context>
</generatorConfiguration>

最后将配置文件添加到逆向工程的插件中

<configuration><configurationFile>${basedir}/src/main/resources/genetator/generatorConfig.xml</configurationFile>
</configuration>

最后在插件中运行即可,就可以自动生成实体类,以及dao。
在这里插入图片描述

4.2.2 实现service业务
package com.qfedu.fmmall.service.impl;

import com.qfedu.fmmall.dao.UsersMapper;
import com.qfedu.fmmall.entity.Users;
import com.qfedu.fmmall.service.UserService;
import com.qfedu.fmmall.utils.Base64Utils;
import com.qfedu.fmmall.utils.MD5Utils;
import com.qfedu.fmmall.vo.ResStatus;
import com.qfedu.fmmall.vo.ResultVO;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.security.SecurityProperties;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;

import java.util.Date;
import java.util.HashMap;
import java.util.List;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UsersMapper usersMapper;

    @Transactional
    public ResultVO userResgit(String name, String pwd) {
        synchronized (this) {
            //1.根据用户查询,这个用户是否已经被注册
            Example example = new Example(Users.class);
            Example.Criteria criteria = example.createCriteria();
            criteria.andEqualTo("username", name);
            List<Users> users = usersMapper.selectByExample(example);

            //2.如果没有被注册则进行保存操作
            if (users.size() == 0) {
                String md5Pwd = MD5Utils.md5(pwd);
                Users user = new Users();
                user.setUsername(name);
                user.setPassword(md5Pwd);
                user.setUserImg("img/default.png");
                user.setUserRegtime(new Date());
                user.setUserModtime(new Date());
                int i = usersMapper.insertUseGeneratedKeys(user);
                if (i > 0) {
                    return new ResultVO(ResStatus.OK, "注册成功!", user);
                } else {
                    return new ResultVO(ResStatus.NO, "注册失败!", null);
                }
            } else {
                return new ResultVO(ResStatus.NO, "用户名已经被注册!", null);
            }
        }
    }

    @Override
    public ResultVO checkLogin(String name, String pwd) {
        Example example = new Example(Users.class);
        Example.Criteria criteria = example.createCriteria();
        criteria.andEqualTo("username", name);
        List<Users> users = usersMapper.selectByExample(example);

        if(users.size() == 0){
            return new ResultVO(ResStatus.NO,"登录失败,用户名不存在!",null);
        }else{
            String md5Pwd = MD5Utils.md5(pwd);
            if(md5Pwd.equals(users.get(0).getPassword())){
                return new ResultVO(ResStatus.OK,"登录成功,密码正确!",users.get(0));
            }else{
                return new ResultVO(ResStatus.NO,"登录失败,密码错误!",null);
            }
        }
    }
}

由于才用前后端分离开发,用户认证将使用jwt-token实现用户认证,同时也将使用jwt拦截器功能对访问先进行登录验证。

 public ResultVO checkLogin(String name, String pwd) {
        Example example = new Example(Users.class);
        Example.Criteria criteria = example.createCriteria();
        criteria.andEqualTo("username", name);
        List<Users> users = usersMapper.selectByExample(example);

        if(users.size() == 0){
            return new ResultVO(ResStatus.NO,"登录失败,用户名不存在!",null);
        }else{
            String md5Pwd = MD5Utils.md5(pwd);
            if(md5Pwd.equals(users.get(0).getPassword())){
                //如果登录验证成功,则需要生成令牌token(token就是按照特定规则生成的字符串)
                //使用jwt规则生成token字符串
                JwtBuilder builder = Jwts.builder();
                
                HashMap<String,Object> map = new HashMap<>();
                map.put("key1","value1");
                map.put("key2","value2");

                String token = builder.setSubject(name)                     //主题,就是token中携带的数据
                        .setIssuedAt(new Date())                            //设置token的生成时间
                        .setId(users.get(0).getUserId() + "")               //设置用户id为token  id
                        .setClaims(map)                                     //map中可以存放用户的角色权限信息
                        .setExpiration(new Date(System.currentTimeMillis() + 24*60*60*1000)) //设置token过期时间
                        .signWith(SignatureAlgorithm.HS256, "QIANfeng6666")     //设置加密方式和加密密码
                        .compact();

                return new ResultVO(ResStatus.OK,token,users.get(0));
            }else{
                return new ResultVO(ResStatus.NO,"登录失败,密码错误!",null);
            }
        }
    }
4.2.3 完成api接口

在api文件中创建UserController文件,完成接口创建,前边的注释主要让swagger生成接口文档

package com.qfedu.fmmall.controller;

import com.qfedu.fmmall.entity.Users;
import com.qfedu.fmmall.service.UserService;
import com.qfedu.fmmall.utils.Base64Utils;
import com.qfedu.fmmall.vo.ResStatus;
import com.qfedu.fmmall.vo.ResultVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.catalina.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

@RestController
@RequestMapping("/user")
@Api(value = "提供用户的登录和注册接口",tags = "用户管理")
@CrossOrigin
public class UserController {

    @Resource
    private UserService userService;
    private Logger logger = LoggerFactory.getLogger(UserController.class);

    @ApiOperation("用户登录接口")
    @ApiImplicitParams({
            @ApiImplicitParam(dataType = "string",name = "username", value = "用户登录账号",required = true),
            @ApiImplicitParam(dataType = "string",name = "password", value = "用户登录密码",required = true)
    })
    @GetMapping("/login")
    public ResultVO login(@RequestParam("username") String name,
                          @RequestParam(value = "password") String pwd){
        ResultVO resultVO = userService.checkLogin(name, pwd);
        logger.info(resultVO.getMsg());
        return resultVO;
    }



    @ApiOperation("用户注册接口")
    @ApiImplicitParams({
            @ApiImplicitParam(dataType = "string",name = "username", value = "用户注册账号",required = true),
            @ApiImplicitParam(dataType = "string",name = "password", value = "用户注册密码",required = true)
    })
    @PostMapping("/regist")
    public ResultVO regist(@RequestBody Users user){
        ResultVO resultVO = userService.userResgit(user.getUsername(), user.getPassword());
        return resultVO;
    }

    @ApiOperation("校验token是否过期接口")
    @GetMapping("/check")
    public ResultVO userTokencheck(@RequestHeader("token") String token){
        return new ResultVO(ResStatus.OK,"success",null);
    }

}

同时在api文件下创建jwt拦截器,对有需要的访问进行登录认证,

package com.qfedu.fmmall.interceptor;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.qfedu.fmmall.vo.ResStatus;
import com.qfedu.fmmall.vo.ResultVO;
import io.jsonwebtoken.*;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@Component
public class CheckTokenInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String method = request.getMethod();
        if("OPTIONS".equalsIgnoreCase(method)){
            return true;
        }
        String token = request.getHeader("token");
        if(token == null){
            ResultVO resultVO = new ResultVO(ResStatus.LOGIN_FAIL_NOT, "请先登录!", null);
            doResponse(response,resultVO);
        }else{
            try {
                JwtParser parser = Jwts.parser();
                parser.setSigningKey("QIANfeng6666"); //解析token的SigningKey必须和生成token时设置密码一致
                //如果token正确(密码正确,有效期内)则正常执行,否则抛出异常
                Jws<Claims> claimsJws = parser.parseClaimsJws(token);
                return true;
            }catch (ExpiredJwtException e){
                ResultVO resultVO = new ResultVO(ResStatus.LOGIN_FAIL_OVERDUE, "登录过期,请重新登录!", null);
                doResponse(response,resultVO);
            }catch (UnsupportedJwtException e){
                ResultVO resultVO = new ResultVO(ResStatus.LOGIN_FAIL_NOT, "Token不合法,请自重!", null);
                doResponse(response,resultVO);
            }catch (Exception e){
                ResultVO resultVO = new ResultVO(ResStatus.LOGIN_FAIL_NOT, "请先登录!", null);
                doResponse(response,resultVO);
            }
        }
        return false;
    }

    private void doResponse(HttpServletResponse response,ResultVO resultVO) throws IOException {
        response.setContentType("application/json");
        response.setCharacterEncoding("utf-8");
        PrintWriter out = response.getWriter();
        String s = new ObjectMapper().writeValueAsString(resultVO);
        out.print(s);
        out.flush();
        out.close();
    }
}

设置需要拦截的访问

package com.qfedu.fmmall.config;

import com.qfedu.fmmall.interceptor.CheckTokenInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

    @Autowired
    private CheckTokenInterceptor checkTokenInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(checkTokenInterceptor)
                .addPathPatterns("/shopcart/**")
                .addPathPatterns("/orders/**")
                .addPathPatterns("/useraddr/**")
                .addPathPatterns("/user/check");
    }
}

4.2.4 测试

在这里插入图片描述

五.参考

千锋教育最强Java项目《锋迷商城》
  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
简单性 Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C++语言中许多可用的特征去掉了,这些特征是一般程序员很少使用的。例如,Java不支持goto语句,代之以提供break和continue语句以及异常处理。Java还剔除了C++的操作符过载(overload)和多继承特征,并且不使用主文件,免去了预处理程序。因为Java没有结构,数组和串都是对象,所以不需要指针。Java能够自动处理对象的引用和间接引用,实现自动的无用单元收集,使用户不必为存储管理问题烦恼,能更多的时间和精力花在研发上。 面向对象 Java是一个面向对象的语言。对程序员来说,这意味着要注意其中的数据和操纵数据的方法(method),而不是严格地用过程来思考。在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在这个类层次体系中有一个根类,它是具有一般行为的类。Java程序是用类来组织的。 Java还包括一个类的扩展集合,分别组成各种程序包(Package),用户可以在自己的程序中使用。例如,Java提供产生图形用户接口部件的类(java.awt包),这里awt是抽象窗口工具集(abstract windowing toolkit)的缩,处理输入输出的类(java.io包)和支持网络功能的类(java.net包)。 分布性 Java设计成支持在网络上应用,它是分布式语言。Java既支持各种层次的网络连接,又以Socket类支持可靠的流(stream)网络连接,所以用户可以产生分布式的客户机和服务器。 网络变成软件应用的分布运载工具。Java程序只要编一次,就可到处运行。 编译和解释性 Java编译程序生成字节码(byte-code),而不是通常的机器码。Java字节码提供对体系结构中性的目标文件格式,代码设计成可有效地传送程序到多个平台。Java程序可以在任何实现Java解释程序和运行系统(run-time system)的系统上运行。 在一个解释性的环境中,程序开发的标准“链接”阶段大大消失了。如果说Java还有一个链接阶段,它只是把新类装进环境的过程,它是增量式的、轻量级的过程。因此,Java支持快速原型和容易试验,它将导致快速程序开发。这是一个与传统的、耗时的“编译、链接和测试”形成鲜明对比的精巧的开发过程。 稳健性 Java原来是用作编消费类家用电子产品软件的语言,所以它是被设计成高可靠和稳健软件的。Java消除了某些编程错误,使得用它可靠软件相当容易。 Java是一个强类型语言,它允许扩展编译时检查潜在类型不匹配问题的功能。Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。 可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重存储和讹误数据的可能性。类似地,Java自动的“无用单元收集”预防存储漏泄和其它有关动态存储分配和解除分配的有害错误。Java解释程序也执行许多运行时的检查,诸如验证所有数组和串访问是否在界限之内。 异常处理是Java中使得程序更稳健的另一个特征。异常是某种类似于错误的异常条件出现的信号。使用try/catch/finally语句,程序员可以找到出错的处理代码,这就简化了出错处理和恢复的任务。
随着Java技术的广泛应用,越来越多的计算机相关专业学生选择Java作为毕业设计的编程语言。为了帮助大家更好地完成毕业设计,我们特地整理了一系列Java毕业设计项目参考资源,包括源代码、MD文档、笔记等等,希望能对您的学习与研究提供有力支持。 项目源代码:涵盖了多个Java毕业设计项目的完整代码,包括登录注册、用户管理、数据增删改查等功能模块的实现。这些代码均经过严格测试,可直接运行,方便您快速了解项目结构和实现细节。 MD文档:详细介绍了每个项目的需求分析、系统设计、系统实现和测试等环节,让您能够全面了解项目的开发流程和关键技术。此外,还附带了详细的API文档,方便您查阅各个功能模块的接口和参数说明。 笔记资料:整理了Java毕业设计中常见的问题和解决方案,包括数据库设计、界面美化、性能优化等方面的技巧。这些笔记资料均由经验丰富的程序员撰,可为您提供宝贵的经验分享和指导。 视频教程:为了帮助您更好地学习和理解Java毕业设计的实现过程,我们还提供了多个视频教程,由专业讲师详细讲解各个项目的开发过程和技术要点。通过观看这些视频教程,您可以更加深入地掌握Java编程和项目开发的技能。 总之,本资源包内容丰富、实用性强,是您完成Java毕业设计的必备宝典。无论您是即将毕业的本科生还是研究生,都值得拥有这份宝贵的参考资料。在此,我们诚挚地邀请您加入 平台,与众多技术同行一起交流学习,共同进步!随着Java技术的广泛应用,越来越多的计算机相关专业学生选择Java作为毕业设计的编程语言。为了帮助大家更好地完成毕业设计,我们特地整理了一系列Java毕业设计项目参考资源,包括源代码、MD文档、笔记等等,希望能对您的学习与研究提供有力支持。 项目源代码:涵盖了多个Java毕业设计项目的完整代码,包括登录注册、用户管理、数据增删改查等功能模块的实现。这些代码均经过严格测试,可直接运行,方便您快速了解项目结构和实现细节。 MD文档:详细介绍了每个项目的需求分析、系统设计、系统实现和测试等环节,让您能够全面了解项目的开发流程和关键技术。此外,还附带了详细的API文档,方便您查阅各个功能模块的接口和参数说明。 笔记资料:整理了Java毕业设计中常见的问题和解决方案,包括数据库设计、界面美化、性能优化等方面的技巧。这些笔记资料均由经验丰富的程序员撰,可为您提供宝贵的经验分享和指导。 视频教程:为了帮助您更好地学习和理解Java毕业设计的实现过程,我们还提供了多个视频教程,由专业讲师详细讲解各个项目的开发过程和技术要点。通过观看这些视频教程,您可以更加深入地掌握Java编程和项目开发的技能。 总之,本资源包内容丰富、实用性强,是您完成Java毕业设计的必备宝典。无论您是即将毕业的本科生还是研究生,都值得拥有这份宝贵的参考资料。在此,我们诚挚地邀请您加入 平台,与众多技术同行一起交流学习,共同进步!随着Java技术的广泛应用,越来越多的计算机相关专业学生选择Java作为毕业设计的编程语言。为了帮助大家更好地完成毕业设计,我们特地整理了一系列Java毕业设计项目参考资源,包括源代码、MD文档、笔记等等,希望能对您的学习与研究提供有力支持。 项目源代码:涵盖了多个Java毕业设计项目的完整代码,包括登录注册、用户管理、数据增删改查等功能模块的实现。这些代码均经过严格测试,可直接运行,方便您快速了解项目结构和实现细节。 MD文档:详细介绍了每个项目的需求分析、系统设计、系统实现和测试等环节,让您能够全面了解项目的开发流程和关键技术。此外,还附带了详细的API文档,方便您查阅各个功能模块的接口和参数说明。 笔记资料:整理了Java毕业设计中常见的问题和解决方案,包括数据库设计、界面美化、性能优化等方面的技巧。这些笔记资料均由经验丰富的程序员撰,可为您提供宝贵的经验分享和指导。 视频教程:为了帮助您更好地学习和理解Java毕业设计的实现过程,我们还提供了多个视频教程,由专业讲师详细讲解各个项目的开发过程和技术要点。通过观看这些视频教程,您可以更加深入地掌握Java编程和项目开发的技能。 总之,本资源包内容丰富、实用性强,是您完成Java毕业设计的必备宝典。无论您是即将毕业的本科生还是研究生,都值得拥有这份宝贵的参考资料。在此,我们诚挚地邀请您加入 平台,与众多技术同行一起交流学习,共同进步!随着Java技术的广泛应用,越来越多的计算机相关专业学生选择Java作为毕业设计的编程语言。为了帮助大家更好地完成毕业设计,我们特地整理了一系列Java毕业设计项目参考资源,包括源代码、MD文档、笔记等等,希望能对您的学习与研究提供有力支持。 项目源代码:涵盖了多个Java毕业设计项目的完整代码,包括登录注册、用户管理、数据增删改查等功能模块
微信小程序开发是一种基于微信平台的应用开发,可以使用多种语言进行后端开发,包括JavaJava是一种稳定、可靠、跨平台的编程语言,非常适合用于开发后端管理系统。 下面是一个简要的微信小程序开发java后端管理教程: 1. 确定需求:首先要明确管理系统的功能需求,例如用户管理、权限管理、数据展示等。 2. 架构设计:设计合理的系统架构,确定数据库的表结构,以及后端接口的设计。 3. 创建项目:使用Java开发工具,如Eclipse或IntelliJ IDEA,创建一个Java项目。 4. 引入依赖:通过Maven或Gradle等构建工具,引入相关依赖库,例如Spring Boot、MyBatis等。 5. 编实体类:根据需求设计数据库表结构,创建相应的实体类。 6. 编DAO层:使用MyBatis等持久层框架,编数据库交互的DAO层代码。 7. 编Service层:编处理业务逻辑的Service层代码,并调用相应的DAO层代码。 8. 设计接口:使用Spring MVC等Web框架,设计并编后端接口,用于与前端小程序进行数据交互。 9. 实现接口:根据接口设计,在Controller层编接口实现代码,包括数据的查询、增、删、改等操作。 10. 部署项目:将项目打包成可执行的jar文件,使用服务器软件(如Tomcat)进行部署。 11. 调试测试:进行接口的调试和测试,确保各项功能正常。 12. 上线发布:将完成的后端管理系统发布到线上服务器,供用户使用。 以上是一个简要的微信小程序开发java后端管理教程,具体的开发步骤还需要根据实际需求和项目情况进行调整和完善。同时,还需了解微信小程序开发的相关文档和API,以便实现与微信平台的交互。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值