ibatis 开发中的经验 (一)ibatis 和hibernate 在开发中的理解

我不是女神ヾ 2022-08-27 07:51 251阅读 0赞
  1. 这个项目的底层是用ibatis框架完成,这几天也是都在用这个框架写代码,也有了一些简单的理解,把项目拿过来后主要的配置都已经配置好了,比如一些事务、日志控制等,在开发中主要用到的是写SQL语句以及熟悉ibatis xml文件都提供的一些标签,这些标签大部分是用来处理判断、逻辑,使得sql可以动态组装变的更灵活。
  2. 在写代码的工作量上ibatis要比hibernate高一些,在你写了服务层后还需要些dao层,dao层实现,然后这些在hibernate中不需要自己写,只写到服务层就可以调用hibernate提供的对象直接操纵数据,利用hibernate自己封装的一些方法完成数据库的增删该茶,hibernate是从java实体类映射到了数据库表,我们调用它提供的方法就可以完成操作数据库,sql语句会更具调用了它的什么方法自动生成,ibatis是封装了java实体类到sql语句,执行sql到数据还需要一个过程也是ibatis封装实现,相比开发者写的代码是不是少了很多呢。
  3. 什么时候使用哪一个框架更好一些?
  4. ibatis适合在需要往一个系统里面增加新功能,但是表结构不可以改动的情况,因为ibatis在数据库操作细节上比hibernate要灵活很多,它是面向SQL语句的框架而hibernate直接面向表结构,如果要改变表结构改动的地方会比较多。
  5. 对于高并发、很大的数据量系统中,使用ibatis效果要比hibernate好,我们可以自己写优化效率高的sql语句和存储过程来解决高数据量问题,从目前开发来看hibernate写出来的hsql语句不容易优化,关系越复杂效率就会越慢,当然没有什么是一成不变的hibernate也会自己支持原生SQL语句,完善自己一些不完美的地方。
  6. 在一个系统的维护上也显然易见,ibatis占有明显优势它把sql写在了配置文件里面,维护的时候假如需要改变某个查询功能,在配置文件里面改改就可以完成,如果是hibernate就需要改动代码并重新编译。
  7. 下面这张是ibatis原理图

