ibatis配置详解

news/2024/5/19 1:22:52 标签: iBATIS, JDBC, SQL, MySQL, XML

ibatis配置详解

ibatis与hibernate都是持久层的额技巧框架,这里看看ibatis的配置:作为自己以后的参考:
  ibstis的配置重要由两种文件,
  (一)有关项目标总体配置,如衔接的数据源,衔接池,缓存等的配置,也即sqlmapconfig.xml文件的配置。
  (二)sqlmap.xml文件的配置,也即对象与表的操作映射的配置。
下面分两个部分进行记载

第一部分    sqlmapconfig.xml

在这个文件中总共的构造如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "
http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>

  <!-- 这里进行文件的注释阐明 -->

  <properties resource="">       ------->在这里将项目(工程)的所有资源文件包括进来,将相对与src路径的资源文件的路径以及文件名包括进来


  <settings  cacheModelsEnabled="true"  --->全局把持sqlMapClient的缓存
              enhancementEnabled="true" --->全局把持运行时字节码加强,优化javabean的属性性能
              lazyLoadingEnabled="true"  --->延迟加载
              errorTracingEnabled="true"
              maxRequests="32"   ---->同时履行sql语句的最大线程数,通常大小是maxTransactions的10倍,并且总是大于maxTransactions和maxSessions的总和。减小这个值能够进步性能。
              maxSessions="10"
              maxTransactions="5"
              useStatementNamespaces="false"  --->是否启动全局的sqlmap名字空间。假如启动则利用时,必需加上名字空间:queryForObject(sqlMap的名字空间.statementName)

  />  --------->这个节点是设置工程的总体性能,依据名称来设置

  
  <typeAlias alias="person" type="com.Jdnis.ibatis.model.Person" />
  ----->这个节点是将长的路径名等用短的进行替换,也就是用上面的person来代表右边的person类

   
    <transactionManager type="JDBC">  -->type指定事务治理器:JDBC,JTA,EXTERNAL,三者的差别后面再讲到
        <dataSource type="SIMPLE">  -->type值由:SIMPLE,DBCP,JNDI三者的应用后面再讲
            <property name="JDBC.Driver" value="com.mysql.jdbc.Driver" />
            <property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost/person" />
            <property name="JDBC.Username" value="root" />
            <property name="JDBC.Password" value="root" />
            <property name="Pool.MaximumActiveConnections" value="10" />
            <property name="Pool.MaximumIdleConnections" value="5" />
            <property name="Pool.MaximumCheckoutTime" value="120000" />
            <property name="Pool.TimeToWait" value="500" />
            <property name="Pool.PingQuery" value="select 1 from sample" />
            <property name="Pool.PingEnabled" value="false" />
            <property name="Pool.PingConnectionsOlderThan" value="1" />
            <property name="Pool.PingConnectionsNotUsedFor" value="1" />
        </dataSource>
    </transactionManager>  

    ------->这个节点是来配置数据源,数据库衔接等等信息的。


   <sqlMap resource="com/neusoft/ibatis/map/person.xml" />
       -->将体系中的对象与数据库表的映射文件都包括进来上面采取的时相对路径,当然也可以用尽对路径:<sqlmap url="
file:///C:/config/person.xml"
   
</sqlMapConfig>
 

