当前位置: 代码迷 >> SQL >> 改建iBatis,使其支持自动生成sql语句(2)
  详细解决方案

改建iBatis,使其支持自动生成sql语句(2)

热度:54   发布时间:2016-05-05 13:05:54.0
改造iBatis,使其支持自动生成sql语句(2)

改造iBatis,使其支持自动生成sql语句(2)

  上篇讲到基本思路和代码修改的切入点。这篇继续讲实现的细节的demo。

  在生成iql语句时,generate前面和后面的iql语句给予保留,充分保留最大的灵活性。

  在生成iql语句时候后,在调用insert和update时,转入的parametarObject必须是parametermap规定的Object,在select和delete时,如果parameter只有1个,则会把iql变量替换成#value#。

?sql-map 代码

  1. <!---->xml?version="1.0"?encoding="UTF-8"?>??
  2. <!---->
  3. ????"http://ibatis.apache.org/dtd/sql-map-2.dtd">??
  4. ??
  5. <sqlMap?namespace="sort">??
  6. ??<typeAlias?alias="Sort"?type="com.cpcw.product.domain.Sort"/>??
  7. ??
  8. ??<parameterMap?id="SortParameterMap"?class="Sort">??
  9. ????<parameter?property="name"?column="name"?jdbcType="VC"/>??
  10. ????<parameter?property="fid"?column="fid"?jdbcType="INTEGER"/>??
  11. ????<parameter?property="status"?column="status"?jdbcType="INTEGER"/>??
  12. ????<parameter?property="notes"?column="notes"?jdbcType="VC"/>??
  13. ????<parameter?property="created"?column="created"?jdbcType="TIMESTAMP"/>??
  14. ??parameterMap>??
  15. ??
  16. ??<parameterMap?id="SortParameterFulMap"?class="Sort"?extends="SortParameterMap">??
  17. ????<parameter?property="id"?column="id"?jdbcType="INTEGER"/>??
  18. ??
  19. ??parameterMap>??
  20. ??
  21. ??<parameterMap?id="SortParameterDeleteMap"?class="Sort">??
  22. ????<parameter?property="id"?column="id"/>??
  23. ??parameterMap>??
  24. ??
  25. ??<select?id="selectSort"?parameterMap="sort.SortParameterFulMap"?resultClass="Sort">??
  26. ????select?*?from?( ??
  27. ????<generate?table="sort"?where="id"/>??
  28. ????)?a?order?by?id?desc?limit?1 ??
  29. ??select>??
  30. ??
  31. ??<insert?id="createSort"?parameterMap="sort.SortParameterMap">??
  32. ????<selectKey?keyProperty="id"?resultClass="int"?type="post">??
  33. ??????select?last_insert_id()?as?value ??
  34. ????selectKey>??
  35. ????<generate?table="sort"/>??
  36. ??insert>??
  37. ??<update?id="updateSort"?parameterMap="sort.SortParameterFulMap">??
  38. ????<generate?where="id"?table="sort"?excludes="{status,created}"/>??
  39. ??update>??
  40. ??
  41. ??<delete?id="deleteSort"?parameterMap="sort.SortParameterDeleteMap">??
  42. ????<generate?table="sort"?where="id"/>??
  43. ??delete>??
  44. ??
  45. ??
  46. sqlMap>??

?

java 代码
  1. public?Sort?getSortById(int?id)?{ ??
  2. ??return?(Sort)?queryForObject("sort.selectSort",?new?Integer(id)); ??
  3. } ??
  4. ??
  5. public?int?createSort(Sort?sort)?{ ??
  6. ??insert("sort.createSort",?sort); ??
  7. ??return?sort.getId(); ??
  8. } ??
  9. ??
  10. public?int?updateSort(Sort?sort)?{ ??
  11. ??return?update("sort.updateSort",?sort); ??
  12. } ??
  13. ??
  14. public?int?deleteSort(int?id)?{ ??
  15. ??return?delete("sort.deleteSort",?new?Integer(id)); ??
  16. }??

?

生成的IQL?代码
  1. ??select:
  2. ??select?*?from?( ??
  3. ????select?name?as?name,?fid?as?fid,?status?as?status,?notes?as?notes,?created?as?created,?id?as?id?from?sort?where?id?=?#value# ??
  4. ????)?a?order?by?id?desc?limit?1 ??
  5. ?? ??
  6. inesrt:???????
  7. ????insert?into?sort?(name,?fid,?status,?notes,?created)?values?(#name:VC#,?#fid:INTEGER#,?#status:INTEGER#,?#notes:VC#,?#created:TIMESTAMP#) ??
  8. ?? ??
  9. update:
  10. ????update?sort?set?name?=?#name:VC#,?fid?=?#fid:INTEGER#,?notes?=?#notes:VC#,?id?=?#id:INTEGER#?where?id?=?#id:INTEGER# ??
  11. delete
  12. ????delete?from?sort?where?id?=?#value#??

?原创文章,如果要转载请注明出处、原始地址和作者信息。?

1 楼 abx01 2007-12-10  
支持,强捍的试验田
2 楼 bukebushuo 2007-12-20  
想法和创意不错!
  相关解决方案