目录
任务描述
本关任务:使用SpringBoot
+ MyBatis
实现一个最简单的注册功能的小程序。
相关知识
为了完成本关任务,你需要掌握:1.如何搭建SpringBoot
项目 2.如何分层实现注册。
项目创建
-
maven
构建项目:-
进入网址填好自己需要的包名和工具,比如
web
,MySQL
之类的; -
点击
Generate Project
下载项目压缩包; -
解压后,用
Eclipse
打开就行。
-
Spring Boot
的基础结构共三个文件:-
src/main/java
:程序开发以及主程序入口; -
src/main/resources
:配置文件; -
src/test/java
: 测试程序。
-
-
Spring Boot
的目录结构如下:
net
+- educoder
+- Application.java
|
+- entity
| +- TUser.java
| +- Result.java
|
+- service
| +- UserService.java
|
+- mapper
| +- DemoMapper.java
+- controller
| +- DemoController.java
|
Application.java
建议放到根目录下面,主要用于启动项目;entity
目录主要用于实体(Entity
);mapper
层为数据访问层;service
层主要是业务类代码;controller
层负责页面访问控制。
MVC框架
在开始编写代码之前我们需要了解软件开发中一种常见的框架——MVC
MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:
- Model(模型)表示应用程序核心(比如数据库记录列表)。
- View(视图)显示数据(数据库记录)。
- Controller(控制器)处理输入(写入数据库记录)。
这种模式有什么好处呢?
他的优势在于:
耦合性低;重用性高;生命周期成本低;部署块;可维护性高;有利软件工程化管理。
如何实现MVC框架呢?
其实我们已经做过一部分了,在之前的内容中,我们使用了Controller
,Controller
就是属于控制器,即C,使用的实体类其实就是模型层。
使用MVC分层实现注册
在之前我们都是在Controller
中直接对数据库进行的操作,学习了MVC我们应该知道业务逻辑的处理应该单独成为一个模块,所以我们现在要将业务逻辑层的代码提取出来成为一个单独的模块。
按照第一关的流程,添加依赖及配置application.properties
文件:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
spring.datasource.driverClassName = com.mysql.jdbc.Driver
#mysql地址
spring.datasource.url = jdbc:mysql://localhost:3306/information_schema?useUnicode=true&cha\fracterEncoding=utf-8
#mysql用户名
spring.datasource.username = root
#mysql密码
spring.datasource.password = 123123
接下来 mapper
层,增加注册的数据访问接口:
@Mapper
public interface UserMapper {
@Insert("insert into users (userName,passWord) values (#{username},#{password})")
@Options(useGeneratedKeys = true, keyProperty = "userId")
public int insert(@Param("username")String userName, @Param("password")String password);
}
在service
层增加注册业务代码:
@Service
public class UserService {
@Autowired
UserMapper userMapper;
public Result addUser(String userName, String passWord) {
Result result = new Result();
//验证参数
if (org.springframework.util.StringUtils.isEmpty(userName)
|| org.springframework.util.StringUtils.isEmpty(passWord)) {
result.setCode(-1);
result.setMessage("用户名或者密码为空");
}//验证成功进行调用数据访问层进行注册
else {
int insert = userMapper.insert(userName, passWord);
result.setCode(0);
result.setMessage("成功");
result.setData(insert);
}
return result;
}
Result
类为返回值,类结构如下:
@Data
public class Result {
//0为成功,非0为异常
int code;
//成功或失败消息
String message;
//返回数据
Object data;
}
最后在controller
层创建注册接口并调用这个service
即可:
@Controller
public class UserController {
@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;
}
}
附上测试效果图:
- 当注册参数缺失,会提示用户名或者密码为空;
- 补全注册参数,则显示注册成功;
编程要求
请仔细阅读右侧代码,结合相关知识,实现一个最简单的注册功能,请在 Begin-End
区域内进行代码补充以下代码:
- 在
UserMapper
里增加注册用户信息的数据库访问接口 - 在
UserService
中验证参数,调用UserMapper
接口进行注册 - 在
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 *********/
}