SouthEast

  1. 图中左边是传入参数类型、右边是返回结构类型,中间是配置文件信息,它支持基本数据类型(int/string/boolean)以及对象、map等类型数据,用起来也比较方便。
  2. sqlMap-Config.xml相当于hibernate.cfg.xml文件,sqlmap.xml相当于资源文件,例如下配置信息
  3. 举一个查询的例子:一个简单的下拉列表框查询
  4. select加载过程
  5. 当加载select标签的时候,默认选中option子标签有selected=true的那个option,选中标签之后会把optionvalue属性值赋给select标签的value属性,如果optionvalue为空,将<option>测试</option>这两个开始和结束标签值赋给select,该实现即是利用了这个赋值过程,value值分为给了012三个值表示三种类型的查询条件。
  6. JSP页面如下
  7. <span class="STYLE1">
  8. 请选择查询方式:
  9. <select name="selectType" value="">
  10. <option <%=selected=="default"? "selected=true" :"" %> value="0">按默认查询</option>
  11. <option <%=selected=="name"? "selected=true" :"" %> value="1">按类型查询</option>
  12. <option <%=selected=="companyname"? "selected=true" :"" %> value="2">按公司查询</option>
  13. </select>
  14. 请输入关键字:
  15. </span>
  16. <!-- Transaction manager for a single JDBC DataSource DAO IoC -->
  17. <bean id="transactionManager"
  18. class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  19. <property name="dataSource">
  20. <ref local="dataSource" />
  21. </property>
  22. </bean>
  23. <!-- Apache Database Connection Pool -->
  24. <bean id="dataSource"
  25. class="org.apache.commons.dbcp.BasicDataSource"
  26. destroy-method="close">
  27. <property name="driverClassName">
  28. <value>${db.driver}</value>
  29. </property>
  30. <property name="url">
  31. <value>${db.url}</value>
  32. </property>
  33. <property name="username">
  34. <value>${db.user}</value>
  35. </property>
  36. <property name="password">
  37. <value>${db.password}</value>
  38. </property>
  39. </bean>
  40. <!-- sqlMapClient for DAOIbatisImpl -->
  41. <bean id="sqlMapClient"
  42. class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
  43. <property name="configLocation">
  44. <value>classpath:sql-map-config.xml</value>
  45. </property>
  46. <property name="dataSource">
  47. <ref bean="dataSource" />
  48. </property>
  49. <property name="lobHandler" ref="lobHandler"/>
  50. </bean>
  51. <bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler"/>
  52. sqlmap.xml代码
  53. <?xml version="1.0" encoding="UTF-8"?>
  54. <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
  55. <!--
  56. Note: auto-generated at 2006-7-6 16:05:43.
  57. -->
  58. <sqlMap namespace="ns">
  59. <resultMap id="orgInfoChildId" class="com.zhjy.domain.Organization">
  60. <result column="id" property="id" jdbcType="VARCHAR" />
  61. <result column="parent_id" property="pid" jdbcType="VARCHAR" />
  62. <result column="name" property="name" jdbcType="VARCHAR" />
  63. <result column="isParent" property="isParent" jdbcType="VARCHAR" />
  64. <result column="checked" property="checked" jdbcType="VARCHAR" />
  65. <result column="open" property="open" jdbcType="VARCHAR" />
  66. </resultMap>
  67. <!-- 根据左侧树查询记录语句开始 -->
  68. <select id="ns.findContacts_count" resultClass="java.lang.Integer"
  69. parameterClass="java.util.Map">
  70. SELECT COUNT(ID)
  71. FROM category,contactinfo,category_contactinfo
  72. WHERE category.ID=category_contactinfo.CATEGORY_ID AND contactinfo.contactid=category_contactinfo.CONTACT_ID
  73. <isEqual prepend="and" property="selectType" compareValue="1">
  74. <isNotEmpty prepend="" property="keyword">
  75. name like '%$keyword$%'
  76. </isNotEmpty>
  77. </isEqual>
  78. <isEqual prepend="and" property="selectType" compareValue="2">
  79. <isNotEmpty prepend="" property="keyword">
  80. companyname like '%$keyword$%'
  81. </isNotEmpty>
  82. </isEqual>
  83. <isEqual prepend="and" property="selectType" compareValue="0">
  84. <isNotEmpty prepend="" property="keyword">
  85. (name like '%$keyword$%'
  86. </isNotEmpty>
  87. <isNotEmpty prepend="or" property="keyword">
  88. companyname like '%$keyword$%')
  89. </isNotEmpty>
  90. </isEqual>
  91. <isNotEmpty prepend="and" property="id">
  92. id=#id:VARCHAR#
  93. </isNotEmpty>
  94. </select>
  95. </sqlMap>
  96. 这个是动态加载查询条件,以后如果新增了查询选项相应的改改配置文件就可以,不需要再改动代码里面的东西,比以前灵活了i些。
  97. ibatis还在使用和熟悉中……

发表评论

表情:
评论列表 (有 0 条评论,251人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ibatishibernate区别

    Hibernate简介 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵

    相关 hibernateibatis区别

    项目也做过几个, 使用IBatis就做一个项目, 基本上都是使用Hibernate, 也只是知道几点关于这两个框架的区别, 今天闲着没事干, 从网上找了几篇文章, 做了一个简单

    相关 HibernateIBatis对比

    项目也做过几个, 使用IBatis就做一个项目, 基本上都是使用Hibernate, 也只是知道几点关于这两个框架的区别, 今天闲着没事干, 从网上找了几篇文章, 做了一个简单

    相关 ibatis$#区别

    在sql配置中比如in(rewr) 与in ($rewr$) 在Ibatis中我们使用SqlMap进行Sql查询时需要引用参数,在参数引用中遇到的符号和$之间