该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-08-29
ibatis是王道啊,呵呵:)
既可以研究深入的sql,又能方便的映射对象 |
|
返回顶楼 | |
发表时间:2008-08-29
QBE确实挺好的,不过用静态语言实现起来不是很方便,因为QBE从本质上说是一种dsl
在QBE中需要处理几个结构的表达 between 这个一般采用 a:b这种形式 ,例如 1:100 in 可以直接用 in(1,2,5,6)这样 like 这种可以通过判断字符串中是否有% _ 这样的来决定是否要like hibernate和ibatis要处理这些好像都不是很方便 用sql写可能更好些,用map获取这些参数,然后解析字符串 自己写拼sql的基础设施好像不是很难呀,不明白为什么要用hibernate,ibatis这些东东 |
|
返回顶楼 | |
发表时间:2008-08-30
Hibernate的QBDC楼上的没用过吧。
自己手动拼sql是万恶之源。 相比之下iBatis比较适合楼上的。 |
|
返回顶楼 | |
发表时间:2008-08-30
各有各的特点。每一种方式应该有一种操作规范,保证正确性,性能,安全等
|
|
返回顶楼 | |
发表时间:2008-08-31
需求是千变万化的。
能满足需求即是合理的。 Hibernate, ibatis, 抑或JDBC,又有什么关系? |
|
返回顶楼 | |
发表时间:2008-08-31
其实你做的不错 只不过现在垃圾比较多 都不明白你 不过我还是支持下你吧
|
|
返回顶楼 | |
发表时间:2008-08-31
jdbc不是更好吗?还要用hibernate! 根据实际情况用吧!又是叫全部用jdbc做!大杂烩也可以呀!
|
|
返回顶楼 | |
发表时间:2008-09-01
movingboy 写道 ray_linn 写道 浪费这么多行代码,做的都是无用功。
能否请你说明一下为何你认为这么做是浪费,是做无用功?对于文中提到的问题,你会怎么解决呢? 连基本的查询方式in range, (26<会员.age<35)都没办法做到,是不是毫无价值? 要解决这个问题很简单,我写个HSQLTemplate <dynamic-query name="memberList"> from Member m where [#Mix<m.age<#Max] and (m.salary>#salary) and [m.city in (@city)] and m.gender=#gender </dynamic-query> # 代表变量, @代表集合,[] 代表若变量为null,则该条件被忽略。俺只需要把HSQLTemplate注入DAO中,接受一个Map作为参数就可以完成HSQL的自动拼装。 这样的HSQL生成器不难吧? 这样的查询不过分吧?包括了in range和in list 你的QBE根本就做不到,就是做到了也是麻烦得不得了。 |
|
返回顶楼 | |
发表时间:2008-09-01
终于看到顺眼的解决方案了
|
|
返回顶楼 | |
发表时间:2008-09-01
Hibernate 的Cirteria 本意是好的,但在实际项目中,最好别用它,因为实际项目中的查询大部分是复杂查询。我给大家介绍一个我认为最好的方法,iBatis 还是太难用了。
1 要用HQL或者 native SQL; 2.要解决参数的占位符问题; 3.要解决动态HQL或SQL问题; 4.要解决数据库表到对象的映射问题。 第二条方案 用named parameter,need to prprocess the sql statement. 第三条方案,用Velocity 或者FreeMarker 模板解决。 第四条方案,用JAVA Reflection 自动映射。 例子: SELECT FIRST_NAME firstName ,LAST_NAME lastName from users u where 1=1 #if($firstName) and u.first_name like #{firstName} #end #if($lastName) and u.last_name like #{lastName} #end Java code: Map map=new HashMap(); map.put("firstName",u.firstName); map.put("lastName", u.lastName); List<UserVO> userList=dao.findList(map, "yourSQLName",UserVO.class); |
|
返回顶楼 | |