JAVA学习之路以及第一次项目实战心得
前言:
今天是2023年4月24日,突发奇想想写一篇学习心得。因为以前光顾着一直赶进度学习java,没有总结,也就不知道自己的哪些地方还有缺陷,还需要提高。
如何接触到java和学习过程
我是在2021年底开始接触到java编程,当时到大学已经快一个半月了,每天在宿舍都十分闲,对学校各种部门那些又不感兴趣。这个时候我听说学校的工作室招新了,浅浅了解了一下,就毅然决然的报了名,然后通过了面试。
在进入工作室后,学长学姐们给我们浅浅介绍了一下学习方向,当时听到java后端开发的时候,我就选择了它。当时并不知道后端开发是什么东西,去百度也搜索了一些资料。然后就是去b站看后端开发的学习路线。确定了学习路线,就开始了漫长的学习过程。
在工作室,我认识了一位一样学习java后端的长路学长,是我非常想感谢的一位学长。他教我学习的方法,以及他学习踩得坑。他是我非常敬佩的人,是我学习前进的目标!!!
我相信大部分学java的兄弟们梦开始的地方都是b站尚硅谷的宋红康老师吧。当时啃完java基础差不多花了四五个月的时间,当时才大一,学习的兴趣没那么大,也是边学边玩那种。然后学习mysql,jdbc,javaweb,然后就是漫长的框架学习。框架的学习真的让我感受到了java后端学习的恐怖程度,当时学习完全就是懵懵懂懂,以至于后来实在学不下去了,给自己放了一个月的假哈哈哈。
在上个月,刚学完了springboot。就迫不及待的想拿个项目练练手。练手项目就是b站袁庭新老师的SpringBoot+MyBatis+MySQL电脑商城项目以前也做过一些小项目,做了一两天可能就放弃了,有的是因为实在不适合我这种什么都不懂的小白。但是这个项目讲的极其细致。在做项目每个功能之前,老师都会罗列出这个功能的三层都需要干些什么。帮助我们培养思维能力。思维能力是比技术重要非常多的,技术不会了去网上ctrl c v一下,但是思路是自己的。
这个老师讲的很慢,每一步干的什么事情都会告诉你,都会写下注释,视频好评如潮。
项目实战总结
我现在已经学完了商城项目的用户注册和登录功能,来浅浅把用户注册的思维逻辑做个总结:
首先,我们拿到手一个项目,先分析前端页面,就拿这个项目的注册页面来说
Mapper层
设计接口和抽象方法及实现
用户注册是插入数据吧,那mapper层就需要一个insert方法
/**
* 添加用户数据
* @param user 用户数据
* @return 受影响的行数
*/
public Integer insert(User user);
还有就是用户名不能重复,别人用过的用户名就不能在被重复注册了,那mapper层还需要一个判断注册时是否有相同用户名的方法findByUsername
/**
* 根据用户名查询数据,来判断注册时是否有相同的用户名
* @param name 用户名
* @return 用户数据
*/
public User findByUsername(String name);
然后就要到mapper.xml文件中写sql语句了
单元测试
每个独立的层编写完毕后需要编写单元测试方法来测试当前的功能:在test包结构下创建一个mapper包,在这个包下再创建持久层的功能测试,单元测试方法是独立运行,不用启动整个项目,提高了代码的测试效率。
Service层
写完之后进入service层开发。在service层先创建service接口,创建用户注册方法
//用户注册功能
public void reg(User user);
规划异常
为什么需要规划异常?
比如,用户在进行注册时可能会产生用户名被占用的错误,这时需要抛出一个异常
如何处理?
异常不能用RuntimeException,太笼统了,开发者没办法第一时间定位到具体的错误类型上,我们可以定义具体的异常类型来继承这个异常.
正常的开发中异常又要分等级,可能是在业务层产生异常,可能是在控制层产生异常,所以可以创建一个业务层异常的基类,起名ServiceException异常,并使其继承RuntimeException异常
后期开发业务层时具体的异常可以再继承业务层的异常ServiceException
在service实现类中开始写我们的业务。
在实现类中判断用户名是否被占用,被占用则抛出异常
//优先判断用户名是否已经被注册
if(userMapper.findByUsername(user.getUsername()) != null){
throw new UsernameDuplicatedException("用户名已存在");
}
Controller层
首先就是创建响应
状态码,状态描述信息,数据是所有控制层对应的方法都涉及到的操作,所以把这部分功能封装到一个类Result中,将这个类作为方法的返回值返回给前端浏览器
//以json格式的数据进行响应
public class Result<E>