最近在做一个SMH(spring,springmvc,hibernate)的项目,比较有意思。主要是在前端做大数据展示,后台业务较少,但是表特别多,一个图对应一个表,一共上百个图。
hibernate是特点是操作对象等于操作数据库,每个表对应一个dao,这个无法避免,但是每个dao对应一个业务层,这个就不太实际,对服务器来说造成很重的负担,对资源造成很大的浪费,那应该怎么解决呢。
首先,肯定要抽取一个公共的工具baseService类,里面有表条件查询,分页查询等等方法,具体的方法如下所述:
服务器开启时,系统自动扫描dao所在的包下dao带有某注解实现类,将这些实现类放入map集合里面,类型是<String,Object>,key是对应的注解value,Object是对应的实现类。
但我们在页面上想访问对应表的数据时,接口形式如下 : localhost:8080/project/findAll?annoDaoName='ABC' ,ABC是对应的注解value。访问过程如下:
- 用户访问接口
- 后台通过annoDaoName查询Map中是否有对应的Key
- 通过key找到对应的Dao实现类
- 通过Dao找到表对应的实体类,再利用反射机制找到实体类所有的属性,用集合保存
- 返回集合到页面上
- 在页面上处理数据