当前位置: 技术问答>java相关
如何不把SQL语句直接写在JAVA程序代码里
来源: 互联网 发布时间:2015-04-11
本文导语: 前几天听人说直接把SQL语句直接写在JAVA代码里是一种不好的习惯,也是一种落后的做法,但有什么方法不这么做呢?我见过APACHE的OPEN SOURCE 里面有一个东西可以这样做,但要把它和通常的JSP,SERVLET等J2EE整合起来还是...
前几天听人说直接把SQL语句直接写在JAVA代码里是一种不好的习惯,也是一种落后的做法,但有什么方法不这么做呢?我见过APACHE的OPEN SOURCE 里面有一个东西可以这样做,但要把它和通常的JSP,SERVLET等J2EE整合起来还是很麻烦,哪位知道有什么别的办法???
|
通常是这样讲,SQL写到JAVA里的那些JAVA类是真正实现业务逻辑的类,这些类不包含数据库的连接和操作,数据库的连接和操作是写在另外的类里。如果包含数据库连接和操作的话,才是说是一种不好的习惯。
|
同意路人甲, 一般SERVLET / JSP 包含SQL 是方便的做法, 不包含数据库的连接和操作就可以了 (用CONNECTION BEAN).
用EJB 的話, 可以更好, 分SESSION BEAN , ENTITY BEAN, 做到J2EE 的5-TIER
用EJB 的話, 可以更好, 分SESSION BEAN , ENTITY BEAN, 做到J2EE 的5-TIER
|
实际上如果要程序员自己在程序里面写sql文的话,说明模块间的耦合度已经很高了(详情可参见《建模鸡汤》一文)。一般都是把sql文提到专门的文件中,由专门的数据库人员书写。程序员只要在用的时候取出来,设上参数就行了。
|
sql 作为参数来传递比较好
|
可以使用存储过程,对数据库操作
|
用Data Access Object, Data Access Object 內有SQL, 但不作BUSINESS LOGIC, 由SESSION BEAN 做BUSINESS LOGIC
|
存储过程不是好方法, 用存储过程一定有部份BUSINESS LOGIC 落到BACKEND DB LAYER, BUSINESS LOGIC 更改時要DB內更改, 同時不能輕易作DB ENGINE 轉換 (例如由SQL SERVER 到ORACLE, 存储过程不一定可以運行). 不合MULTI-TIER 的原則
|
可以使用中中间服务,或者写数据库存储过程。
中间服务:介于数据库服务器与客户端之间,实现数据中转,这样可能响应速度会受影响,但对数据库安全性来说好的,可以在中间应用层加些权限判断,对于非法用户的连接请求,不予以处理。
存储过程:也是非常好的方法,即利用数据库运行复杂的计算,节省客户端与服务器的网络响应时间。
中间服务:介于数据库服务器与客户端之间,实现数据中转,这样可能响应速度会受影响,但对数据库安全性来说好的,可以在中间应用层加些权限判断,对于非法用户的连接请求,不予以处理。
存储过程:也是非常好的方法,即利用数据库运行复杂的计算,节省客户端与服务器的网络响应时间。