`

ibatis 总结

 
阅读更多

 

ibatis的jdbctype和ENDDATE="#endDate:DATETIME#" 

        不用ibatis的自动识别,提高效率。

 

--------------sql-map.config.xml文件--------------根元素<sqlMapConfig>

        1,<properties>元素(唯一)

                如:<properties resource="config/database.properties" />

        2,<settings>元素

                maxRequests同时执行SQL语句的最大线程数。大于这个值的线程将阻塞直到另一个线程执行完成。

                        缺省值:512

                maxSessions

                        同一时间内活动的最大session数。可以是代码请求的显式session,也可以是当线程使用SqlMapClient实例(即执行一条语句)自动获得的session。

                        减小这个参数值通常能减少内存使用。

                        缺省值:128

                maxTransactions

                        同时进入SqlMapClient.startTransaction()的最大线程数。

                        缺省值:32

                cacheModelsEnabled

                        全局性地启用或禁用SqlMapClient的所有缓存model。调试程序时使用。

                        缺省值:true(启用)

                lazyLoadingEnabled

                        全局性地启用或禁用SqlMapClient的所有延迟加载。调试程序时使用。

                        缺省值:true(启用)

                enhancementEnabled

                        是否针对POJO启用字节码增加机制以提升geter/seter的调用效用,为延迟加载带来了及大的性能提升。

                        缺省值:false(禁用)

                useStatementNamespaces

                        如果启用本属性,必须使用全限定名来引用mapped statement。

                        如,queryForObject("User.getUserById", id);"User"就是Namespaces

                        缺省值:false//个人喜欢设为true

        3,<typeAlias alias="user" type="persistence.model.User"/>元素

                //user.xml中也用typeAlias

                预定义的个别名:

                事务管理器别名

                        JDBC--com.ibatis.sqlmap.engine.transaction.jdbc.JdbcTransactionConfig

                                让JDBC管理事务

                        JTA--com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig

                                器使用一个JTA全局事务,使SQL Map的事务包括在更大的事务范围内,

                                这个更大的事务范围可能包括了其他的数据库和事务资源。

                        EXTERNAL--com.ibatis.sqlmap.engine.transaction.external.ExternalTransactionConfig

 

                Data Source Factory别名

                        SIMPLE--com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory

                        DBCP--com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory

                        JNDI--com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory

 

                例子:

                        <transactionManager type="JDBC">

                                <dataSource type="DBCP">

                                        <property value="${driver}" name="JDBC.Driver" />

                        </..>

 

        4,<transactionManager type="JDBC" >元素        

                <dataSource type="SIMPLE">//它基于iBatis的SimpleDataSource连接池实现。

                <dataSource type="DBCP">//使用Jakarta DBCP的DataSource API提供连接池

                </dataSource>

        </transactionManager>

                JndiDataSourceFactory在应用容器内部从JNDI Context中查找DataSource实现。

                当使用应用服务器,并且服务器提供了容器管理的连接池和相关DataSource实现的情况下,

                可以使用JndiDataSourceFactory。使用JDBC DataSource的标准方法是通过JNDI来查找。

                                应用服务器,以处理逻辑为主,

                                web服务器,以处理HTTP为主

                <transactionManager type="JDBC" >

                        <dataSource type="JNDI">

                        <property name="DataSource" value="java:comp/env/jdbc/jpetstore"/>

                        </dataSource>

                </transactionManager>

                以上配置使用了常用的JDBC事务管理。但对于容器管理的资源,您可能需要象下面的例子一样配置,让它能和全局事务一起工作:

                <transactionManager type="JTA" >

                        <property name="UserTransaction" value="java:/ctx/con/UserTransaction"/>

                        <dataSource type="JNDI">

                                <property name="DataSource" value="java:comp/env/jdbc/jpetstore"/>

                        </dataSource>

                </transactionManager>

                注意,UserTransaction属性指向UserTransaction实例所在的JNDI位置。JTA事务管理需要它,

                以使SQL Map能够参与涉及其他数据库和事务资源的范围更大的事务。

        5,<sqlMap resource="sql/user.xml" />

 

----------------------SQL Map(映射)文件----------根元素<sqlMap>

#与$区别"#"好用。

        select * from table where id = #id# ,其中如果字段id为字符型,那么#id#表示的就是'id'类型,如果id为整型,那么#id#就是id类型。 

        select * from table where id = $id$ ,如果字段id为整型,Sql语句就不会出错,但是如果字段id为字符型,

                那么Sql语句应该写成 select * from table where id = '$id$' 

resultMap,resultClass

 

关联可以有2种方式,:

1.    SELECT a.*,b.cname cateCName FROM param a,category b WHERE a.categoryid=b.id and a.id=#id#

        resultMap如何写?

2.        <resultMap id=...>

                <result property="addresses" column="id"  select="User.getAddressByUserId" />

 

 

<resultMap id="paramCateResult" class="param">

<select id="getParam" resultMap="paramCateResult" parameterClass="long">

<select id="calculateParamResultSet" resultClass="int" parameterClass="string">

parameterClass="java.util.HashMap","int","long"...

                map.put("name", "zhouxingchi");

                map.put("age", 49);

                list=(List) client.queryForList("getStudent2",map);

                <select id="getStudent2" parameterClass="java.util.HashMap" resultMap="get-student-result">

                        SELECT * FROM student WHERE sname=#name# AND sage=#age#;

                </select>

parameterMap

 

        <sqlMap id=”Product”>

                <cacheModel id=”productCache” type=”LRU”>

                        <flushInterval hours=”24”/>

                        <property name=”size” value=”1000” />

                </cacheModel>

                <typeAlias alias=”product” type=”com.ibatis.example.Product” />

                <parameterMap id=”productParam” class=”product”>

                        <parameter property=”id”/>

                </parameterMap>

                <resultMap id=”productResult” class=”product”>

                        <result property=”id” column=”PRD_ID”/>

                        <result property=”description” column=”PRD_DESCRIPTION”/>

                        <result property="addList" column="id"  select="User.getAddressByUserId" />################

                        //关联查询,自动关联。延迟加载?

                </resultMap>

                <select id=”getProduct” parameterMap=”productParam” resultMap=”productResult” cacheModel=”product-cache”>

                        select * from PRODUCT where PRD_ID = ?

                </select>

        </sqlMap>

 

        <select>

                属性:id,parameterClass,resultClass,parameterMap,resultMap,cacheModel

                子元素:所有动态元素

                <select>

        <procedure>[prə'si:dʒə] 

                属性:id,parameterClass,resultClass,parameterMap,resultMap,xmlResultName

                子元素:所有动态元素

 

 

        <![CDATA[select...]]>//表示转义,因为xml不能解释"<",">"等        

 

        <selectKey>来支持自动生成的键值//Oracle预生成//selectKey是insert特有的

                <insert id="insertProduct-ORACLE" parameterClass="com.domain.Product">

                        <selectKey resultClass="int" keyProperty="id" >

                                SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUAL

                        </selectKey>

                        insert into PRODUCT (PRD_ID,PRD_DESCRIPTION)values (#id#,#description#)

                </insert>

        Inline Parameter

 

        <cacheModel id="product-cache" imlementation="LRU">

                <flushInterval hours="24"/>

                <flushOnExecute statement="insertProduct"/>

                <flushOnExecute statement="updateProduct"/>

                <flushOnExecute statement="deleteProduct"/>

                <property name=”size” value=”1000” />

        </cacheModel>

        <statement id=”getProductList” parameterClass=”int” cacheModel=”product-cache”>

                select * from PRODUCT where PRD_CAT_ID = #value#

        </statement>

 

        xmlResultName//返回 xml格式,person为根元素

        <select id="getPerson" parameterClass=”int” resultClass="xml" xmlResultName=”person”>

        //4008111111

 

        <parameterMap id=”parameterMapName” [class=”com.domain.Product”]>

                <parameter property =”propertyName” [jdbcType=”VARCHAR”] [javaType=”string”]

                        [nullValue=”NUMERIC”] [null=”-9999999”]/>

                //jdbcType指定DB字段的数据类型

                //一般:字段可以为NULL,或日期型,才需要jdbcType属性

                <parameter …… />

                <parameter …… />

        </parameterMap>

 

        <result property=”category” column=”PRD_CAT_ID” select=”getCategory”/>

        category是用户定义的类型,JDBC不知道如何给它赋值。

        select=”getCategory”使用PRD_CAT_ID字段的值去调用“getCategory”。

        得到一个Category对象并赋值给Product的category属性。

        //造成N+1 Select?

 

        联合查询

        <resultMap id=”get-product-result” class=”com.ibatis.example.Product”>

<result property=”id” column=”PRD_ID”/>

<result property=”description” column=”PRD_DESCRIPTION”/>

<result property=”category.id” column=”CAT_ID” />

<result property=”category.description” column=”CAT_DESCRIPTION” />

</resultMap>

<statement id=”getProduct” parameterClass=”int” resultMap=”get-product-result”>

select *

from PRODUCT, CATEGORY

where PRD_CAT_ID=CAT_ID

and PRD_ID = #value#

</

 

column是 SQL查询的resultset的列名或别名(级别高)

<result property=”productList” column=”CAT_ID” select=” getProductsByCatId”/>

 

 

<cacheModel id="product-cache" type ="LRU" readOnly=”true” serialize=”false”>

        //LRU近期最少使用,

        //readOnly=”true”只读缓存(默认);readOnly=“false”可读写缓存

        //type="LRC"|MEMORY|FIFO

        <flushInterval hours="24"/>

        <flushOnExecute statement="insertProduct"/>

        <flushOnExecute statement="updateProduct"/>

        <flushOnExecute statement="deleteProduct"/>

        <property name=”cache-size” value=”1000” />

</cacheModel>

 

<statement id=”getProductList” cacheModel=”product-cache”>

        select * from PRODUCT where PRD_CAT_ID = #value#

</statement>

 

dynamic MAP

<statement id="dynamicGetAccountList" resultMap="account-result" >

        select * from ACCOUNT

        <dynamic prepend="WHERE">

                <isNotNull prepend="AND" property="firstName">

                        (ACC_FIRST_NAME = #firstName#

                        <isNotNull prepend="OR" property="lastName">

                                ACC_LAST_NAME = #lastName#

                        </isNotNull>

                )

                </isNotNull>

                <isNotNull prepend="AND" property="emailAddress">

                        ACC_EMAIL like #emailAddress#

                </isNotNull>

                <isGreaterThan prepend="AND" property="id" compareValue="0">

                        ACC_ID = #id#

                </isGreaterThan>

        </dynamic>

        order by ACC_LAST_NAME

 

<dynamic>元素和条件元素都有“prepend”属性

二元条件元素<isGreaterThan prepend="AND" property="id" compareValue="0">

一元条件元素<isNotNull prepend="AND" property="emailAddress">

存在条件元素<isNotParameterPresent prepend=”AND”>

<iterate>元素

        <iterate prepend=”AND” property=”userNameList” open=”(” close=”)” conjunction=”OR”>

                username=#userNameList[]#

        </iterate>

 

 

 

 

 

 

分享到:
评论

相关推荐

    ibatis总结的小东西

    ibatis总结的小东西ibatis总结的小东西ibatis总结的小东西ibatis总结的小东西ibatis总结的小东西ibatis总结的小东西ibatis总结的小东西ibatis总结的小东西

    ibatis总结 ibatis ibatis ibatis ibatis

    总结,Ibatis提供了灵活的SQL映射机制,使得开发人员能够更好地控制SQL的执行。同时,通过与Struts和Spring的整合,可以构建出强大的企业级应用。理解并熟练掌握这些知识点,对于提升Java Web开发的效率和质量至关...

    ibatis优点总结

    ibatis优点总结 ibatis优点总结

    传智播客ibatis教程_ibatis优点总结

    本文将深入探讨其中一个流行的选择——iBATIS,以及其在传智播客教程中的优点总结。 iBATIS,全称为“互联网应用程序基础工具包”(Internet Basics for Architecture with Transactions and SQL),是由Apache ...

    09_ibatis教程_ibatis优点总结.zip

    09_ibatis教程_ibatis优点总结.zip 09_ibatis教程_ibatis优点总结.zip

    ibatis 知识点总结(PDF)

    ### ibatis知识点总结 #### 简介 ibatis是一个开放源代码项目,起初由Clinton Begin在2001年发起。该项目最初关注的是密码软件的开发,但随着时间的发展,逐渐演变成一个基于Java的持久层框架。ibatis在2010年由...

    ibatis的错误总结

    ### 总结 ibatis在处理SQL语句时,其灵活性和强大功能也伴随着易犯的错误。确保`parameterClass`和`resultClass`属性与实际参数类型和返回类型相匹配,正确使用动态SQL标签如`&lt;isNotNull&gt;`,并注意`#`和`{}`之间的...

    ibatis学习总结,oracle , 敏捷开发,

    在IT行业中,Ibatis、Oracle...希望这篇总结能为你的学习之路提供有价值的指导,进一步深化你对Ibatis、Oracle和敏捷开发的理解。在IT世界中,持续学习和实践是提升自身能力的关键,祝你在技术探索的道路上越走越远。

    ibatis学习总结

    【ibatis学习总结】 在Java应用中,ORM(对象关系映射)框架是连接数据库与业务逻辑的关键。相比像Hibernate和Apache OJB这样的"一站式"ORM解决方案,iBATIS提供了一种更为灵活的"半自动化"策略。iBATIS允许开发者...

    ibatis学习总结文档

    本文档旨在对iBATIS的学习进行深入的总结,帮助初学者快速上手。 一、iBATIS概述 iBATIS的核心理念是“SQL Map”,它将SQL与Java代码分离,通过XML配置文件或注解来定义SQL语句,实现了数据访问层的灵活定制。这...

    iBatis.net总结 使用帮助

    iBatis.net是一个轻量级的持久层框架,它提供了灵活的数据访问机制,与ORM(对象关系映射)框架相比,具有更高的定制性和性能。在本文中,我们将深入探讨iBatis.net的使用,主要涉及以下几个核心部分: 1. **配置...

    ibatis技术总结

    ### ibatis技术总结 #### 1. 创建iBatis工程的步骤 在开始构建一个基于iBatis的应用之前,需要遵循一系列明确的步骤来确保项目的顺利进行: 1. **建立数据库**:首先需要设计并创建数据库,这一步骤至关重要,...

    ibatis的技术总结

    ### ibatis的技术总结 #### 一、创建iBatis工程的步骤 1. **建立数据库:** 首先需要创建一个数据库,用于存放应用程序的数据。数据库的选择可以根据具体的应用需求来决定,例如MySQL、Oracle等。 2. **创建工程...

    ibatis教程,ibatis帮助文档

    总结起来,iBATIS是一个强大且灵活的持久化框架,它的主要优点在于将SQL语句的控制权交给开发者,同时提供了代码简化和维护性的提升。对于那些希望在ORM框架中保留更多数据库操作控制权的开发者来说,iBATIS是一个...

    ibatis2.rar

    "iBATIS学习总结 - 郭睿的专栏 - CSDN.NET_files"和"iBATIS与Spring集成及环境搭建 - 振华 - ITeye技术网站_files"可能是相关文章的图片或辅助资源。 通过这些资料,开发者可以系统地学习和掌握iBATIS 2.x版本的...

    Ibatis3手册 Ibatis3参考手册

    ### 四、总结 通过上述内容,我们可以了解到Ibatis3的基本工作原理及其配置方式。Ibatis3以其灵活性和高效性在众多ORM框架中脱颖而出,特别适合那些对SQL查询有特殊需求或者需要精细化控制的应用场景。希望本文能够...

    Ibatis

    总结来说,Ibatis 是一个高效、灵活的 ORM(对象关系映射)框架,它让开发者能够更专注于业务逻辑,而不是繁琐的 JDBC 代码。通过学习 Ibatis,开发者可以更好地理解和掌握数据访问层的设计与实现,提升开发效率。...

Global site tag (gtag.js) - Google Analytics