航空后端部署4

用户注册实现:

1.创建对应数据库的实体类

2.建立mapper层调用basemapper中的方法(mybatis puls中的用法),可以实现简单的增删改查,但如果要复杂服务则要在service层中进行添加

3.添加注册dto层用来接受前端传来的值(dto层是与前端发送值相对应,而entity层是与数据库值相对应)

注:这些值必须与前端相对应,才能收到数据

4.添加service,因为basemapper没有注册的接口,只有简单的增删改查方法所以要添加service层

里面写入方法

该方法接受了前端放送过来的dto值,返回一个user对象

对该方法进行实体化,代码解释的非常清楚了!!!!

大致就是接受到前端传过来的值,判断email值是否能在当前数据库中查到相同email的记录,如果有则表示用户已经用该邮箱注册了一个账户,则返回用户注册失败,如果没有则,把前端传过来的email值和加密后的密码写入数据库,(这边采用了builder写入数据库比传统写法,更加方便,易懂)

 public UserinFormationTable executeRegister(RegisterDTO dto) {

        //查询是否有相同用户名的用户
        LambdaQueryWrapper<UserinFormationTable> wrapper = new LambdaQueryWrapper<>();//设置查找条件
        wrapper.eq(UserinFormationTable::getMailbox, dto.getEmail());//判断是否数据库中有相同邮箱账号
        UserinFormationTable userinFormationTable= baseMapper.selectOne(wrapper);//查找一条记录(由mabatis plus提供)
        // userinFormationTable不为空时,则判断已存在
        if (!ObjectUtils.isEmpty(userinFormationTable)) {
             ApiAsserts.fail("邮箱已存在!");
    }
        //没有则创建一个数据库对象,相当于注册新用户写入数据库
            UserinFormationTable addUser = UserinFormationTable.builder()
                    .mailbox(dto.getEmail())
                    .password(MD5Utils.getPwd(dto.getPass())) //用md5进行对密码的加密
                    .build();
            baseMapper.insert(addUser);

            return addUser;
    }

 

加密方法:

public static String getPwd(String pwd) {
        try {
            // 创建加密对象
            MessageDigest digest = MessageDigest.getInstance("md5");

            // 调用加密对象的方法,加密的动作已经完成
            byte[] bs = digest.digest(pwd.getBytes());
            // 接下来,我们要对加密后的结果,进行优化,按照mysql的优化思路走
            // mysql的优化思路:
            // 第一步,将数据全部转换成正数:
            String hexString = "";
            for (byte b : bs) {
                // 第一步,将数据全部转换成正数:
                // 解释:为什么采用b&255
                /*
                 * b:它本来是一个byte类型的数据(1个字节) 255:是一个int类型的数据(4个字节)
                 * byte类型的数据与int类型的数据进行运算,会自动类型提升为int类型 eg: b: 1001 1100(原始数据)
                 * 运算时: b: 0000 0000 0000 0000 0000 0000 1001 1100 255: 0000
                 * 0000 0000 0000 0000 0000 1111 1111 结果:0000 0000 0000 0000
                 * 0000 0000 1001 1100 此时的temp是一个int类型的整数
                 */
                int temp = b & 255;
                // 第二步,将所有的数据转换成16进制的形式
                // 注意:转换的时候注意if正数>=0&&<16,那么如果使用Integer.toHexString(),可能会造成缺少位数
                // 因此,需要对temp进行判断
                if (temp < 16 && temp >= 0) {
                    // 手动补上一个“0”
                    hexString = hexString + "0" + Integer.toHexString(temp);
                } else {
                    hexString = hexString + Integer.toHexString(temp);
                }
            }
            return hexString;
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return "";
    }

5.control层的实现

这边这样写就表示最后后端的返回数据存放在

http://xxx//ums/user/register

详细代码注释非常清楚了

简单的说就是自动接受前端发送过来的post请求,通过dto建立的联系.读取dto email的值,放入刚刚的service层里面的注册方法中,因为如果没有重复的注册,executeRegister()方法会返回值,但如果有重复则不会返回值,通过判断user对象是否被赋值,就可以判断是否注册成功!!并返回给前端对应的反馈。

@Resource
    private UserinFormationtableService userinFormationtableService;//引入service层

    @RequestMapping( value = "/register",method = RequestMethod.POST) //当发register请求的时候
    //ApiResult<Map<String, Object>>
    //自动接收到客户端发给我们的字段,dto里面的字段需要和前端的一模一样
    public ApiResult<Map<String, Object>> register(@Valid @RequestBody RegisterDTO dto) {
        UserinFormationTable user = userinFormationtableService.executeRegister(dto);//接到了提交过来的数据,执行service层里面的方法
        //如果user对象为空则返回失败
        if (ObjectUtils.isEmpty(user)) {
            //return "账号注册失败";
            return ApiResult.failed("flase");
        }
        Map<String, Object> map = new HashMap<>(16);//返回一个map容量为16
        map.put("user", user);
        //return "账号注册成功";
        return ApiResult.success(map);
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis 目录(?)[-] mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程mybatis in action之三实现数据的增删改查 mybatis实战教程mybatis in action之四实现关联数据的查询 mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action之七实现mybatis分页源码下载 mybatis实战教程mybatis in action之八mybatis 动态sql语句 mybatis实战教程mybatis in action之九mybatis 代码生成工具的使用 mybatis SqlSessionDaoSupport的使用附代码下载 转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门一下下,如果你看过Hibernate了那这个就非常的简单) (再加一条,其实大家可以看官方的教程更好些:http://mybatis.github.io/mybatis-3/,而且如果英文不是很好的那就看中文的:http://mybatis.github.io/mybatis-3/zh/sqlmap-xml.html) 写在这个系列前面的话: 以前曾经用过ibatis,这是mybatis的前身,当时在做项目时,感觉很不错,比hibernate灵活。性能也比hibernate好。而且也比较轻量级,因为当时在项目中,没来的及做很很多笔记。后来项目结束了,我也没写总结文档。已经过去好久了。但最近突然又对这个ORM 工具感兴趣。因为接下来自己的项目中很有可能采用这个ORM工具。所以在此重新温习了一下 mybatis, 因此就有了这个系列的 mybatis 教程. 什么是mybatis MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点: 1. 从配置文件(通常是XML配置文件中)得到 sessionfactory. 2. 由sessionfactory 产生 session 3. 在session 中完成对数据的增删改查和事务提交等. 4. 在用完之后关闭session 。 5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。 mybatis实战教程(mybatis in action)之一:开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包。这些软件工具均可以到各自的官方网站上下载。 首先建立一个名字为 MyBaits 的 dynamic web project 1. 现阶段,你可以直接建立java 工程,但一般都是开发web项目,这个系列教程最后也是web的,所以一开始就建立web工程。 2. 将 mybatis-3.2.0-SNAPSHOT.jar,mysql-connector-java-5.1.22-bin.jar 拷贝到 web工程的lib目录. 3. 创建mysql 测试数据库和用户表,注意,这里采用的是 utf-8 编码 创建用户表,并插入一条测试数据 程序代码 程序代码 Create TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `userName` varchar(50) DEFAULT NULL, `userAge` int(11) DEFAULT NULL, `userAddress` varchar(200) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; Insert INTO `user` VALUES ('1', 'summer', '100', 'shanghai,pudong'

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值