mybatis配置文件写法

来源:互联网 发布:阿里云 ecs 建站 教程 编辑:程序博客网 时间:2024/06/04 18:00

配置文件中的内容均为手写,可能存在一些错误的地方,如果发现错误请指出,不胜感激!

mybatis总控文件《SqlMapConfig.xml》:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"     "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"><sqlMapConfig><!-- <properties>元素SQL Map配置文件拥有唯一的<properties>元素,用于在配置文件中使用标准的Java属性文件(name=value)。这样做后,在属性文件中定义的属性可以作为变量在SQL Map映射文件中引用 --><properties resource="jdbc.properties"/><!-- <setting>元素cacheModelsEnabled:启用或禁用SqlMapClient的所有缓存model。enhancementEnabled:启用或禁用运行时字节码增强,以优化访问JavaBean属性的性能,同时优化延迟加载的性能。lazyLoadingEnabled:启用或禁用SqlMapClient的所有延迟加载。maxRequests:同时执行SQL预计的最大线程数。maxSessions:同一时间内活动的最大session数。maxTransactions:同时进入SqlMapClient.startTransaction()的最大线程数。useStatementNamespaces:如果启用本属性,必须使用全限定名来引用mapped statement。Mapped statement的全限定名由sql-map的名称和mapped-statement的名称合成。 --><settings cacheModelsEnabled="true" enhancementEnabled="true" lazyLoadingEnabled="true" maxRequests="20" maxSessions="10" maxTransactions="5" useStatementNamespaces="false"/><!-- <transactionManager>元素<transactionManager>元素包含三个事物管理器分别是,JDBC,JTA和EXTERNAL.JDBC:通过常用的Connection commit()和rollback()方法,让JDBC管理事务。JTA:本事务管理器使用一个JTA全局事务,使用SQL Map的事务包括在更大的事务范围内,这个更大的事务范围可能包括了其他的数据库和事务资源。EXTERNAL:这个配置可以自己管理事务。 --><transactionManager type="JDBC"><!-- <datasource>元素<datasource>是<transactionManager>的一部分,为SQL Map数据源设置了一系列参数。目前SQL Map架构只提供了三个DataSourceFactory,也可以添加自己的实现。SimpleDataSourceFactory:DataSource提供了一个基本的实现,适用于J2EE容器提供DataSource的情况。DbcpDataSourceFactory:实现使用Jakarta DBCP(Database Connection Pool)的DataSource API提供连接池服务。适用于应用/Web容器不提供DataSource服务的情况,或执行一单独的应用。JndiDataSourceFactory:在应用容器内部从JNDI Context中查找DataSource实现。当使用应用服务器,并且服务器提供了容器管理的连接池和相关DataSource实现的情况下,可以使用JndiDataSourceFactory. --><dataSource type="SIMPLE"><property name="JDBC.Driver" value="${jdbc.driverClassName}"/><property name="JDBC.ConnectionURL" value="${jdbc.url}"/><property name="JDBC.Username" value="${jdbc.userName}"/><property name="JDBC.Password" value="${jdbc.password}"/></dataSource></transactionManager>    <!-- <sqlMap>元素, 可多个  <sqlMap>元素用于包括SQL Map映射文件和其他的SQL Map配置文件。  每个SqlMapClient对象使用的所有SQL Map映射文件都要在此声明。  映射文件作为stream resource从类路径或URL读入。  --><sqlMap resource="com/dao/ibatis/sql/testSql.xml"/>    </sqlMapConfig>

