SpringBoot + MyBatis 结合 MVC框架设计 第2关:使用SpringBoot + MyBatis实现一个最简单的注册功能

28 篇文章 9 订阅
5 篇文章 1 订阅

目录

任务描述

相关知识

项目创建

MVC框架

使用MVC分层实现注册

编程要求

测试说明

参考代码


任务描述

本关任务:使用SpringBoot + MyBatis实现一个最简单的注册功能的小程序。

相关知识

为了完成本关任务,你需要掌握:1.如何搭建SpringBoot项目 2.如何分层实现注册。

项目创建

  1. maven构建项目:

    • 访问 http://start.spring.io/

    • 进入网址填好自己需要的包名和工具,比如webMySQL之类的;

    • 点击Generate Project下载项目压缩包;

    • 解压后,用Eclipse打开就行。

  2. Spring Boot的基础结构共三个文件:

    • src/main/java:程序开发以及主程序入口;

    • src/main/resources:配置文件;

    • src/test/java: 测试程序。

  3. Spring Boot的目录结构如下:

  1. net
  2. +- educoder
  3. +- Application.java
  4. |
  5. +- entity
  6. | +- TUser.java
  7. | +- Result.java
  8. |
  9. +- service
  10. | +- UserService.java
  11. |
  12. +- mapper
  13. | +- DemoMapper.java
  14. +- controller
  15. | +- DemoController.java
  16. |
  • Application.java 建议放到根目录下面,主要用于启动项目;
  • entity 目录主要用于实体(Entity);
  • mapper 层为数据访问层;
  • service 层主要是业务类代码;
  • controller 层负责页面访问控制。

MVC框架

在开始编写代码之前我们需要了解软件开发中一种常见的框架——MVC

MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:

  • Model(模型)表示应用程序核心(比如数据库记录列表)。
  • View(视图)显示数据(数据库记录)。
  • Controller(控制器)处理输入(写入数据库记录)。

这种模式有什么好处呢?

他的优势在于:

耦合性低;重用性高;生命周期成本低;部署块;可维护性高;有利软件工程化管理。

如何实现MVC框架呢?

其实我们已经做过一部分了,在之前的内容中,我们使用了ControllerController就是属于控制器,即C,使用的实体类其实就是模型层。

使用MVC分层实现注册

在之前我们都是在Controller中直接对数据库进行的操作,学习了MVC我们应该知道业务逻辑的处理应该单独成为一个模块,所以我们现在要将业务逻辑层的代码提取出来成为一个单独的模块。

按照第一关的流程,添加依赖及配置application.properties文件:

  1. <dependency>
  2. <groupId>org.mybatis.spring.boot</groupId>
  3. <artifactId>mybatis-spring-boot-starter</artifactId>
  4. <version>2.1.0</version>
  5. </dependency>
  1. spring.datasource.driverClassName = com.mysql.jdbc.Driver
  2. #mysql地址
  3. spring.datasource.url = jdbc:mysql://localhost:3306/information_schema?useUnicode=true&cha\fracterEncoding=utf-8
  4. #mysql用户名
  5. spring.datasource.username = root
  6. #mysql密码
  7. spring.datasource.password = 123123

接下来 mapper 层,增加注册的数据访问接口:

  1. @Mapper
  2. public interface UserMapper {
  3. @Insert("insert into users (userName,passWord) values (#{username},#{password})")
  4. @Options(useGeneratedKeys = true, keyProperty = "userId")
  5. public int insert(@Param("username")String userName, @Param("password")String password);
  6. }

service层增加注册业务代码:

  1. @Service
  2. public class UserService {
  3. @Autowired
  4. UserMapper userMapper;
  5. public Result addUser(String userName, String passWord) {
  6. Result result = new Result();
  7. //验证参数
  8. if (org.springframework.util.StringUtils.isEmpty(userName)
  9. || org.springframework.util.StringUtils.isEmpty(passWord)) {
  10. result.setCode(-1);
  11. result.setMessage("用户名或者密码为空");
  12. }//验证成功进行调用数据访问层进行注册
  13. else {
  14. int insert = userMapper.insert(userName, passWord);
  15. result.setCode(0);
  16. result.setMessage("成功");
  17. result.setData(insert);
  18. }
  19. return result;
  20. }

Result类为返回值,类结构如下:

  1. @Data
  2. public class Result {
  3. //0为成功,非0为异常
  4. int code;
  5. //成功或失败消息
  6. String message;
  7. //返回数据
  8. Object data;
  9. }

最后在controller层创建注册接口并调用这个service即可:

  1. @Controller
  2. public class UserController {
  3. @Autowired
  4. UserService userService;
  5. @RequestMapping("/register")
  6. @ResponseBody
  7. public Result register(@RequestParam(name = "userName") String userName,
  8. @RequestParam(name = "passWord") String passWord) {
  9. Result addUser = userService.addUser(userName, passWord);
  10. return addUser;
  11. }
  12. }

附上测试效果图:

  • 当注册参数缺失,会提示用户名或者密码为空;

  •  补全注册参数,则显示注册成功;

编程要求

请仔细阅读右侧代码,结合相关知识,实现一个最简单的注册功能,请在 Begin-End 区域内进行代码补充以下代码:

  1. 在 UserMapper 里增加注册用户信息的数据库访问接口
  2. UserService 中验证参数,调用UserMapper接口进行注册
  3. UserController创建前端访问接口,调用UserService的接口进行注册。

请仔细阅读右侧代码,结合相关知识,在 Begin-End 区域内进行代码补充,使用SpringBoot + MyBatis实现一个最简单的注册功能,平台会对注册接口进行验证。

测试说明

平台会对你的代码进行运行测试,如果实际输出与预期输出相同,则算通关。


参考代码

UserController.java

package net.educoder.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import net.educoder.entity.Result;
import net.educoder.service.impl.UserService;
@Controller
public class UserController {
    /********* Begin *********/
    @Autowired
    UserService userService;
    @RequestMapping("/register")
    @ResponseBody
    public Result register(@RequestParam(name = "userName") String userName,
            @RequestParam(name = "passWord") String passWord) {
        Result addUser = userService.addUser(userName, passWord);
        return addUser;
    }
    /********* End *********/
}

UserMapper.java

package net.educoder.mapper;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
import net.educoder.entity.TUser;
@Mapper
public interface UserMapper {
    /********* Begin *********/
    @Insert("insert into t_user (userName,passWord) values (#{userName},#{passWord})")
    @Options(useGeneratedKeys = true, keyProperty = "userId")
    public int insert(TUser user);
/********* End *********/
}

UserService.java

package net.educoder.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import net.educoder.entity.Result;
import net.educoder.entity.TUser;
import net.educoder.mapper.UserMapper;
@Service
public class UserService {
/********* Begin *********/
    @Autowired
    UserMapper userMapper;
    public Result addUser(String userName, String passWord) {
        Result result = new Result();
        TUser user = new TUser();
        //验证参数
        if (org.springframework.util.StringUtils.isEmpty(userName)
                || org.springframework.util.StringUtils.isEmpty(passWord)) {
            result.setCode(-1);
            result.setMessage("用户名或者密码为空");
        }//验证成功进行调用数据访问层进行注册
        else {
            user.setUserName(userName);
            user.setPassWord(passWord);
            userMapper.insert(user);
            result.setCode(0);
            result.setMessage("成功");
            result.setData(user);
        }
        return result;
    }
/********* End *********/    
}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

于建章

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值