第二部分:sqlmap.xml映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "
http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="Person">
   <!-- 注释阐明 -->
  
   <cacheModel id="personCache" type="LRU">
     <flushInterval hours="24"/>
     <property name="size" value="1000"/>
   </cacheModel>
 
   <typeAlias alias="person" type="com.Jdnis.ibatis.model.Person" />
  
   <parameterMap id="personParam" class="person">
      <parameter property="id"/>
       ......
   </parameterMap>

   <resultMap id="personResult" class="person">
      <result property="id" column="PER_ID"/>
         ......
   </resultMap>

   <statement id="insertPerson" parameterClass="person">
     INSERT INTO persons VALUES(#id#,#firstName#,#lastName#,#birthDate#,#weight#,#height#)
   </statement>
   其他<statement>,<insert>,<update>,<select>,<delete>,<procedure>
</sqlMap>

注解:
  <1>statement
     属性:id(名称),parameterClass(输进参数的类型),resultClass(输出参数的类型),parameterMap(name of parameterMap),resultMap(name of reaultMap),cacheModel(name of cacheModel),其中只有一个必选属性:id
statement 的体时sql语句,当sql有特别字符时,将它放进CDATA块中如:<![CDATA[select * from person where PER_D>#id#]]>

  <2>主动天生主键
      通过<insert>子元素<selectKey>来支撑主动天生的键值,例如:
     ----对于oracle
    <insert id="insertPerson-Oracl" parameterClass="person">
       <selectKey resultClass="int" keyProperty="id">
          SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUAL
       </selectKey>
       insert into
       PERSON(PER_ID,PER_FIRST.....)
       values(#id#,#firstName#....);
    </insert>
    --->对于sqlServer
    <insert id="insertPerson-sqlServer" parameterClass="person">
       insert into
       PERSON(PER_FIRST.....)
       values(#firstName#....);
       <selectKey resultClass="int" keyProperty="id">
          SELECT @@IDENTITY AS ID
       </selectKey>
    </insert>

  <3>存储进程
<parameterMap id="swapParameters" class="map">
   <parameter property="email1" jdbcType="varchar" javaType="java.lang.String" model="INOUT"/>
<parameter property="email12" jdbcType="varchar" javaType="java.lang.String" model="INOUT"/>
  </parameterMap>
  <procedure id="swapEmailAddresses" parameterMap="swapParameters">
    {call swap_email_addres(?,?)}
  </procedure>

  <4>parameterClass 输进参数的类类型
  <5>resultClass 输出参数的类类型
  <6>parameterMap
     用到预处置的PreparedStatement,将要进行预处置的数据,先放到parameterMap元素中,接着引用parameterMap元素:例如:
<parameterMap id="insert-person-param" class="person">
  <parameter property="id"/>
  <parameter property="firstName"/>
  <parameter property="lastName"/>
  <parameter property="birthDate"/>
  <parameter property="weight">
  <parameter property="height"/>
</parameterMap>
<statement id="insertPerson" parameterMap="insert-person-param">
  insert into person values(?,?,?,?,?,?);
</statement>

<7>resultMap成果映射到预先定义的resultMap中
<resultMap id="get-person" resultClass="person">
  <result property="id" column="PER_ID"/>
  <result property="firstName" column="PER_FIRST_NAME"/>
  ......
</resultMap>
<statement id="getPerson" resuleMap="get-person">
  select * from person
<statement>

  <8>cacheModel定义查询缓存
<cacheModel id="person-cache" implementation="LRU">
  <flushInterval hours="24">
  <flushOnExecute statement="insertPerson"/>
  <flushOnExecute statement="updatePerson"/>
  <flushOnExecute statement="deletePerson"/>
   ...... 
  <property name="size" value="1000"/>
</cacheModel>
<statement id="getPerson" parameterClass="int" cacheModel="person-cache">
  <![CDATA[select * from person where PER_ID=#id#]]>
</statement>

 

 

http://blog.sina.com.cn/s/blog_5e0d59fb0100q2kx.html


http://www.niftyadmin.cn/n/872401.html

相关文章

# spring重要概念

BeanDefinition 标识Bean定义&#xff0c;Spring根据BeanDefinition来创建Bean对象&#xff0c;BeanDefinition中含有很多描述Bean的属性&#xff0c;BeanDefinition是Spring中非常核心的概念 BeanDefinition中重要的属性 beanClass&#xff1a;表示一个bean的类型&#xff…

ibatis使用总结(转)

SqlMap的配置是iBatis中应用的核心。这部分任务占据了iBatis开发的70的工作量。 1、命名空间&#xff1a; <sqlMap namespace"Account">&#xff0c;在此空间外要引用此空间的元素&#xff0c;则需要加上命名空间名。 2、实体的别名&#xff1a; <typeAl…

03 项目经理角色

项目经理角色 定义&#xff1a;由执行组织委派&#xff0c;领导团队实现项目目标的个人。 项目经理无需承担项目中的每个角色&#xff0c;但应具备项目管理知识、技术知识、理解和经验。通过沟通领导项目团队进行规划和协调。 项目经理影响范围 PPP经理&#xff1a;Public-…

svn介绍

SVN是一种版本管理系统&#xff0c;前身是CVS&#xff0c;是开源软件的基石。即使在沟通充分的情况下&#xff0c;多人维护同一份源代码的一定也会出现混乱的情况&#xff0c;版本管理系统就是为了解决这些问题。 Svn是严格区分大小写的&#xff0c;存储中路径的名字只有大小写…

gitlab+jenkins+harbor+k8s--01gitlab安装

背景 devops相关内容&#xff0c;概念百度 gitlab&#xff1a;代码仓库 jenkins&#xff1a;流水线&#xff0c;协助构建jar包&#xff0c;构建镜像 harbor&#xff1a;镜像仓库 kubernetes&#xff1a;容器编排 需求知识储备&#xff1a; docker&#xff08;入门&#…

gitlab+jenkins+harbor+k8s--02jenkins安装

jenkins安装 安装docker yum install -y yum-utils yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install -y docker-ce 安装docker-compose yum install -y docker-compose 拉取镜像 docker pull jenkins/jen…

Jquery优化方案

1.总是从ID选择器开始继承 Jquery中最快的选择器是ID选择器&#xff0c;因为它源自JavaScript的GetElementById方法。 2.在class前使用tag(标签名) 在jQuery中第二快的选择器是tag(标签)选择器( 比如&#xff1a;$("head") )。跟ID选择器类似&#xff0c;因为它来…

AJAX中文问题

AJAX中文问题分为两大类&#xff1a;1&#xff09;发送路径中的参数有中文&#xff0c;在服务器段接收参数值是乱码 例如&#xff1a;var url"a.jsp?name小李"&#xff1b;xmlHTTP.open ("post",url,true); 解决办法&#xff1a;利用javascript的提供的…