社区
Java EE
帖子详情
有关SSI的问题,求大牛指点,3Q!!!
蘑菇頭
2012-04-23 02:15:45
今天项目碰到了一个问题:
ibatis做数据持久层,现在碰到了一个问题,就是——开发的项目 我如何做,才能使自己写的一条SQL 既能访问oracle和mysql呢???
目的:为了方便以后维护,我们只需要写一个SQL,使其自动识别是oracle还是mysql。
言简意赅:
写一条SQL ,它既能操作oracle也能操作mysql
求提供思路
在线坐等…… 亲们,谢谢……
...全文
275
25
打赏
收藏
有关SSI的问题,求大牛指点,3Q!!!
今天项目碰到了一个问题: ibatis做数据持久层,现在碰到了一个问题,就是——开发的项目 我如何做,才能使自己写的一条SQL 既能访问oracle和mysql呢??? 目的:为了方便以后维护,我们只需要写一个SQL,使其自动识别是oracle还是mysql。 言简意赅: 写一条SQL ,它既能操作oracle也能操作mysql 求提供思路 在线坐等…… 亲们,谢谢……
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
25 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fangkaifang
2012-04-25
打赏
举报
回复
楼主 别纠结了 写两套呗 反正你说的分页 查询啥的 sql也比较简单
蘑菇頭
2012-04-25
打赏
举报
回复
[Quote=引用 23 楼 的回复:]
楼主 别纠结了 写两套呗 反正你说的分页 查询啥的 sql也比较简单
[/Quote]
额 ,这个 这个…… ╮(╯▽╰)╭ 看来 方案 貌似……
不知道 用 ibatis和hibernate的区别,除了优化数据库意外的其他优缺点在哪里???
有木有解答的 , 额 对了 google 一下先……
蘑菇頭
2012-04-24
打赏
举报
回复
坐等 啊 期待大神的 出现………………
蘑菇頭
2012-04-24
打赏
举报
回复
[Quote=引用 17 楼 的回复:]
引用 16 楼 的回复:
其实这个不是难题。要知道hibernate能够进行这样的切换,靠的什么东西?如果你知道Hibernate靠的什么就很好解决这样的问题。
我就拿一个分页来说吧。在很多数据库中他们的分页SQL都是不一样的。就像LZ说的那个limit (mysql),top (MS)等
将以上提到的信息进行分解。问题就很好解决了。
解决过程:
1.通过使用方言的标示,来说明当前使……
[/Quote]
知己啊 心声 泪奔ing…………
蘑菇頭
2012-04-24
打赏
举报
回复
[Quote=引用 17 楼 的回复:]
引用 16 楼 的回复:
其实这个不是难题。要知道hibernate能够进行这样的切换,靠的什么东西?如果你知道Hibernate靠的什么就很好解决这样的问题。
我就拿一个分页来说吧。在很多数据库中他们的分页SQL都是不一样的。就像LZ说的那个limit (mysql),top (MS)等
将以上提到的信息进行分解。问题就很好解决了。
解决过程:
1.通过使用方言的标示,来说明当前使……
[/Quote]
知己啊 心声 泪奔ing………………
安特矮油
2012-04-24
打赏
举报
回复
如果是普通查询分页什么的,用ibatis的<include refid=""/>其分页语句就好,根据不同的数据库引入不同的分页部分
intrejj
2012-04-24
打赏
举报
回复
[Quote=引用 16 楼 的回复:]
其实这个不是难题。要知道hibernate能够进行这样的切换,靠的什么东西?如果你知道Hibernate靠的什么就很好解决这样的问题。
我就拿一个分页来说吧。在很多数据库中他们的分页SQL都是不一样的。就像LZ说的那个limit (mysql),top (MS)等
将以上提到的信息进行分解。问题就很好解决了。
解决过程:
1.通过使用方言的标示,来说明当前使用的数据库是什么……
[/Quote]
很多东西说得容易,想起来也容易,但实现起来就不是那回事了!
首先要求只写一套SQL(该要求中),能够在两个数据库中执行,要想通用,除非数据库很精通!
其次你说用方言标示,来说明当前使用的数据库,这点有什么意思!这种相当于写两套SQL,系统自动识别是可以的,但要求是只写一套SQL.
Hibernate能够通过方言实现跨数据库平台,是因为其作者相当于自己实现一套HQL等,再根据你配置的方言编译、转化为该数据库的Native SQL,难道这个过程你能够简单的就实现的了,好说,如果你能够实现,那就不叫IBatis了,那就是Hibenate的克隆了!使用Ibatis的原因就是想数据库自己优化,这样的话就不可能了,那还不如干脆直接使用Hibernate了!
cjoy4856
2012-04-24
打赏
举报
回复
[Quote=引用 17 楼 的回复:]
引用 16 楼 的回复:
其实这个不是难题。要知道hibernate能够进行这样的切换,靠的什么东西?如果你知道Hibernate靠的什么就很好解决这样的问题。
我就拿一个分页来说吧。在很多数据库中他们的分页SQL都是不一样的。就像LZ说的那个limit (mysql),top (MS)等
将以上提到的信息进行分解。问题就很好解决了。
解决过程:
1.通过使用方言的标示,来说明当前使……
[/Quote]
hibernate没有你想的那么神奇。通过hibernate的code为证:
oracle的分页查询(类名称Oracle9iDialect)
public String getLimitString(String sql, boolean hasOffset) {
sql = sql.trim();
boolean isForUpdate = false;
if (sql.toLowerCase().endsWith(" for update")) {
sql = sql.substring(0, sql.length() - 11);
isForUpdate = true;
}
StringBuffer pagingSelect = new StringBuffer(sql.length() + 100);
if (hasOffset) {
pagingSelect.append("select * from ( select row_.*, rownum rownum_ from ( ");
}
else {
pagingSelect.append("select * from ( ");
}
pagingSelect.append(sql);
if (hasOffset) {
pagingSelect.append(" ) row_ where rownum <= ?) where rownum_ > ?");
}
else {
pagingSelect.append(" ) where rownum <= ?");
}
if (isForUpdate) {
pagingSelect.append(" for update");
}
return pagingSelect.toString();
}
MYSQL (类名称MySQLDialect)
public String getLimitString(String sql, boolean hasOffset) {
return sql.length() + 20 + sql + (hasOffset ? " limit ?, ?" : " limit ?");
}
以上均为Hibernate的源码
cjoy4856
2012-04-23
打赏
举报
回复
其实这个不是难题。要知道hibernate能够进行这样的切换,靠的什么东西?如果你知道Hibernate靠的什么就很好解决这样的问题。
我就拿一个分页来说吧。在很多数据库中他们的分页SQL都是不一样的。就像LZ说的那个limit (mysql),top (MS)等
将以上提到的信息进行分解。问题就很好解决了。
解决过程:
1.通过使用方言的标示,来说明当前使用的数据库是什么
2.将分页的所有的标准SQL写好(数据库商家的标准SQL)
3.哪就是使用Refact的问题了。
我也只能够跟你说这些了。提供思路吧,方法也很简单。
蘑菇頭
2012-04-23
打赏
举报
回复
[Quote=引用 14 楼 的回复:]
还是用Hibernate好点,这种问题很轻松解决叻 ... ... ...
[/Quote]
亲, 能说说 思路 啥的…………
tao_tao
2012-04-23
打赏
举报
回复
还是用Hibernate好点,这种问题很轻松解决叻 ... ... ...
蘑菇頭
2012-04-23
打赏
举报
回复
[Quote=引用 11 楼 的回复:]
简单的查询啊啥的 语法可以通用 其他的不玩熟了还真不知道。。。。建议楼主不要想着走捷径了。。。
[/Quote]
这个…… 项目牵扯到 分页、增上改查 等等…… 所以……
想看看大家 有木有好的解决方案……
fangkaifang
2012-04-23
打赏
举报
回复
简单的查询啊啥的 语法可以通用 其他的不玩熟了还真不知道。。。。建议楼主不要想着走捷径了。。。
fangkaifang
2012-04-23
打赏
举报
回复
简单的查询啊啥的 语法可以通用 其他的不玩熟了还真不知道。。。。建议楼主不要想着走捷径了。。。
蘑菇頭
2012-04-23
打赏
举报
回复
[Quote=引用 8 楼 的回复:]
不想写两套的代价是写十套,你不把oracle和mysql都玩明白了,不可能写出来真正通用的,
简单的不带函数的 基本语法都一样。
[/Quote]
0.0 亲, 这个…… 这个…………
蘑菇頭
2012-04-23
打赏
举报
回复
[Quote=引用 7 楼 的回复:]
引用 6 楼 的回复:
引用 5 楼 的回复:
只要用标准SQL92的语法,好多数据库都可以执行
可以针对每种数据库写专用xml文件,通过配置文件切换
其实 之所以 这么问 也就是想说: 在oracle和mysql之间,我们 不想写两套SQL
看看 有木有解决方案什么的……呵呵……
有的语法是可以两种数据库都支持的 有的不行 比如一些函数 关键字 ……
[/Quote]
恩 是啊 这个 我知道 , 就是 想看看 都支持的,嘿嘿…… 木有不可能,只有想不到啊……
forgetsam
2012-04-23
打赏
举报
回复
不想写两套的代价是写十套,你不把oracle和mysql都玩明白了,不可能写出来真正通用的,
简单的不带函数的 基本语法都一样。
fangkaifang
2012-04-23
打赏
举报
回复
[Quote=引用 6 楼 的回复:]
引用 5 楼 的回复:
只要用标准SQL92的语法,好多数据库都可以执行
可以针对每种数据库写专用xml文件,通过配置文件切换
其实 之所以 这么问 也就是想说: 在oracle和mysql之间,我们 不想写两套SQL
看看 有木有解决方案什么的……呵呵……
[/Quote]
有的语法是可以两种数据库都支持的 有的不行 比如一些函数 关键字 什么的
蘑菇頭
2012-04-23
打赏
举报
回复
[Quote=引用 5 楼 的回复:]
只要用标准SQL92的语法,好多数据库都可以执行
可以针对每种数据库写专用xml文件,通过配置文件切换
[/Quote]
其实 之所以 这么问 也就是想说: 在oracle和mysql之间,我们 不想写两套SQL
看看 有木有解决方案什么的……呵呵……
15年老程创业中
2012-04-23
打赏
举报
回复
只要用标准SQL92的语法,好多数据库都可以执行
可以针对每种数据库写专用xml文件,通过配置文件切换
加载更多回复(4)
ssi
例子
ssi
例子
ssi
例子
ssi
例子
ssi
例子
ssi
例子
ssi
例子
ssi
例子
ssi
例子
ssi
例子
ssi
例子
ssi
例子
ssi
例子
ssi
例子
ssi
例子
ssi
例子
ssi
例子
ssi
例子
ssi
例子
ssi
例子
ssi
例子
ssi
例子
ssi
例子
ssi
例子
ssi
三大框架
ssi
框架结合mysql数据库,搭建好的一个框架,方便使用
手把手构建Maven企业级应用(整合
SSI
框架).pdf
网上其实整合框架的资料其实很多的,但是其中整合
SSI
的相对比较少的,如果是用Maven整合的就是少之又少的,如果是用Maven构建的企业级应用(多模块开发)整合
SSI
框架的实例基本上是没有的,所以写下这篇教程(当然这个教程其实算是入门级的多模块应用程序开发),希望那些新手们做类似的开发时可以少走些弯路,当然也热烈欢迎大牛
指点
不足。
SSI
_Library.rar_
SSI
_
SSI
Verilog_logic_
ssi
verilog_verilog
ssi
SSI
library, Logic gates verilog codes
SSI
类管理系统框架
ssi
Java EE
67,513
社区成员
225,879
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章