想讨论下数据库持久层的必要性
开发SSH时,往往写完PO类,设置好映射的数据库字段时,写对应的DAO的方法,再写所谓的DTO,设置好所有返回前前台的结果集,无谓就是省着写SQL了而已
如果我直接在ACTION中写SQL去操作数据,查询出来的结果集直接通过封装好的JDBC方法按照字段名转换成JSON对象传递给前台,前台通过EXT去的STORE去解析对应的字段,这样完全可以省略PO DTO等等模式 如果不使用EXT,也可以传递到前台一个LIST,每条记录一个MAP,前台用过JSTL也是完全可以解析展示的。
如果说没有写DAO层会造成一些复用的麻烦,也可以把所有的SQL方法写到一个DAO类中,完全也能够实现DAO操作相同数据库方法的复用
个人觉得比写PO DTO啥的方便,而且HSQL写起来也不通俗 效率也低,一些复杂的SQL往往还不支持
[解决办法]
我也曾经考虑这样做,而且代码都写好了
后来总结了一下,
这样做可以省略不少代码,省了很多jar和框架,ssh通通不靠边了。
但是这样做,失去了mvc模式,失去了面向对象的概念,不能很好的分层,后期维护很困难,
不利于数据库移植,不灵活!
我们目前是这样做的:
根据模板连接数据库生成映射文件和实体类,自己封装了一个SqlUtil类,泛型操作,dao和service就不用了,一个servlet解决所有http请求,比如:
SqlUtil<User> sqlUtil = new SqlUtil<User>();
User user = new User();
user.setName("张三");
user = sqlUtil.insert(user);
Long id = user.getId();
user = sqlUtil.getById(id);
user.setAge(20);
user = sqlUtil.update(user);
user = sqlUtil.delete(user.getId());
List<User> users = sqlUtil.getDataList("select * from t_user where age >= ? order by id", new Object[] { user.getAge() });