什么是ibatis?
它是一个用来访问数据库的工具,可以看作数据持久化框架。它将sql语句映射为java对象,可以让我们只需要知道xml文件配置和sql语句的写法就能操作数据库。使用起来简单,轻量。
ibatis的配置
它的配置都是在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>
<settings useStatementNamespaces="true" enhancementEnabled="false" errorTracingEnabled="false" />
<!-- Common Module -->
<sqlMap resource="config/sqlmapping/alias.xml" />
<sqlMap resource="config/sqlmapping/sqlmapping.xml" />
</sqlMapConfig>
resource:使用resource属性配置,类加载会从类路径定位后面的配置文件,一般我们不会将所有配置写在sqlMapConfig文件里面,方便阅读。一般分为两个文件,一个alias.xml给类型取别名,sqlmapping.xml写具体的sql操作语句。
settings:配置全局配置信息,它有很多属性如下
useStatementNamespaces:是否使用命名空间,默认不使用,一般比较大的项目,它能让操作看起来比较清楚直观。在< sql-map >中加入namespace属性即可,之后我们在程序中使用“命名空间名.sql语句id”就行了
enhancementEnabled:是否使用cglib中那些优化的类来提高延迟加载的性能,默认为使用。使用时必须加入cglib的类库,一般不使用
errorTracingEnabled : 是否启用错误日志.
lazyLoadingEnabled:是否进行延迟加载,默认为true。延迟加载的意思是只先加载必要的信息,而延迟加载一些不确定要使用的数据。
cacheModelsEnabled:是否启用数据缓存,默认为true,使用缓存能提高程序的性能,所以开启就好
maxRequests:最大并发请求数
maxSessions :当前最大允许的并发SqlMapClient数
maxTransactions:最大并发事务数
使用别名,这能简化sql语句配置中resultclass或者resultmap时类型的书写。(alias.xml)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.org/dtds/sql-map-2.dtd">
<sqlMap namespace="alias">
<!-- type alias -->
<typeAlias alias="HashMap" type="java.util.HashMap" />
<typeAlias alias="List" type="java.util.List" />
<typeAlias alias="String" type="java.lang.String" />
<typeAlias alias="Decimal" type="java.math.BigDecimal" />
<typeAlias alias="Timestamp" type="java.sql.Timestamp" />
<typeAlias alias="Int" type="java.lang.Integer" />
</sqlMap>
配置具体的sql语句xml
tip:<![CDATA[ ]]>是xml文件的一种语法,它的意思是它包含的所有内容不被xml解析。因为我们原本写xml文件时,一些特殊的字符会被转义像<=或者&之类的,但是作为sql语句我们不希望它被转义所以就放在这个里面
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.org/dtds/sql-map-2.dtd">
<sqlMap namespace="person">
//parameterClass代表传入的参数类型 resultClass代表返回的参数类型
<select id="selectPersonById" parameterClass="Int" resultClass="HashMap">
<![CDATA[
select * from Person
where ID=#id#
]]>
</select>
//使用resultMap
<resultMap id="selectPersonByNameResult" class="HashMap">
<result property="id" column="ID" />
<result property="name" column="NAME" />
<result property="age" column="AGE" />
</resultMap>
<select id="selectPersonByName" parameterClass="String" resultMap="selectPersonByNameResult">
<![CDATA[
select * from Person
where NAME=#name#
]]>
</select>
<insert id="addPerson" parameterClass="HashMap">
<![CDATA[
insert into Person(
ID,
NAME,
AGE
)
VALUES(
#id#,
#name#,
#age#
)
]]>
</insert>
<update id="updateName" parameterClass="String">
update Person
set NAME=#name#
</update>
<delete id="deletePerson" parameterClass="Int">
delete from Person
where ID=#id#
</delete>
</sqlMap>
说一下resultClass和resultMap的区别
当结果集列名和类的属性名完全相对应的时候,则可直接用resultClass直接指定查询结果类型
当查询结果集与属性名对应不上的时候,就可以采用resultMap指定列名与对象属性名之间的对应关系,否则对应不上的属性将为null或0.
简单来说,最好用resultMap!
我们在程序中调用时
this.getSqlMap().queryForList("person.selectPersonById", id);
ibatis和mybatis的区别
在 ibatis3.*版本以后它改名为mybatis,也就是说它们就是一个东西的不同版本
它们主要有以下区别:
ibatis配置时根元素是sqlMapConfig,mybatis中是configuration
settings元素的配置
<settings useStatementNamespaces="true" enhancementEnabled="false" errorTracingEnabled="false" />//ibatis
<settings>
<setting name="useStatementNamespaces1" value="true"/>
<setting name="enhancementEnabled2" value="false"/>
<setting name="errorTracingEnabled" value="false"/>//mybatis
</settings>
ibatis中是使用sqlMap元素,mybatis中是使用mapper元素
ibatis中有resultMap和resultClass两种返回类型,mybatis中将两者统一为resultType
ibatis中传入参数为parameterClass,mybatis中是parameterType
参数的写法
where ID=#id# //ibatis
where ID = #{id} //mybatis