该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-12-12
突然想到是否应该加上一个在注解上写sql的功能。
这样看起来确实比较狂酷霸拽,更容易赢得少男少女们的青睐。 真没想到结果集实体映射能变成mybatis的一个优点(?),真为springjdbctemplate和dbutil 表示惋惜,这两位只能支持固定命名规则的sql映射 |
|
返回顶楼 | |
发表时间:2011-12-12
aa87963014 写道 突然想到是否应该加上一个在注解上写sql的功能。
这样看起来确实比较狂酷霸拽,更容易赢得少男少女们的青睐。 真没想到结果集实体映射能变成mybatis的一个优点(?),真为springjdbctemplate和dbutil 表示惋惜,这两位只能支持固定命名规则的sql映射 自己写了个 FreyjaJdbcTemplate ,不错,挺好的。 不过我想知道, FreyjaJdbcTemplate 和 mybatis相比有什么优点? |
|
返回顶楼 | |
发表时间:2011-12-12
没有喜欢与不喜欢,只要能实现所要的功能就行。曾经也想过自己重新写,后来想想,最后可能也会变得跟mybatis差不多,还不如在mybatis的基础上进行修改与定制(事实上用dotnet时就写过类似的东东)。
1、动态SQL使用场景之一 查询 + 列表页面(或者单是列表),根据不同的条件显示数据,或者查询数据。 前台的查询条件不可能一成不变,客户某天对你说,把XXX查询条件也加上去吧。此时用mybatis开发的需要做什么? a、在前台页面增加一个<input /> b、在后台修改XML,增加查询条件 <if test="salerId != null and salerId != '' "> and t.saler_id = #{salerId} </if> OK,完成,不需要重启。 下面是动态SQL的一个实际例子: <select id="getProductResource" parameterType="map" resultType="map"> select t.type_name, t.product_name, t.product_no, t.product_price, t.is_sales, t.no_id from product_detail t , xxxxx_xxx where t.res_status = 10 and t.wayid = #{user.deptId} <if test="TypeCode != null and TypeCode != ''"> and t.type_code = #{TypeCode } </if> <if test="productNo!= null and productNo!= ''"> and t.product_nolike = #{productNo} </if> <!-- 此处省略 ...... --> order by <if test="sortname != null and sortname != ''"> ${sortname} ${sortorder}, </if> t.type_code,t.product_name,t.product_no </select> 2、关于DBA优化SQL语句的问题 实际上大多数的DBA并不负责修改SQL语句,只负责将性能差的SQL语句找出来,对Oracle来说,也就是跟你生成一下AWR报告并解读一下,剩下就是项目组的事。 暂时还没有见到有哪个系统运行过几年后不需要优化的,数据量跟系统上线时已经不是一个数据级了。此时如果SQL语句不在XML文件里,如果优化?加加索引就能解决的优化根本就不叫优化,是数据库设计的问题。 应用届生开发的系统也不少吧,他们写的SQL不知道你们见过没,普遍都存在问题(当然,不是全部)。此时,修改XML里的SQL一般都能有比较好的效果。 3、mybatis已经支持在注解里写SQL,不要喷,关键是看使用者怎么用。如果把一些不经常变的SQL放在注解里不好吗,避免一大堆读不懂的XML出现,如果单表DAO。自动生成的代码片段: @Delete({ "delete from SYS_INTER_LOGS", "where LOG_ID = #{logId,jdbcType=VARCHAR}" }) int deleteByPrimaryKey(String logId); |
|
返回顶楼 | |
发表时间:2011-12-12
ls, 需求变动。。。不是重启不重启的事情。
to:mikewang freyjaJdbcTemplate不是为了处理那些无聊的结果集实体映射。当然这部分已经ok了。原生sql随便你写。 特色之一应该是缓存的处理。 不过话说实体映射的支持做得也不错。 |
|
返回顶楼 | |
发表时间:2011-12-12
aa87963014 写道 ls, 需求变动。。。不是重启不重启的事情。
to:mikewang freyjaJdbcTemplate不是为了处理那些无聊的结果集实体映射。当然这部分已经ok了。原生sql随便你写。 特色之一应该是缓存的处理。 不过话说实体映射的支持做得也不错。 我先喷你一句, 你给我找个能用的缓存出来,让我看看呢。 另外, 你解释一下, 什么不用数据库自带的缓存? 例如 oracle 的 big pool |
|
返回顶楼 | |
发表时间:2011-12-12
ls 你喷的这个就等于喷hibernate的一级缓存二级缓存和mybatis的缓存。
这2个框架的作者到底是脑袋被门夹了呢?我不知道有没有被夹 |
|
返回顶楼 | |
发表时间:2011-12-12
不多说,先把你的freyjaJdbcTemplate mark一下,年后对mybatis开刀前对比一下,看看实现了哪些mybatis没有的功能,而又需要的。大家所经历过的项目和系统类型都不一样,适合自己的才是最好的。
|
|
返回顶楼 | |
发表时间:2011-12-12
并没有所谓的功能差异,如果你能知道为什么springjdbctemplate和dbutils 为什么不能像hibernate、mybatis一样做到随意的结果集实体映射,你就会知道这些框架各自之间到底在哪里。
|
|
返回顶楼 | |
发表时间:2011-12-12
最后修改:2011-12-12
aa87963014 写道 ls 你喷的这个就等于喷hibernate的一级缓存二级缓存和mybatis的缓存。
这2个框架的作者到底是脑袋被门夹了呢?我不知道有没有被夹 你说的没错, hibernate的 缓存确实没什么用处,在实际项目中还真没什么用处(写个论坛什么的除外) 而且, oracle 的技术人员还公开质疑过此缓存的必要性。 对于orm (或者说是, sqlmap ) 框架来说, 缓存确实是最没有意义,是不需要关注的部分。 因为在数据层面,数据库可以做的比你更好, 在业务层面, 缓存必须自己设计,没法通用。 当然,带一个缓存,确实显得比较cooooool,尽管没什么用处。 这个也是mybatis 并不提倡你用缓存的原因。 |
|
返回顶楼 | |
发表时间:2011-12-12
最后修改:2011-12-12
缓存越接近表面越有用,我觉得hibernate和mybatis的缓存弱爆了,他们有着与springjdbctemplate和dbutil之类的框架没有的东西,却没有好好的利用。
每个使用过hibernate、mybatis缓存的人应该都会觉得hibernate、mybatis缓存没有什么价值。 这是很正常的,因为他们没有管理过缓存。 我的框架还有一点部分没处理完,之后可以给大家看看。缓存是如何提高程序的性能的! |
|
返回顶楼 | |