typealias 类的别名,定义别名后使用时不需要一大串包名的类全名
resultMap SQL字段与类属性的映射关系,避免在SQL语句中使用as转换字段别名
parameterClass 参数类型
resultClass 返回类型,使用resultClass不使用resultMap时就是用as让字段和属性名称一致
包含大于号<,,,小于号>等特殊字符
<select id="select" parameterClass="int" resultClass="Account">
select
ACC_ID as id,
ACC_FIRST_NAME as firstName,
ACC_LAST_NAME as lastName,
ACC_EMAIL as emailAddress
from ACCOUNT
WHERE <![CDATA[ACC_ID>#id#]]>
</select>
SqlMapConfig标签
<properties> 引用属性文件
引用属性文件,引用后用EL表达式取属性文件中的值
<setings> 连接参数设置
<resultObjectFactory>对象生成工厂
默认使用内部机制class.newInstance(),所以返回的对象要求有无参的构造方法,否则报错
<transactionManager>事务管理器
JDBC 普通的JDBC事务管理器
JTA 基于容器的事务管理器,企业级的容器中使用
EXTERNAL 外部的事务管理器,管理事务的是应用程序,而不是iBATIS
<dataSource>数据源
SIMPLE 简单的数据源工厂,配置简单数据连接池的数据源
DBCP Apache的DBCP连接池
JNDI JNDI目录服务器,基于容器级的开发
<sqlMap>实体映射
resource 用于指定本地的映射文件
url 指定远程分布式系统中的映射文件
SqlMap标签详解
namespace命名空间
<typeAlias>类别名
用别名取代包含包名的类别名。默认定义了一些常用数据类型的别名,所以使用String,Map等时就不需要全名就可以了。还定义了几个事务和数据源的一些别名。
<!-- 定义别名,使用时就可省略包名 -->
<typeAlias alias="Account" type="com.mydomain.domain.Account"/>
<resultMap>返回类型显示映射关系
<!-- SQL字段与类属性映射关系,省略在SQL语句中用AS转换字段别名-->
<resultMap id="AccountResult" class="Account">
<result property="id" column="ACC_ID"/>
<result property="firstName" column="ACC_FIRST_NAME"/>
</resultMap>
<parameterMap>参数类型外联映射关系
<!-- SQL字段与类属性映射关系,在SQL语句中用?占位符就可以了-->
<selectKey>自动生成键
生成方式与数据库有关,MySQL,MS-SQL等先插入数据再获取主键,ORACLE等先查出序列的nextVal,再插入数据
Oracle系列值
<insert id="insertAccount" parameterClass="Account">
<selectKey resultClass="int" keyProperty="id">
select sequence.nextVal from dual
</selectKey>
insert into ACCOUNT(
ACC_ID,
ACC_FIRST_NAME,
ACC_LAST_NAME,
ACC_EMAIL
) values(#id#,#firstName#,#lastName#,#emailAddress#)
</insert>
<select>查询
属性:
id 指定名称
parameterClass 参数类型,类的别名或全名
parameterMap 传入参数的显示映射
resultClass 返回类型,类的别名或全名
resultMap 返回类型的显示映射
cacheModel 缓存模式
resultSetType 结果集类型,如游标的类型只能往前
fetchSize 预取回指定大小的数据
xmlResultName 当resultClass值为xml时在此指定XML文件的根标签
remapResults 如果返回的字段不确定,将此属性设为true
如:select * from $table$ 或select $fields$ from table
timeout 超时
调用:
sqlMapper.queryForList
sqlMapper.queryForObject
sqlMapper.queryForMap
<insert>
sqlMapper.insert
<procedure>调用存储过程
属性:
id 指定名称
parameterClass 参数类型,类的别名或全名
parameterMap 传入参数的显示映射
resultClass 返回类型,类的别名或全名
resultMap 返回类型的显示映射
<!--参数映射-->
<parameterMap id="procedureMap" class="map">
<parameter property="ACC_FIRST_NAME" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="ACC_LAST_NAME" jdbcType="VARCHAR"
javaType="java.lang.String" mode="OUT"/>
.....
<!--调用存储过程-->
<procedure id="callProcedure" parameerMap="procedureMap" resultClass="AccountResult">
{call procedureName(?,?,?)}
</procedure>
调用:
sqlMapper.update("dropTable",null)
<statement> 执行DDL语句
动态SQL语句
动态标签分类
<>
resultMap SQL字段与类属性的映射关系,避免在SQL语句中使用as转换字段别名
parameterClass 参数类型
resultClass 返回类型,使用resultClass不使用resultMap时就是用as让字段和属性名称一致
包含大于号<,,,小于号>等特殊字符
<select id="select" parameterClass="int" resultClass="Account">
select
ACC_ID as id,
ACC_FIRST_NAME as firstName,
ACC_LAST_NAME as lastName,
ACC_EMAIL as emailAddress
from ACCOUNT
WHERE <![CDATA[ACC_ID>#id#]]>
</select>
SqlMapConfig标签
<properties> 引用属性文件
引用属性文件,引用后用EL表达式取属性文件中的值
<setings> 连接参数设置
<resultObjectFactory>对象生成工厂
默认使用内部机制class.newInstance(),所以返回的对象要求有无参的构造方法,否则报错
<transactionManager>事务管理器
JDBC 普通的JDBC事务管理器
JTA 基于容器的事务管理器,企业级的容器中使用
EXTERNAL 外部的事务管理器,管理事务的是应用程序,而不是iBATIS
<dataSource>数据源
SIMPLE 简单的数据源工厂,配置简单数据连接池的数据源
DBCP Apache的DBCP连接池
JNDI JNDI目录服务器,基于容器级的开发
<sqlMap>实体映射
resource 用于指定本地的映射文件
url 指定远程分布式系统中的映射文件
SqlMap标签详解
namespace命名空间
<typeAlias>类别名
用别名取代包含包名的类别名。默认定义了一些常用数据类型的别名,所以使用String,Map等时就不需要全名就可以了。还定义了几个事务和数据源的一些别名。
<!-- 定义别名,使用时就可省略包名 -->
<typeAlias alias="Account" type="com.mydomain.domain.Account"/>
<resultMap>返回类型显示映射关系
<!-- SQL字段与类属性映射关系,省略在SQL语句中用AS转换字段别名-->
<resultMap id="AccountResult" class="Account">
<result property="id" column="ACC_ID"/>
<result property="firstName" column="ACC_FIRST_NAME"/>
</resultMap>
<parameterMap>参数类型外联映射关系
<!-- SQL字段与类属性映射关系,在SQL语句中用?占位符就可以了-->
<selectKey>自动生成键
生成方式与数据库有关,MySQL,MS-SQL等先插入数据再获取主键,ORACLE等先查出序列的nextVal,再插入数据
Oracle系列值
<insert id="insertAccount" parameterClass="Account">
<selectKey resultClass="int" keyProperty="id">
select sequence.nextVal from dual
</selectKey>
insert into ACCOUNT(
ACC_ID,
ACC_FIRST_NAME,
ACC_LAST_NAME,
ACC_EMAIL
) values(#id#,#firstName#,#lastName#,#emailAddress#)
</insert>
<select>查询
属性:
id 指定名称
parameterClass 参数类型,类的别名或全名
parameterMap 传入参数的显示映射
resultClass 返回类型,类的别名或全名
resultMap 返回类型的显示映射
cacheModel 缓存模式
resultSetType 结果集类型,如游标的类型只能往前
fetchSize 预取回指定大小的数据
xmlResultName 当resultClass值为xml时在此指定XML文件的根标签
remapResults 如果返回的字段不确定,将此属性设为true
如:select * from $table$ 或select $fields$ from table
timeout 超时
调用:
sqlMapper.queryForList
sqlMapper.queryForObject
sqlMapper.queryForMap
<insert>
sqlMapper.insert
<procedure>调用存储过程
属性:
id 指定名称
parameterClass 参数类型,类的别名或全名
parameterMap 传入参数的显示映射
resultClass 返回类型,类的别名或全名
resultMap 返回类型的显示映射
<!--参数映射-->
<parameterMap id="procedureMap" class="map">
<parameter property="ACC_FIRST_NAME" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="ACC_LAST_NAME" jdbcType="VARCHAR"
javaType="java.lang.String" mode="OUT"/>
.....
<!--调用存储过程-->
<procedure id="callProcedure" parameerMap="procedureMap" resultClass="AccountResult">
{call procedureName(?,?,?)}
</procedure>
调用:
sqlMapper.update("dropTable",null)
<statement> 执行DDL语句
动态SQL语句
动态标签分类
<>