Ibatis是一个很好用的数据库框架。通过XML的配置让你可以系统化你的数据库操作。
我这里介绍一个Ibatis的小例子。
这里我用我最喜欢H2做为数据库。
首先是Config文件:
<?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> <transactionManager type="JDBC"> <dataSource type="SIMPLE"> <property name="JDBC.Driver" value="org.h2.Driver" /> <property name="JDBC.ConnectionURL" value="jdbc:h2:tcp://localhost:9394/D:\oa_db\oa" /> <property name="JDBC.Username" value="sa" /> <property name="JDBC.Password" value="sa" /> </dataSource> </transactionManager> <sqlMap resource="com/tntxia/test/ibatis/User.xml"/> </sqlMapConfig>
接下来是Mapping文件:
User.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> <select id="getAllUser" resultClass="java.util.HashMap"> SELECT * FROM username </select> </sqlMap>
可见,Ibatis的配置非常的简单,而且明了。
接下来,我们再写一段测试的程序来测试一下,是否运行成功。
package com.tntxia.dbmanager.sqlmapping;
import java.io.*;
import java.sql.SQLException;
import java.util.List;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class Test {
/**
* @param args
* @throws FileNotFoundException
* @throws NodeletException
* @throws SQLException
*/
public static void main(String[] args) throws FileNotFoundException, SQLException {
Reader reader = new FileReader(new File("config.xml"));
SqlMapClient client = SqlMapClientBuilder.buildSqlMapClient(reader);
List list = client.queryForList("getAllUser");
System.out.println(list.size());
}
}
结果显示2,说明Ibatis已经把数据库中的信息查询出来了。
Ibatis有个不方便的地方,就是他的SQLMap的配置文件是放在Classpath里面的,这里,我们可以自定义一个ConfigParser类,来实现把SQLMap的配置文件放在文件目录上:
package com.tntxia.ibatis;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;
import java.util.Properties;
import org.w3c.dom.Node;
import com.ibatis.common.xml.Nodelet;
import com.ibatis.common.xml.NodeletUtils;
import com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser;
import com.ibatis.sqlmap.engine.builder.xml.SqlMapParser;
public class MySqlMapConfigParser extends SqlMapConfigParser {
public MySqlMapConfigParser(){
this.parser.setValidation(false);
}
@Override
protected void addSqlMapNodelets() {
parser.addNodelet("/sqlMapConfig/sqlMap", new Nodelet() {
public void process(Node node) throws Exception {
vars.errorCtx.setActivity("loading the SQL Map resource");
Properties attributes = NodeletUtils.parseAttributes(node,
vars.properties);
String filePath = attributes.getProperty("file");
Reader reader = new FileReader(new File(filePath));
(new SqlMapParser(vars)).parse(reader);
}
});
}
}
这里我们自定义了一个Path的属性,所以我们要改一上config.xml:
<?xml version="1.0" encoding="UTF-8"?> <sqlMapConfig> <transactionManager type="JDBC"> <dataSource type="SIMPLE"> <property name="JDBC.Driver" value="org.h2.Driver" /> <property name="JDBC.ConnectionURL" value="jdbc:h2:tcp://localhost:9394/D:\oa_db\oa" /> <property name="JDBC.Username" value="sa" /> <property name="JDBC.Password" value="sa" /> </dataSource> </transactionManager> <sqlMap file="User.xml"/> </sqlMapConfig>
这样,我们的User.xml文件可以不放得那么深了。
直接放在项目的根目录就行了。