锁定老帖子 主题:(模板方法的运用)持久层操作的java代码
精华帖 (1) :: 良好帖 (5) :: 新手帖 (6) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2011-03-10
最后修改:2011-03-11
虽然楼主的书面表达看起来有点蛋疼,但代码还是玩得不错的。建议看下dbutils的源码,那才是上佳之作。
又仔细看了下,发现viewName这种设计比较傻瓜,不如没有。 单就你这里的设计,可以搞成: //SqlHelper<T>改造如下,去掉loadDataBeanSelf protected T loadDataBean(ResultSet rs, List<SqlHelper<?>> otherBOs){ T parent = loadBean(rs); for(SqlHelper<?> bo : otherBOs){ Object child = bo.loadBean(rs); BeanUtil.setXvalue(parent,child); //为某对象某个类型设置值。 } }; protected abstract T loadBean(ResultSet rs); protected Book loadBean(ResultSet rs) throws SQLException { Book book = new Book(); book.setBook_id(rs.getInt("book_id")); book.setBook_name(this.changeFont(rs, "book_name")); book.setBook_price(rs.getDouble("book_price")); book.setStu_id(rs.getInt("stu_id")); return book; } 以上只是半伪码,未经测试。若在项目中使用,后果自负。 |
|
返回顶楼 | |
发表时间:2011-03-11
把数据库连接对象作为成员变量而存在,在并发环境中应该会出现连接关不了的情况。
|
|
返回顶楼 | |
发表时间:2011-03-11
最后修改:2011-03-11
huyaohua 写道 kanny87929 写道 huyaohua 写道 我说怎么代码这么熟悉,看楼下才想起.NET,API来!楼主3年前,写成这样已经很强了。不过还是有个建议,楼主对异常的处理还有些问题,对于SQL异常,我的建议或者封装异常,抛出,或者直接运行时异常。
你怎么处理呢,能给出源码不 其实这只是我个人习惯,对于异常的处理,尤其是这种底层的不习惯于 e.printStackTrace(); 还有是我的错觉吗,怎么感觉connection为公有变量,在多线程下对同一个实例操作,应该会有问题吧。虽然实际应用中没有人会这么用。 你觉得在什么情况下会发生多线程的情况 |
|
返回顶楼 | |
发表时间:2011-03-11
最后修改:2011-03-11
马伽角 写道 干嘛不用反射来做呢,,反射来生成SQL
到目前2个人提出要用反射来弄,你有思路? |
|
返回顶楼 | |
发表时间:2011-03-11
最后修改:2011-03-11
whaosoft 写道 有一点想问 持久在哪里 lz如何理解何为持久?
数据库就是一个可以持久性保存数据的容器 操作数据库的这层代码就可以理解为持久层操作代码 |
|
返回顶楼 | |
发表时间:2011-03-11
yangguo 写道 虽然楼主的书面表达看起来有点蛋疼,但代码还是玩得不错的。建议看下dbutils的源码,那才是上佳之作。
又仔细看了下,发现viewName这种设计比较傻瓜,不如没有。 单就你这里的设计,可以搞成: //SqlHelper<T>改造如下,去掉loadDataBeanSelf protected T loadDataBean(ResultSet rs, List<SqlHelper<?>> otherBOs){ T parent = loadBean(rs); for(SqlHelper<?> bo : otherBOs){ Object child = bo.loadBean(rs); BeanUtil.setXvalue(parent,child); //为某对象某个类型设置值。 } }; protected abstract T loadBean(ResultSet rs); protected Book loadBean(ResultSet rs) throws SQLException { Book book = new Book(); book.setBook_id(rs.getInt("book_id")); book.setBook_name(this.changeFont(rs, "book_name")); book.setBook_price(rs.getDouble("book_price")); book.setStu_id(rs.getInt("stu_id")); return book; } 以上只是半伪码,未经测试。若在项目中使用,后果自负。 这个建议蛮好 |
|
返回顶楼 | |
发表时间:2011-03-11
出道能写这样的代码不错了!
如果论模式,我无话可说。 但是论面向对象设计,我认为你那个什么bean都要继承什么sqlhelp的继承纯粹为继承而继承,我没有看到非要继承的理由。 只是封装对jdbc的访问,其实他本身只是工具类。如果是为了那个connection的话,你又未达到屏蔽jdbc的目的。 使用jdbc编程最容易出错的是连接管理的问题。 也就是说你的封装不完全,而且你的侵入性太高,对后续修改不利,移一发而动全身。 |
|
返回顶楼 | |
发表时间:2011-03-11
强烈鄙视几年前写的某某程序,毛意思吗
|
|
返回顶楼 | |
发表时间:2011-03-11
问一个问题啊,我在用tomcat6+ssh+jotm测试jta时,如果两个数据源都是基于MySQL的就可以,如果一个是MySQL,一个是SqlServer,就不能回滚,请问哪位遇到过吗????
|
|
返回顶楼 | |
发表时间:2011-03-11
68.
69. /** 70. * 为了方便操作,我还特意写定义了这个返回ResultSet的方法,便于直接操作 71. * @param sql 72. * @param params 73. * @param executeCall 74. * @return 75. * @throws SQLException 76. */ 77. public ResultSet returnResultSet(String sql, Object[] params, boolean executeCall) throws SQLException; 我被这个雷到了,还能返回ResultSet结果集????? 那方法里面的结果集你没关闭么???如果关闭了,还怎么能返回呢??? |
|
返回顶楼 | |