本文开发一用户注册与登录的后端java平台。开发完后的网页效果:http://user-front.66bond.com/
后端主要提供用户的注册、查询、删除等操作。使用到的开发工具:
- IDEA2021; 关注公众号”青椒工具”,发送”IDEA”,获取windows下的IDEA安装包
- mysql 5.7;关注公众号”青椒工具”,发送”mysql”,获取windows下的mysql5.7安装包;
之前我们已经创建mapper和model目录,接下来再创建controller,service,utils三个目录;
- controller,控制层负责接受网络请求;
- utils,存放一些通用的工具类;
- service,实现业务逻辑;
- mapper,数据库访问;
- model,对应数据库的对象;
1、创建user对象与数据库关联
之前我们在使用mybaits-plus时有写过User.java代码,那现在我们是否要根据simpleuser中的user表来写User.java代码呢?
我们的User表:
1 | id bigint auto_increment |
对应上述的表,我们在User.java要写这些变量,手动还能勉强写,但是如果user表中有成百上千的变量,那么再手动来写肯定不现实,我们需要自动根据数据库来写User.java代码的方法:
我们点击IDEA中settings->plugin中,搜索并安装mybatisX插件,然后点击IDEA右侧的database,选择要生成代码的表格/simpleuser/user,右键然后选择”MybatisX-Generate”:
根据上述的参数配置,可以看到自动生成的代码目录generator:
我们再将其中的generator中domain, mapper与service目录中的代码分别拷贝到backend中的model, mapper与service;
注意:要删除错误的import语句,以及添加新的import语句,import语句的添加可以使用快捷键: alt+enter;
现在的问题:User.java中的变量名与数据库中的不一致,数据库中的是驼峰变量名,而我们生成的全部是小写,所以我们要增加勾选图3中的”Actual Column”条目,重新生成即可。
2、测试生成的代码访问数据库
我们来测试UserService.java是否可以访问数据库中的数据;
将鼠标光标停留到UserService.java源代码中的UserService字段,然后alt+enter,选择Create Test;使用Junit5来创建测试文件,在/test/java/com.tfzhang.backend/service下自动创建UserServiceTest.java文件,代码框架:
1 | package com.tfzhang.backend.service; |
此处步骤1中的user初始化,就是调用user对象的set方法;因为有那么多个变量,每个都自己写不方便,我们可以装一个generateallset插件来实现自动填充代码:
安装插件的过程settting->plugins,再搜索安装即可。
具体使用:将光标停留到user变量,然后alt+enter,选择”generate all setter with default values”即可,生成的代码如下:
1 |
|
然后将自动会设置默认值的变量去掉,比如Id是插入数据时自动生成的,还有updateTime,createTime等等,修改后最终的代码如下:
1 | package com.tfzhang.backend.service; |
我们点击上述testAddUser()方法左边的绿色小三角,开始运行testAddUser方法,会出现如下的错误:
1 | Error creating bean with name 'userServiceImpl': Unsatisfied dependency expressed through field 'baseMapper': Error creating bean with name 'userMapper' defined in file [C:\Users\bigbug\Desktop\usercode\backend\target\classes\com\tfzhang\backend\mapper\UserMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory': Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.class]: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception with message: Failed to parse mapping resource: 'file [C:\Users\bigbug\Desktop\usercode\backend\target\classes\mapper\UserMapper.xml]' |
去查看UserMapper.xml文件,原来这个文件我们没有修改,还是之前generator时候的参数,我们根据当前的model和mapper位置修改如下:
1 | <mapper namespace="com.tfzhang.backend.mapper.UserMapper"> |
保存后,再次点击运行测试程序,发现有新的错误:
1 | org.springframework.jdbc.BadSqlGrammarException: |
根据提示是代码往数据库插入了user_account 变量的值,但是我们的数据库中只有userAccount,根本不存在user_account这样的变量值。
那这个user_account又是哪里来的呢?采用ctrl+shift+F的全局搜索,我们在代码中并不能找到user_account,所以很可能是我们的mybatis自动生成的操作数据库的代码。我们以下面的关键词开始百度:
1 | mybatis 数据库变量下划线 |
最终找到解决方法是,在application.yml中加入下的配置语句:
1 | mybatis-plus: |
保存后,我们再次启动测试文件,这次可以顺利通过测试,数据库返回值的Id值为1,如下图所示:
至此,我们的用户数据库可以正常访问,项目文件目录也建设完毕,接下来我们实现业务逻辑。
3、参考资料:
本文参考自如下知识星球中的视频教程,更多的完整的相关视频教程,见如下的收费知识星球,近3万人的学习社区,