SqlMap文件写法《testSql.xml》:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"     "http://ibatis.apache.org/dtd/sql-map-2.dtd">    <sqlMap namespace="TestSQL"><!-- <typeAlias>元素<typeAlias>元素为一个通常较长的、全限定类名指定一个较短的别名。 --><typeAlias alias="test" type="com.dao.ibatis.model.TestModel" /><!-- <resultMap>元素定义java类属性和表字段之间的对应关系。id:resultMap元素唯一的标识。class:resultMap需要使用的类,可以是类别名也可以是类全名。property:对应class类的属性名。column:数据库表字段名。 --><resultMap id="testResult" class="test"><result property="id" column="ID" /><result property="name" column="NAME" /><result property="age" column="AGE" /><result property="remark" column="REMARK" /></resultMap><!-- <select>元素,表示ibatis的查询语句。 id:唯一标识这条SQL语句。 resultMap:指定这条SQL语句查询出来的结果集使用哪个resultMap接收。 parameterClass:SQL中使用到的参数类名,可以是类别名也可以是类全名。 在java代码中调用这条SQL语句时,传入的参数必须是指定的类的对象。 如果是java中提供的基本类型和String类型,可以直接写,例如: parameterClass="int",parameterClass="String" #id#:参数,必须是parameterClass中的属性名。 --><select id="testSelect" resultMap="testResult" parameterClass="test">    <![CDATA[SELECT * FROM TEST t WHERE t.ID < #id#    ]]></select><!-- <select>元素的第二种写法。参数类型为int型。resultClass:与resultMap一样,但是如果使用resultClass,类的属性名必须与表的字段名完全相同。#id#:java代码中调用这个SQL时传入的参数名。--><select id="testSelectById" resultClass="test" parameterClass="int">    <![CDATA[SELECT * FROM TEST t WHERE t.ID < #id#    ]]></select><select id="testSelectByName" resultMap="testResult" parameterClass="String">    <![CDATA[SELECT * FROM TEST t WHERE t.NAME like '%' || #name# || '%'    ]]></select><!-- <update>元素, 这里使用的是一个拼接的方式,主要是为了介绍更多的知识。dynamic:会自动去除第一个子元素中prepend="***"中的内容,例如:下面的SQL会去除掉第一个","和第一个"and"。isNotEmpty/isNotNull:判断参数值是否为空,一般使用isNotEmpty,只有当参数值不为空的时候才会将元素下的SQL拼接。 --><update id="testUpdate" parameterClass="test">UPDATE TEST t<dynamic prepend="set"><isNotEmpty prepend="," property="age">t.AGE=#age#</isNotEmpty><isNotEmpty prepend="," property="remark">t.REMARK=#remark#</isNotEmpty></dynamic><dynamic prepend="where"><isNotEmpty prepend="and" property="id">t.ID = #id#</isNotEmpty><isNotEmpty prepend="and" property="name">t.NAME = #name#</isNotEmpty></dynamic></update><!-- <insert>元素 --><insert id="testInsert" parameterClass="test">INSERT INTO TEST (NAME, AGE, REMARK) values (#name#, #age#, #remark#);<selectKey resultClass="int" keyProperty="id">select @@identity as inserted            <!-- 这里需要说明一下不同的数据库主键的生成,对各自的数据库有不同的方式: -->            <!-- mysql:SELECT LAST_INSERT_ID() AS VALUE -->            <!-- mssql:select @@IDENTITY as value -->            <!-- oracle:SELECT STOCKIDSEQUENCE.NEXTVAL AS VALUE FROM DUAL -->            <!-- 还有一点需要注意的是不同的数据库生产商生成主键的方式不一样,            有些是预先生成 (pre-generate)主键的,如Oracle和PostgreSQL。            有些是事后生成(post-generate)主键的,如MySQL和SQL Server。            所以如果是Oracle数据库,则需要将selectKey写在insert之前。 -->    </selectKey></insert><!-- <delete>元素 --><delete id="testDelete" parameterClass="int">        DELETE FROM TEST T WHERE T.ID=#id#  </delete>    <!-- 下面写几个在项目中,我经常用到的写法,以带条件、分页查询为例 -->  <!-- 拼接一条SQL,这条SQL主要拼接查询时的条件 --><sql id="test_condition_sql"><isNotEmpty prepend="and" property="name">t.NAME = #name#</isNotEmpty><isNotEmpty prepend="and" property="age">t.AGE = #age#</isNotEmpty></sql><!-- 拼接一条SQL,用于统计总记录数<include>元素,可以将其它SQL语句引入refid:需要引入的SQL的ID标识 --><sql id="test_count_sql">SELECT COUNT(1) FROM TEST t WHERE 1 = 1 <include refid="test_condition_sql" /></sql><!-- 分页查询 --><select id="testSelectForPage" parameterClass="test" resultMap="testResult">  <![CDATA[     SELECT t.ID, t.NAME, t.AGE, t.REMARK, ]]>(<include refid="test_count_sql" />) as rowCount FROM TEST t WHERE 1 = 1 <include refid="test_condition_sql" /></select></sqlMap>


0 0
原创粉丝点击