iBATIS SQL Maps
今天从头到尾的把 Ibatis 配置了一遍,就写一写一些体会!
Ibatis 就是把底层的 JDBC 的封装,提供了更为方便的方法来访问数据库!它建立了 bean 对象与 sql 语句的一个映射,或者说一个 sql 语句成了一个对象,所以他也叫 SqlMap !对于这些 sql 语句也变得更强大灵活了,因为他里面添加了变量,动态元素!在 Java 的原始 JDBC 中,有个 prepared statement ,他就是对这个的扩展!后面来看看具体的一个配置!
配置 XML :
<? xml version = "1.0" encoding = "UTF-8" standalone = "no" ?>
<! DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd" >
< sqlMapConfig >
< properties resource = "connect.properties" />
< settings cacheModelsEnabled = "true" enhancementEnabled = "true" lazyLoadingEnabled = "true"
maxRequests = "3000" maxSessions = "3000" maxTransactions = "3000" useStatementNamespaces = "true" />
< transactionManager type = "JDBC" >
< dataSource type = "SIMPLE" >
< property name = "JDBC.Driver" value = "${driver}" />
< property name = "JDBC.ConnectionURL" value = "${url}" />
< property name = "JDBC.Username" value = "${username}" />
< property name = "JDBC.Password" value = "${password}" />
</ dataSource >
</ transactionManager >
< sqlMap resource = "baseOperation.xml" />
</ sqlMapConfig >
属性文件:
driver= com.mysql.jdbc.Driver
url= jdbc : mysql://localhost:3306/mysql
username= root
password= gyang
sqlmap 定义:
<? 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 = "BASE_OPERATION" >
< select id = "getAllRecords" resultClass = "java.util.HashMap" >
select *
from test
</ select >
</ sqlMap >
说明:
根节点: sqlMapConfig ;其下有子节点: properties , settings , typeAlias , transactionManager , sqlMap 。
Properties :属性 resource 指定这个属性文件的路径,这个属性文件里面定义了一些“变量”(我的理解是变量),然后可以在后续文件 ${valueNamel} 使用这些变量;(像不像定义环境变量?)
Settings :设置一些全局的设定,期间的一些属性我也不清楚,待后研究!
TransactionManager :对具体的数据源的链接的设置!
SqlMap :这里仅仅是引用一个文件!注意这里是核心内容,在那个文件中就是 bean 与 sql 定义语句的映射关系!
< sqlMap namespace = "BASE_OPERATION" >
< select id = "getAllRecords" resultClass = "java.util.HashMap" >
select *
from test
</ select >
</ sqlMap >
这里定义了一个名为 getAllRecords 的 bean ,他就代表这个 sql 语句!这个语句很简单,在这个语句中也没有体现 sqlMap 的很多属性!实际上这里的语句可以很复杂!
这就是一个映射!现在来看看在 Java 源代码中如何使用它!
import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class TestSqlMapApp {
public static void main(String[] args) throws IOException, SQLException {
String str= "sqlMapConfigure.xml" ;
Reader reader=Resources.getResourceAsReader (str);
SqlMapClient sqlMapClient=SqlMapClientBuilder.buildSqlMapClient (reader);
List<HashMap > ls=(List<HashMap>)sqlMapClient.queryForList(
"BASE_OPERATION.getAllRecords" ) ;
for (HashMap m : ls){
System. out .println(m);
}
}
}
所用到的 jar 包: ibatis-sqlmap-2.3.4.726.jar, mysql-connector-java-5.1.13-bin.jar
当时在这里遇到一个问题,开始 ibatis-sqlmap.jar 过低导致出了个莫名奇妙的错误,折腾了一个下午,后面换了就 OK !郁闷之极!
(List<HashMap>)sqlMapClient.queryForList(
"BASE_OPERATION.getAllRecords" ) ; 在这里的调用就进行了一次数据库的访问,他会返回一个结果集,是一个 HashMap 的 List !
这些就是今天配置所涉及的内容了!
其实在实际写后台代码时遇到了很多问题,这些后续在写!
对 Ibatis 有兴趣的推荐看下面的参考!
参考: Ibatis 官网的 iBATIS SQL Maps 开发指南