2020-09-24 编写登录、注册接口并单元测试

先在数据库创建表,并插入一条数据,方便后续测试

依次执行如下SQL:

CREATE TABLE `user` (

  `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',

  `username` CHAR(255) NOT NULL COMMENT '用户名称',

  `password` VARCHAR(255) DEFAULT NULL COMMENT '用户密码',

  `head_url` VARCHAR(255) DEFAULT NULL COMMENT '用户头像',

  `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',

  `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',

  `is_deleted` INT(1) DEFAULT '0' COMMENT '是否删除',

  PRIMARY KEY (`id`)

) ENGINE=INNODB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8


INSERT INTO `db_spring_vue`.`user` (`username`, `password`, `head_url`, `create_time`, `update_time`, `is_deleted`) VALUES('admin','123456','http://www.baidu.com',NOW(),NOW(),'0');

SELECT * FROM `db_spring_vue`.`user` t;


在pom.xml引入mybatis.generator的相关依赖,利用mybatis.generator插件生成相应的数据持久化对象

注意两个依赖的存放位置,mybatis-generator-core放在<dependencies>xxx</dependencies>标签

<dependency>

    <groupId>org.mybatis.generator</groupId>

    <artifactId>mybatis-generator-core</artifactId>

    <version>1.4.0</version>

</dependency>

mybatis-generator-maven-plugin,则需要放在<plugins>xxx</plugins>标签之间

<plugin>

<groupId>org.mybatis.generator</groupId>

<artifactId>mybatis-generator-maven-plugin</artifactId>

<version>1.3.7</version>

<configuration>

    <overwrite>true</overwrite>

</configuration>

</plugin>

添加完,记得刷新pom.xml,不然不会下载依赖相关的文件,不会生效


IntelliJ IDEA 2020之前版本,可以配置maven pom.xml自动刷新

在resources目录下,增加mybatis.generator的配置文件generatorConfig.xml,注意如下内容:

第一个是mysql驱动,需要下载,然后这里填上驱动文件的存放路径

[mysql-connector-java-5.1.6.jar] 下载地址:https://imcfile.oss-cn-beijing.aliyuncs.com/shizhan/file/liaoshixiong/mysql-connector-java-5.1.6.jar

第二个是数据库配置,需要指定数据库名:db_spring_vue

第三、四、五是后续生成的持久化相关文件的目录,这里可以不用自己创建,指明路径,执行命令后会自动创建对应的目录

第六则是指定要持久化的数据库表表名,以及持久化后返回的对象名,目前就user一个表,返回对象我也叫user

后续若要操作其他表,则复制第六,修改对应的表名和对象名即可

Mybatis Generator 配置详解:https://www.imooc.com/article/21444

上述配置完成后,就可以进行持久化操作了

也可以在命令行执行命令:mvn mybatis-generator:generate

执行完成后,会在前面generatorConfig.xml文件里配置的三个目录,生成相应的对象文件:


在SpringbackApplication.java文件,添加注解,指定后续dao层的扫描路径:

@MapperScan(basePackages ="com.springbootvue.springback.dao")

打开pojo/user.java,我们发现已经生成了user的相关get、set方法


这显得有点杂乱,我们通过添加lomobk插件的@Data注解,进行简化

再对原来的application.properties配置文件进行一些优化,先将application.properties改成application.yml,其实.properties和.yml都是可用的,

只是.yml的内容是树形结构,看起来更简洁一些,用哪一个看个人喜欢。

mybatis默认是属性名和数据库字段名一一对应的,即

数据库表列:user_name

实体类属性:user_name

但是java中一般使用驼峰命名

数据库表列:user_name

实体类属性:userName

在Springboot中,可以通过设置map-underscore-to-camel-case属性为true来开启驼峰功能

spring:

datasource:

driver-class-name:com.mysql.cj.jdbc.Driver

    username: root

password: qqq123

url: jdbc:mysql://localhost:3306/db_spring_vue?characterEncoding=utf-8&serverTimezone=GMT&useSSL=false

mybatis:

configuration:

map-underscore-to-camel-case:true

  mapper-locations: classpath:mappers/*.xml

logging:

pattern:

console:"[%thread] %-5level %logger{36} - %msg%n"

修改UserMapper.xml,增加如下内容,

<select id="countByUsername" parameterType="java.lang.String" resultType="java.lang.Integer">

  select

  count(1)

  from user

  where username = #{username,jdbcType=VARCHAR}

</select>

<select id="selectByUsername" parameterType="java.lang.String" resultMap="BaseResultMap">

  select

    <include refid="Base_Column_List" />

    from user

    where username = #{username,jdbcType=VARCHAR}

</select>

第一个就是增加countByUsername方法,用于后面注册接口检查用户是否已注册

第二个则是增加selectByUsername方法,用于后面登录接口检查用户是否已存在

注意两者的返回,一个是返回java.lang.Integer,一个是返回BaseResultMap

再到文件dao/UserMapper,添加刚刚的两个对象

int countByUsername(String username);

UserselectByUsername(String username);

在com.springbootvue.springback,新建包service

再在包service下新增接口文件IUserService.java

在IUserService.java添加注册和登录方法,注意请求参数,注册是user对象,登录则只需要传入username和password

我们这里比较简单,注册时也只要填username和password,但通常情况下,注册还会有其他的email、address等。

所以注册时入参是user对象,登录则只是username和password

因为register方法要传入user对象,所以,我们还需要在dao/user.java生成user对象的构造方法

操作完成如下:

接下来,创建包Impl,再在包Impl下创建类文件UserServiceImpl.java,编写register和login方法的具体实现

注意别漏了@Service注解和引入userMapper:

package com.springbootvue.springback.service.Impl;

import com.springbootvue.springback.dao.UserMapper;

import com.springbootvue.springback.pojo.User;

import com.springbootvue.springback.service.IUserService;

import org.springframework.stereotype.Service;

import org.springframework.util.DigestUtils;

import javax.annotation.Resource;

import java.nio.charset.StandardCharsets;

@Service

public class UserServiceImplimplements IUserService {

@Resource

    private UserMapperuserMapper;

    /**

    *注册

    * @param user

    */

    @Override

    public void register(User user){

//检查username不能重复

        int countByusername =userMapper.countByUsername(user.getUsername());

        if (countByusername >0){

throw new RuntimeException("该username已注册!!!");

        }

//对密码进行MD5加密

        user.setPassword(DigestUtils.md5DigestAsHex(

user.getPassword().getBytes(StandardCharsets.UTF_8)

));

        //写入数据库

        int resultCount =userMapper.insertSelective(user);

        if (resultCount ==0){

throw new RuntimeException("注册失败!!!");

        }

}

/**

    *登录

    * @param username,password

    */

    @Override

    public void login(String username,String password){

User user =userMapper.selectByUsername(username);

        if (user ==null){

//用户不存在(返回:用户名或密码错误)

            throw new RuntimeException("登录用户不存在!!!");

        }

if (!user.getPassword().equalsIgnoreCase(DigestUtils.md5DigestAsHex(password.getBytes(StandardCharsets.UTF_8)))){

//密码错误(返回:用户名或密码错误)

            throw new RuntimeException("登录密码错误!!!");

        }

}

}

选中register或login方法,右键,生成单元测试方法

注意选Junit 4,以及选中要进行单元测试的方法


完成后,会在test目录下按路径生成对应的单元测试文件,编写单测代码:

package com.springbootvue.springback.service.Impl;

import com.springbootvue.springback.SpringbackApplicationTests;

import com.springbootvue.springback.pojo.User;

import com.springbootvue.springback.service.IUserService;

import org.junit.Test;

import org.springframework.beans.factory.annotation.Autowired;

public class UserServiceImplTestextends SpringbackApplicationTests {

@Autowired

    private IUserServiceuserService;

    @Test

    public void register() {

User user =new User("abccc","qqq123");

        userService.register(user);

    }

@Test

    public void login() {

userService.login("abccc","qqq123");

    }

}

修改SpringbackApplicationTests.java,添加注解@RunWith(SpringRunner.class)

在UserServiceImplTest.java,右键执行单元测试,也可以选择某一个方法,执行这一个方法的单元测试

查看单元测试结果:

查看数据库,注册成功:

目前只是简单的实现了注册登录接口,但都没有返回值,下一次来进行优化,添加返回值,再添加userinfo和logout接口,来检查是否登录成功和退出

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。