- 浏览: 252904 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (221)
- A序 (4)
- 系统学习(读书笔记) (5)
- Computer-base (14)
- RFC-协议规范 (9)
- OS-windows (3)
- OS-linux (10)
- 项目管理-需求设计 (2)
- 设计模式 (1)
- Java-基础-抽象规范 (15)
- Java-基础-core-code (15)
- Java-Thread (15)
- JAVA-stream 流 (1)
- JAVA-socket (13)
- JAVA-SSL (5)
- JAVA-RMI-JMX-OSGI (7)
- java-web (6)
- 工具 (19)
- W3C (16)
- DB (12)
- 读书笔记 (5)
- 中间件 (1)
- C/C++ (1)
- JAVA-JAXB (3)
- Java-UI (1)
- JAVA命令 (1)
- JVM实战 (1)
- java-base (3)
- maven (1)
最新评论
-
Nabulio:
厉害
tomcat 源码学习 -
zbz:
例子很简单,可是怎么设置访问账号和密码呢?注释掉的那段不起作用 ...
jmx 实例--最简单的例子 -
zk302:
格式可以优化下
sql-经典例子练习 -
tuspark:
eclipse的访问控制图标,可以看这篇《eclipse的访问 ...
Eclipse(四)常用设置 -
xlshl43:
流比呀。。。但这排版看的有点蛋疼。。。
Java核心代码(二)Class loader
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>
发表评论
-
jetty tomcat
2013-06-28 14:39 747http://www.ibm.com/developerwo ... -
Wicket Struts 比较
2013-06-24 17:04 857转自http://tech.ccidnet.com/a ... -
tomcat 源码学习
2012-11-14 15:08 2532Tomcat从5.5版本开始,支持以下四种Connect ... -
spring 总结
2012-11-14 15:09 1100/------------------------ ... -
servlet 总结
2012-11-14 15:08 8991、web原理与规范_____________________ ...
相关推荐
ibatis总结的小东西ibatis总结的小东西ibatis总结的小东西ibatis总结的小东西ibatis总结的小东西ibatis总结的小东西ibatis总结的小东西ibatis总结的小东西
总结,Ibatis提供了灵活的SQL映射机制,使得开发人员能够更好地控制SQL的执行。同时,通过与Struts和Spring的整合,可以构建出强大的企业级应用。理解并熟练掌握这些知识点,对于提升Java Web开发的效率和质量至关...
ibatis优点总结 ibatis优点总结
本文将深入探讨其中一个流行的选择——iBATIS,以及其在传智播客教程中的优点总结。 iBATIS,全称为“互联网应用程序基础工具包”(Internet Basics for Architecture with Transactions and SQL),是由Apache ...
09_ibatis教程_ibatis优点总结.zip 09_ibatis教程_ibatis优点总结.zip
### ibatis知识点总结 #### 简介 ibatis是一个开放源代码项目,起初由Clinton Begin在2001年发起。该项目最初关注的是密码软件的开发,但随着时间的发展,逐渐演变成一个基于Java的持久层框架。ibatis在2010年由...
### 总结 ibatis在处理SQL语句时,其灵活性和强大功能也伴随着易犯的错误。确保`parameterClass`和`resultClass`属性与实际参数类型和返回类型相匹配,正确使用动态SQL标签如`<isNotNull>`,并注意`#`和`{}`之间的...
在IT行业中,Ibatis、Oracle...希望这篇总结能为你的学习之路提供有价值的指导,进一步深化你对Ibatis、Oracle和敏捷开发的理解。在IT世界中,持续学习和实践是提升自身能力的关键,祝你在技术探索的道路上越走越远。
【ibatis学习总结】 在Java应用中,ORM(对象关系映射)框架是连接数据库与业务逻辑的关键。相比像Hibernate和Apache OJB这样的"一站式"ORM解决方案,iBATIS提供了一种更为灵活的"半自动化"策略。iBATIS允许开发者...
本文档旨在对iBATIS的学习进行深入的总结,帮助初学者快速上手。 一、iBATIS概述 iBATIS的核心理念是“SQL Map”,它将SQL与Java代码分离,通过XML配置文件或注解来定义SQL语句,实现了数据访问层的灵活定制。这...
iBatis.net是一个轻量级的持久层框架,它提供了灵活的数据访问机制,与ORM(对象关系映射)框架相比,具有更高的定制性和性能。在本文中,我们将深入探讨iBatis.net的使用,主要涉及以下几个核心部分: 1. **配置...
### ibatis技术总结 #### 1. 创建iBatis工程的步骤 在开始构建一个基于iBatis的应用之前,需要遵循一系列明确的步骤来确保项目的顺利进行: 1. **建立数据库**:首先需要设计并创建数据库,这一步骤至关重要,...
### ibatis的技术总结 #### 一、创建iBatis工程的步骤 1. **建立数据库:** 首先需要创建一个数据库,用于存放应用程序的数据。数据库的选择可以根据具体的应用需求来决定,例如MySQL、Oracle等。 2. **创建工程...
总结起来,iBATIS是一个强大且灵活的持久化框架,它的主要优点在于将SQL语句的控制权交给开发者,同时提供了代码简化和维护性的提升。对于那些希望在ORM框架中保留更多数据库操作控制权的开发者来说,iBATIS是一个...
"iBATIS学习总结 - 郭睿的专栏 - CSDN.NET_files"和"iBATIS与Spring集成及环境搭建 - 振华 - ITeye技术网站_files"可能是相关文章的图片或辅助资源。 通过这些资料,开发者可以系统地学习和掌握iBATIS 2.x版本的...
### 四、总结 通过上述内容,我们可以了解到Ibatis3的基本工作原理及其配置方式。Ibatis3以其灵活性和高效性在众多ORM框架中脱颖而出,特别适合那些对SQL查询有特殊需求或者需要精细化控制的应用场景。希望本文能够...
总结来说,Ibatis 是一个高效、灵活的 ORM(对象关系映射)框架,它让开发者能够更专注于业务逻辑,而不是繁琐的 JDBC 代码。通过学习 Ibatis,开发者可以更好地理解和掌握数据访问层的设计与实现,提升开发效率。...