OA系统开发(六)

118 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情

1.entity实体类创建

新建user类文件 image.png

package com.imooc.oa.entity;

public class User {
    private String userName;
    private String password;
    private Long employeeId;
    //getter和setter省略,可通过idea自动生成

}

2.mapper新增xml文件

新建user.xml image.png

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="usermapper">
    <select id="selectByUserName" parameterType="String" resultType="com.imooc.oa.entity.User">
        select * from sys_user where username=#{value}
    </select>
</mapper>

代码说明:

  • namespace="usermapper":用来说明mapper文件的命名空间
  • id="selectByUserName":用来说明mapper查询的唯一标识
  • parameterType="String":用来说明参数的类型
  • resultType="com.imooc.oa.entity.User":用来说明返回User实体
  • where username=#{value}:参数值使用 #{参数名}

3.配置mybatis-config.xml

image.png

4.新增包dao层

新增UserDao类文件 image.png

package com.imooc.oa.dao;

import com.imooc.oa.entity.User;
import com.imooc.oa.utils.MybatisUtils;

public class UserDao {
    public User selectByUserName(String userName) {
        User user = (User) MybatisUtils.executeQuery(sqlSession ->
                sqlSession.selectOne("usermapper.selectByUserName", userName));
        return user;
    }
}

代码说明:

  • (User) MybatisUtils.executeQuery:调用MybatisUtils的查询方法
  • qlSession.selectOne("usermapper.selectByUserName", userName):usermapper.selectByUserName是我们定义的user.xml文件,通过namespace.select("id")的方法选择不同的sql语句

5.新建service包

5.1在service新增excepton包并且新建BusinessException异常类,用来处理业务异常 image.png

package com.imooc.oa.service.exception;

public class BusinessException extends RuntimeException {
    private String code;
    private String message;

    public BusinessException(String code,String msg){
        super(code+":"+msg);
        this.code = code;
        this.message = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

代码说明:

  • BusinessException extends RuntimeException:业务异常类继承运行异常类

5.2新增userService类文件 image.png

package com.imooc.oa.service;

import com.imooc.oa.dao.UserDao;
import com.imooc.oa.entity.User;
import com.imooc.oa.service.exception.BusinessException;

public class UserService {
    private UserDao userDao= new UserDao();
    public User checkLogin(String userName,String password){
        User user = userDao.selectByUserName(userName);
        if(user==null){
            throw  new BusinessException("L001","用户名不存在");
        }
        if(!user.getPassword().equals(password)){
            throw new BusinessException("L002","密码错误");
        }
        return user;
    }

}

代码说明:

  • userDao.selectByUserName:根据用户名查找用户是否存在
  • !user.getPassword().equals(password):根据查询出来的密码和传递的password是否相等,如果相等,这说明该用户合法
  • throw new BusinessException:用来处理业务异常

6.单元测试

在userService中新增测试用例,idea会自动在test生成对应的代码 image.png 创建之后 image.png 新增三个测试用例:分别对应用户不存在;用户名正确,密码错误;密码和用户名都正确

package com.imooc.oa.service;

import com.imooc.oa.entity.User;
import junit.framework.TestCase;

public class UserServiceTest extends TestCase {
    UserService  userService = new UserService();
    public void test1(){
      User user =   userService.checkLogin("admin","123");
    }
    public void test2(){
        User user =   userService.checkLogin("t5","123");
    }
    public void test3(){
        User user =   userService.checkLogin("m8","f57e762e3fb7e1e3ec8ec4db6a1248e1");
    }
}

运行三个测试用例 image.png

image.png