service层

首先我们需要用一个接口表明service层都有哪些操作:

public interface InfoService {
    Ret add(Info info); //注册
    Ret delete(String name,String password); //删除用户信息
    Ret login(String name,String password); //登录
    Ret modifyName(String name,String password,String newName);
    Ret modifyPassword(String name,String password,String newPassword);
}

然后会有一个实现类,去实现这些方法:

@Service
public class InfoServiceImpl implements InfoService {

    @Autowired
    InfoRepository infoRepository; //自动注入DAO类

    @Override
    public Ret add(Info info) {
        if(info == null){
            return Ret.error(InfoResult.INFO_EMPTY);
        }else{ //info
            if(infoRepository.findByNameAndStatus(info.getName(),Status.EXIST)!=null){
                //说明这个名字已经有人占用了(并且被占用的不在回收站中)
                return Ret.error(ModifyAndAddResult.DUPLICATE_USERNAME);
            }else if(!Utils.judge(info.getName())){
                //存在中文字符
                return Ret.error(ModifyAndAddResult.HAS_CHINESE);
            }else if(info.getPassword().length()<6){
                //密码长度小于6位
                return Ret.error(ModifyAndAddResult.SHORT_PASSWORD);
            }else{
                info.setStatus(Status.EXIST);
                //修改创建时间和修改时间
                info.setCreatetime(new Date());
                info.setUptime(new Date());
                infoRepository.save(info); //条件满足,加入表中
                return Ret.success(info);
            }
        }
    }

    @Override
    public Ret delete(String name, String password) {
        Info info = infoRepository.findByNameAndPasswordAndStatus(name,password,Status.EXIST);
        if(info == null){
            return Ret.error(InfoResult.INFO_EMPTY); //没有这条信息
        }
        else{
            info.setStatus(Status.NOT_EXIST); //状态设为不存在状态
            info.setUptime(new Date());
            infoRepository.save(info);
            return Ret.success(info);
        }
    }

    @Override
    public Ret login(String name, String password) {
        Info info = infoRepository.findByNameAndPasswordAndStatus(name,password,Status.EXIST);
        if(info==null){
            if(infoRepository.findByNameAndStatus(name,Status.EXIST)==null){
                //表里没这个用户名
                return Ret.error(LoginResult.WRONG_USERNAME);
            }
            else{
                return Ret.error(LoginResult.WRONG_PASSWORD);
            }
        }else{
            return Ret.success(info);
        }
    }

    @Override
    public Ret modifyName(String name,String password,String newName) {
        Info info = infoRepository.findByNameAndPasswordAndStatus(name,password,Status.EXIST);
        if(info==null){
            return Ret.error(InfoResult.INFO_NOT_EXIST);
        }else if(infoRepository.findByNameAndStatus(newName,Status.EXIST)!=null){
            //与add判断相同,判断newName是否重复
            return Ret.error(ModifyAndAddResult.DUPLICATE_USERNAME);
        }else if(!Utils.judge(newName)){
            //有中文字符
            return Ret.error(ModifyAndAddResult.HAS_CHINESE);
        }else{
            info.setName(newName);
            info.setUptime(new Date());
            infoRepository.save(info);
            return Ret.success(info);
        }
    }

    @Override
    public Ret modifyPassword(String name,String password,String newPassword) {
        Info info = infoRepository.findByNameAndPasswordAndStatus(name,password,Status.EXIST);
        if(info==null){
            return Ret.error(InfoResult.INFO_NOT_EXIST); //数据不存在
        }else if(newPassword.length()<6){
            //密码没有超过6位
            return Ret.error(ModifyAndAddResult.SHORT_PASSWORD);
        }else{
            info.setPassword(newPassword);
            info.setUptime(new Date());
            infoRepository.save(info);
            return Ret.success(info);
        }
    }
}

通过自动注入DAO类,我们可以用service层对数据库进行操作(通过调用DAO方法接口的实现类的方法),注意service的返回值也是Ret类,这样的作用是返回不同类的对象,都可以用Ret来进行包括,这样就不用返回Object类了

posted @ 2021-11-25 21:05  Acc22222222  阅读(429)  评论(0)    收藏  举报