有关之前实体类的设计参考我前面的博客:http://blog.csdn.net/u013082989/article/details/50983650
项目文件已经放到Github上,欢迎大家Follow,star.地址:https://github.com/lawlite19/SmartEducation
一:抽取BaseAction
(1)先说一下ModelDriven的使用,比如用户登录,我想得到界面输入的用户账号userNum和用户密码password,可以在Action类中声明并实现get、set方法,对应到界面input的name属性一致,然后就可以得到
(也可以在Action中声明一个User user对象,对应到界面input的那么属性写user.userNum,user.password也可以得到)
使用
ModelDriven后,界面中name属性对应到对象的属性
可以直接在类中声明一个对象model,通过model.get()方法得到对象对应的属性即可。
(2)抽取BaseAction类,先说一下为什么要抽取,因为我们在每个Action中都要定义对应的对象model,我们可以抽取出来声明为泛型,通过反射得到对象的类型即可。
还有就是每个Action中可能会重复用到的Service接口对象,我们也都在BaseAction中将用到的接口对象声明为protected类型(前几天刚好复试c++,复习了一下类的关系),只要继承BaseAction就可以得到父类的Service接口对象了。
二:关于Dao层的调用代码优化
(1)因为之前我们在BaseDao中将公共的增、删、改、查代码抽取出来了,可以参考我的这篇博客后面的说明:http://blog.csdn.net/u013082989/article/details/50964133
又因为我们Service层经常会调用到
增、删、改、查,这样Service层又要重新写一遍,然后再去调用Dao层,这样就重复了(当然这样没有问题),我们现在将业务层Service和Dao层放在一起,将BaseDao改名为DaoSupport,Service层继承DaoSupport即可
dao层就不需要了
直接在Service层通过getSession()方法查询数据库
(getSession是DaoSupport中的,声明为protected类型,子类中就可以得到了)
(2)优化后的图示: