首先介绍一下SqlMapClient实例有哪些常用的方法,提供给我们进行操作的:
增加:sqlMapClient.insert("Sql语句的id",参数)——返回受影响的行数
删除:sqlMapClient.delete("Sql语句的id",参数)——返回受影响的行数
修改:sqlMapClient.update(“Sql语句的id”,参数)——返回受影响的行数
查询1:sqlMapClient.queryForObject("Sql语句的id",参数)——返回object(该方法可以用来调函数和过程)
查询2:sqlMapClient.queryForList("Sql语句的id",参数)——返回List(该方法可以用来返回查询的多行结果)
环境搭建:
1.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>
<!-- 引用JDBC属性的配置文件 -->
<properties resource="com/jdbc/test/db.properties"/>
<!-- 使用JDBC的事务管理 -->
<transactionManager type="JDBC">
<!-- 数据源 -->
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${accntMysqlDriver}"/>
<property name="JDBC.ConnectionURL" value="${accntMysqlDburl}"/>
<property name="JDBC.Username" value="${accntMysqlUsername}"/>
<property name="JDBC.Password" value="${accntMysqlPassword}"/>
</dataSource>
</transactionManager>
<sqlMap resource="com/jdbc/test/CreateFile.sql.xml" />
</sqlMapConfig>
2、db.properties
accntMysqlDriver=com.mysql.jdbc.Driver
accntMysqlDburl=jdbc:mysql://localhost:3306/ecs_upf
accntMysqlUsername=root
accntMysqlPassword=root
3、sql.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="CreateFile">
<typeAlias alias="HashMap" type="java.util.HashMap"></typeAlias>
<select id="GetConfig" parameterClass="HashMap" resultClass="com.jdbc.bean.CreateFileTaskBean">
<![CDATA[
SELECT CREATE_FILE_CODE as createFileCode,
CREATE_FILE_DESC as createFileDesc,
ACCOUNTS_CODE as accountsCode,
DOWNLOAD_TYPE as downloadType
FROM TD_P_CREATEFILE
WHERE ACCOUNTS_CODE = #ACCOUNTS_CODE#
AND STATUS = '0'
]]>
</select>
</sqlMap>
4、Test
private static SqlMapClient sqlMapClient = null;
// 读取配置文件
static {
try {
Reader reader = Resources.getResourceAsReader("com/jdbc/test/sqlMapConfig.xml");
sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@org.junit.Test
public static void test() {
try {
Map<String, String> map = new HashMap<String, String>();
map.put("ACCOUNTS_CODE", "150003");
/*List li=sqlMapClient.queryForList("GetConfig",map);
System.out.println("++++++++"+li);*/
CreateFileTaskBean b= (CreateFileTaskBean) sqlMapClient.queryForObject("GetConfig",map);
System.out.println(b.getAccountsCode()+b.getCreateFileDesc());
} catch (SQLException e) {
e.printStackTrace();
}
}
Hibernate是当前最流行的O/R mapping框架,当前版本是3.05。它出身于sf.net,现在已经成为Jboss的一部分了。
iBATIS是另外一种优秀的O/R mapping框架,当前版本是2.0。目前属于apache的一个子项目了。
相对Hibernate"O/R"而言,iBATIS 是一种"Sql Mapping"的ORM实现。
Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO和数据库表之间的映射,以及SQL的自动生成和执行。程序员往往只需定义好了POJO到数据库表的映射关系,即可通过Hibernate提供的方法完成持久层操作。程序员甚至不需要对SQL的熟练掌握,Hibernate/OJB会根据制定的存储逻辑,自动生成对应的SQL并调用JDBC接口加以执行。
而iBATIS的着力点,则在于POJO与SQL之间的映射关系。也就是说,iBATIS并不会为程序员在运行期自动生成SQL执行。具体的SQL需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。使用iBATIS提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象,这一层与通过Hibernate 实现ORM而言基本一致,而对于具体的数据操作,Hibernate会自动生成SQL语句,而iBATIS则要求开发者编写具体的SQL语句。相对Hibernate而言,iBATIS以SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。
二者的对比: