【管理系统】登录模块

1. 持久层

1.1 规划需要执行的sql语句

SELECT * FROM student WHERE sid = ?

1.2 设计接口和抽象方法

在mapper包的StudentMapper中进行定义

/**
     * 根据学号选择学生对象
     * @param sid 学生学号
     * @return 学生对象数据
     */
    Student findByStudentsid(String sid);

1.3 sql映射

在resources.mapper包的StudentMapper.xml进行sql映射

<resultMap id="StudentEntityMap" type="com.example.hzuniversity.entity.Student">
        <!--将表的资源和类的属性不一致字段进行匹配指定,名称一致可以缩略不写-->
        <!--定义映射规则时,主键不可省略-->
        <id column="sid" property="sid"></id>
        <result column="gender" property="gender"></result>
        <result column="is_delete" property="isDelete"></result>
        <result column="created_time" property="createdTime"></result>
        <result column="modified_time" property="modifiedTime"></result>
    </resultMap>

    <select id="findByStudentsid" resultMap="StudentEntityMap">
        SELECT * FROM student WHERE sid = #{sid}
    </select>

1.4 单元功能测试

在test中mapper包StudentMapperTest中进行单元测试

@Test
    public void findByStudentsid() {
        Student student = studentMapper.findByStudentsid("5");
        System.out.println(student);
    }

2. 业务层

2.1 规划异常

  • 用户登录密码错误PasswordNotMatchException
  • 用户登录学号不存在SidNotFoundException

2.2 设计接口和抽象方法

在service包中IStudentService中定义

/**
 * 学生登录接口
 * @param sid 学号
 * @param password 密码
 * @return 学生对象数据
 */
Student Login(String sid, String password);

在实现类StudentServiceImpl中实现抽象方法

/**学生登录*/
    @Override
    public Student login(String sid, String password) {
        Student result = studentMapper.findByStudentsid(sid);
        if (result == null || result.getIsDelete() == 1) { // 用户账号不存在或已经注销
            throw new SidNotFoundException("学号不存在!");
        }
        /**获取盐值对密码加密后进行比较*/
        String salt = result.getSalt();
        String newMd5Password = getMD5Password(password, salt);
        String rpassword = result.getPassword();
        if (!newMd5Password.equals(rpassword)) {
            throw new PasswordNotMatchException("用户密码错误!");
        }

        // 只需要传输三个值id name avatar 响应速度更快 提升性能
        Student student = new Student();
        student.setSid(result.getSid());
        student.setName(result.getName());
        student.setAvatar(result.getAvatar());

        return student;
    }

2.3 单元测试

@Test
    public void login() {
        String sid = "5";
        String password = "123456";
        Student student = studentService.login(sid, password);
        System.out.println(student);
    }

3. 控制层

3.1 异常处理

  • 用户登录密码错误PasswordNotMatchException配置在统一异常处理中
else if (e instanceof PasswordNotMatchException) {
            result.setState(4001);
            result.setMessage("密码错误");
        }
  • 用户登录学号不存在SidNotFoundException配置在统一异常处理中
else if (e instanceof SidNotFoundException) {
            result.setState(4002);
            result.setMessage("用户数据不存在");
        }

3.2 设计请求

/stu/login
POST
String sid, String password, HttpSession session
JsonResult< Student >

3.3 处理请求

@RequestMapping("login")
    public JsonResult<Student> login(String sid, String password, HttpSession session) {

        Student student = studentService.login(sid, password);
        // 向session对象中完成数据的绑定(session全局的)
        session.setAttribute("sid", student.getSid());
        session.setAttribute("username", student.getName());

        return new JsonResult<Student>(OK, student);
    }

3.4 单元功能测试

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值