1、目录结构
2、编码实现
对于登录操作,是根据用户所输入的信息(账号、密码等)来判断账号是否存在或者输入的信息是否正确,从而执行登录成功或者失败的操作。
对于简单注册操作,根据用户输入的信息通过系统访问数据库来进行插入用户信息,以此来完成注册操作。
首先对于mapper.xml文件的编写,在这里进行编写sql语句
mapper接口
按照我的理解,其实是dao层,来达到访问数据库的目的,代码如下所示。
@Component
@Mapper
public interface BasicUserMapper extends BaseMapper<BasicUser> {
BasicUser SelectOneUser(@Param(value = "account") String account,@Param(value = "password") String password );
Integer InsertOneUser(BasicUser basicUser);
}
需要注意:
- namespace="com.example.springbootdemo.service.mapper.BasicUserMapper"。 namespace称作命名空间,作用是保证不同的映射文件(*mapper.xml)sql语句的id相同也不会有冲突。
- 像id="SelectOneUser"所表示的id是唯一性的,而mapper.xml文件中的id需要和**mapper.interface(mapper接口)文件中的方法名保持一致,因为系统会根据方法名去mapper.xml中寻找id 。举例 mapper接口文件中 方法名为SelectOneUser那么就会映射到mapper.xml中 id="SelectOneUser "
M(Model)
存放实体类,如下所示:
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("basic_user")
@ApiModel(value="BasicUser对象")
public class BasicUser {
private static final long serialVersionUID = 1L;
@TableId
@ApiModelProperty(value = "用户ID")
private Long userId;
@ApiModelProperty(value = "用户姓名")
private String userName;
@ApiModelProperty(value = "用户账号")
private String account;
@ApiModelProperty(value = "用户密码")
private String password;
@ApiModelProperty(value = "用户角色")
private Integer role;
@ApiModelProperty(value = "用户状态")
private Integer status;
}
Service
业务逻辑层,主要是针对具体的问题操作,做业务处理操作。我们就可以根据自己的需求去调用mapper接口中的方法,以此来达到我们的目的。代码如下所示:
public interface BasicUserService {
//条件查询
BasicUser SelectOneUser(String account , String password);
/**
向数据库中插入一条用户数据
*/
Integer InsertOneUser(BasicUser basicUser);
}
@Repository
public class BasicUserServiceImpl implements BasicUserService {
@Autowired
BasicUserMapper basicUserMapper;
@Override
public BasicUser SelectOneUser(String account, String password) {
return basicUserMapper.SelectOneUser(account,password);
}
public Integer InsertOneUser(BasicUser basicUser)
{
return basicUserMapper.InsertOneUser(basicUser);
}
}
C(Controller)
控制器,通过service的接口来控制业务流程,也可以接受前端传过来的参数进行业务操作。代码如下所示:
@RestController
@CrossOrigin
@Api(tags = "用户信息Controller")
@RequestMapping("/api/UserWebController")
@Transactional
public class UserWebController {
@Autowired(required = false)
BasicUserService basicUserService;
@RequestMapping(value = "/login", method = RequestMethod.POST)
@ApiOperation("01用户登录接口")
public CommonResult login(@RequestBody LoginDto dto) {
CommonResult apiResult = new CommonResult();
try{
// 获取符合条件的用户
BasicUser user = basicUserService.SelectOneUser(dto.getAccount(),dto.getPassword());
if(user != null){
LoginSuccessDto loginSuccessDto = new LoginSuccessDto(user.getRole(),user.getUserName());
apiResult = CommonResult.ok(loginSuccessDto);
}else{
apiResult = CommonResult.failed("账号或密码错误");
}
}catch (Exception e){
apiResult = CommonResult.failed(e.getMessage());
}
return apiResult;
}
@RequestMapping(value = "/register", method = RequestMethod.POST)
@ApiOperation("02用户注册接口")
public CommonResult register(@RequestBody BasicUser basicUser) {
CommonResult apiResult = new CommonResult();
try{
basicUser.setUserId(1L);
if(basicUserService.InsertOneUser(basicUser)>0)
apiResult = CommonResult.ok();
else
apiResult = CommonResult.failed("注册失败");
}catch (Exception e){
apiResult = CommonResult.failed(e.getMessage());
}
return apiResult;
}
}
总结(最简单的流程):
- 当我们前端发送请求之后,会传送数据到controller(C)层,紧接着在(C)层就会调用service中的服务。
- 而在service中,就会调用mapper接口传输数据。
- mapper接口会通过mapper.xml访问数据库,从而返回数据到service
- 再次将数据返回到(C)层对返回的数据进行处理。