配备裸Ibatis
hibernate的裸配置请看:http://liuzl121.iteye.com/blog/1694187
做项目的时候一般都是ibatis与spring结合起来用的,可是自己要做的例子的话还得用裸的ibatis,这时候突然懵了,不知道怎么获得SqlMapClient,于是上网查找治疗,按照他们的方法自己做了个demo,感觉还挺简单的,在这里记下来,以免以后忘了不知道去哪找。
尊重作者发出参考地址:
iteye: http://sarin.iteye.com/blog/720321
百度文库:http://wenku.baidu.com/view/5ac1093c376baf1ffc4fad17.html
Ibatis的主要是对SqlMapConfig.xml的配置,以及对书写sql语句的xml的配置。
发下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 resource="com/zl/source/jdbc.properties" />
<!-- 报错请将settings中每一行注释去掉 -->
<!-- <settings-->
<!-- cacheModelsEnabled="true" 是否启用SqlMapClient上的缓存机制。 建议设为"true" -->
<!-- lazyLoadingEnabled="true" 是否启用延迟加载机制,建议设为"true" -->
<!-- enhancementEnabled="true" 是否针对POJO启用字节码增强机getter/setter的调用效能,避免Reflect所带来的性能开销。同时,这也为Lazy Loading带来提升。 建议设为"true" -->
<!-- errorTracingEnabled="true" 是否启用错误日志,在开发期间建议设为"true" 以方便调试 -->
<!-- maxRequests="32" 最大并发请求数(Statement并发数 ) -->
<!-- maxSessions="10" 最大Session数。即当前最大允许的并发SqlMapClient数。 -->
<!-- maxTransactions="5" 最大并发事务数 -->
<!-- useStatementNamespaces="true" 是否启用命名空间 -->
<!-- />-->
<transactionManager type="JDBC">
<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 resource="com/zl/source/user.xml" />
</sqlMapConfig>
JDBC的属性写在jdbc.properties文件中,sqlMap中为写sql的xml文件。
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 namespace="user"> <typeAlias alias="User" type="com.zl.entity.SysUserInfo" /> <select id="getUser" resultClass="User"> SELECT USER_NAME AS userName FROM SYS_USER_INFO </select> </sqlMap>
typeAlias 是给类起别名,之后的标签中就可以用别名替代冗长的类全名了,在sqlMap中的namespace是在SqlMapConfig.xml中settings中配置useStatementNamespaces为true时,调用getUser时需要加上别名.getUser,例如我这里主函数的查询就应该是:List<SysUserInfo> list = sqlMap.queryForList("user.getUser"); 另外,我在测试的时候用的是SELECT * FROM SYS_USER_INFO发现返回的类中的信息是不全的,不知道为什么。
操作标签除了select 还有insert 、update、delete 标签中可以设置返回值类型和参数类型,如果想返回的是一个实体类的话,查询语句AS后面的别名必须要和实体类中对应的变量名称保持一致。
下面发下测试类中的代码:
package com.zl.java;
import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.List;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.zl.entity.SysUserInfo;
public class Test {
@SuppressWarnings("unchecked")
public static void main(String[] args) throws IOException, SQLException{
String config = "com/zl/source/SqlMapConfig.xml";
Reader reader = Resources.getResourceAsReader(config);
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
List<SysUserInfo> list = sqlMap.queryForList("getUser");
for (SysUserInfo user : list) {
System.out.println(user.getUserName());
}
}
}
附件中有我做的例子,测试通过的,可以参考