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> 
  注解:每隔24小时,就会清除缓冲区,除非执行了insertPerson,updatePerson,deletePerson操作(立即清除缓冲区) 

 

内容概要:本文详细介绍了扫描单分子定位显微镜(scanSMLM)技术及其在三维超分辨体积成像中的应用。scanSMLM通过电调透镜(ETL)实现快速轴向扫描,结合4f检测系统将不同焦平面的荧光信号聚焦到固定成像面,从而实现快速、大视场的三维超分辨成像。文章不仅涵盖了系统硬件的设计与实现,还提供了详细的软件代码实现,包括ETL控制、3D样本模拟、体积扫描、单分子定位、3D重建和分子聚类分析等功能。此外,文章还比较了循环扫描与常规扫描模式,展示了前者在光漂白效应上的优势,并通过荧光珠校准、肌动蛋白丝、线粒体网络和流感A病毒血凝素(HA)蛋白聚类的三维成像实验,验证了系统的性能和应用潜力。最后,文章深入探讨了HA蛋白聚类与病毒感染的关系,模拟了24小时内HA聚类的动态变化,提供了从分子到细胞尺度的多尺度分析能力。 适合人群:具备生物学、物理学或工程学背景,对超分辨显微成像技术感兴趣的科研人员,尤其是从事细胞生物学、病毒学或光学成像研究的科学家和技术人员。 使用场景及目标:①理解和掌握scanSMLM技术的工作原理及其在三维超分辨成像中的应用;②学习如何通过Python代码实现完整的scanSMLM系统,包括硬件控制、图像采集、3D重建和数据分析;③应用于单分子水平研究细胞内结构和动态过程,如病毒入侵机制、蛋白质聚类等。 其他说明:本文提供的代码不仅实现了scanSMLM系统的完整工作流程,还涵盖了多种超分辨成像技术的模拟和比较,如STED、GSDIM等。此外,文章还强调了系统在硬件改动小、成像速度快等方面的优势,为研究人员提供了从理论到实践的全面指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值