身为一名开发人员,大家都知道,我们经常会在项目中大量的编写许多重复的代码,比如说
像这种代码,简单,但是写多了,可能也会容易出错,那么我们能不能直接编写一套完整的,通用的方法呢,这样既不用重复编写,还不用出错,说道通用的方法,泛型是个不错的选择.
基础架构:spring-boot+spring mvc+spring jpa.
jpa是个好东西,个人感觉它最大的好处是不需要自己手动建表.还能在修改了表字段以后,自动给你添加上上去,它不像mybatis,业务改了之后,还需要调整sql语句,
好了,废话不多说,上代码:
一、首先建立一个实体类WebVisitRecordEntity继承BaseEntity.BaseEntity在项目里面,是所有实体类的最顶层.里面是封装了一些通用的属性.
1.BaseEntity
2.WebVisitRecordEntity
二、有了实体类之后首先建立一个顶层的api接口。所有通用的api方法,可以放在这里(ResultBean是一个封装了一个结果的数据类,里面包含了定义执行是否成功,执行返回的数据,执行错误提示的消息)
三、实现BaseApi既然是要定义通用的api,那么不仅仅只是一套接口,我们需要在定义一个可以实现BaseApi的BaseServiceImpl,之后的所有实现类,都可以继承这个BaseServiceImpl.java的泛型,给了我们的项目很好的扩展性,而顶层BaseEntity也给了我很好的实现方案,将BaseEntity作为泛型的入口
1.基本时限BaseApi
2.使用jpa作为BaseServiceImpl的属性.
四、定义类自己的api继承BaseApi,定义实现类,继承BaseServiceImpl.并实现自己的api
五、测试到这里,代码已经结束. 测试一下,构建下controller层. 并进行测试
三次测试都已经成功,但是我们真实的项目不可能这么简单.所以我们再次测试下扩展性
等等,不知道你们发现没有,上面的代码有一段是错误的.
我在controller层的属性不是api,而是实现类.......
虽然不影响,但是就无法扩展了...此处做修正
六、扩展性1. WebVisitRecordApi
2. WebVisitRecordServiceImpl
3. WebVisitRecordController
4.测试
七、总结emmmm.....其实我上面还有个小错误,就留给你们寻找吧
其实,封装的这个service层,也有很大的局限性,比如说,如果我需要自定义dao层的方法,怎么办?需要执行sql语句怎么办,仔细想想,我们能不能再封装一个BaseRepository呢?然后作为BaseServiceImpl中的属性传入??????
以上为个人经验,希望能给大家一个参考,也希望大家多多支持七叶笔记。