详解iBaits中SqlMapClientTemplate的使用
2016-07-23 00:12
337 查看
Apache iBatis(现已迁至Google Code下发展,更名为MyBatis)是当前IT项目中使用很广泛的一个半自动ORM框架,区别于Hibernate之类的全自动框架,iBatis对数据库的操作拥有更加灵活的控制,对于那些经常需要调用本地数据库函数自定义SQL语句,或是喜欢自己优化SQL执行效率的开发者来说,iBatis是一个非常不错的选择。而得到广泛应用的开源企业架构SpringFramework,也很好的将其进行了集成,使得iBatis在 SpringFramework中的使用更加便利、快捷。开发者所要做的就是继承SpringFramework中提供的 SqlMapClientDaoSupport类即可。下面,我将自己的使用经验与大家分享一下:
1、SqlMapClientFactoryBean 的装配
SqlMapClientFactoryBean是SqlMapClientTemplate使用的基础,如果在
SpringFramework应用中没有装配SqlMapClientFactoryBean,那么SqlMapClientTemplate将不可用,报空指针错误。
Java代码
<beanid="sqlMapClient"class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<propertyname="configLocation"value="/WEB-INF/sqlmap-config.xml"/>
<propertyname="dataSource"ref="dataSource"/>
<propertyname="lobHandler"ref="oracleLobHandler"/>
bean>
2、继承使用SqlMapClientDaoSupport类
声明Java类:
Java代码
......
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
......
publicclass ReportDAOImpl extends SqlMapClientDaoSupport {
......
}
SpringFramework配置文件中装配Java类:
"reportDao"class="com.test.dao.ReportDAOImpl">
"sqlMapClient" ref="sqlMapClient"/>
SpringFramework配置文件中装配Java类:
3、使用SqlMapClientTemplate查询
Java代码:
当执行没有参数的查询时:
Java代码
List result = getSqlMapClientTemplate().queryForList("TestSpace.qryTest");
"TestSpace"为iBatis SqlMap文件的命名空间;"qryTest"为iBatis SqlMap的查询方法id
当按照主键获取某条记录信息时:
Java代码
Long id = new Long("2");
Object resultObj = getSqlMapClientTemplate().queryForObject("TestSpace.getTest", id);
当按照某些条件查询时:
Java代码
ObjectA objA = new ObjectA();
objA.setParam1("test1");
objA.setParam2("test2");
......
List result = getSqlMapClientTemplate().queryForList("TestSpace.qryTestByParam", objA);
如果需要取4~40条数据:
List result = getSqlMapClientTemplate().queryForList("TestSpace.qryTestByParam", objA, 4, 40);
也可以返回Map
Java代码
Map result = getSqlMapClientTemplate().queryForMap("TestSpace.qryTestByParam", objA, "MapKey");
4、使用SqlMapClientTemplate添加数据
Java代码:
ObjectA objA = new ObjectA();
Java代码
objA.setParam1("test1");
objA.setParam2("test2");
......
getSqlMapClientTemplate().insert("TestSpace.insertTest", objA);
5、使用SqlMapClientTemplate更新数据
Java代码:
Java代码
ObjectA objA = new ObjectA();
objA.setParam1("test1");
objA.setParam2("test2");
......
getSqlMapClientTemplate().update("TestSpace.updateTest", objA);
更新前20条记录:
Java代码
getSqlMapClientTemplate().update("TestSpace.updateTest", objA, 20);
6、使用SqlMapClientTemplate删除数据
Java代码:
Java代码
Long id = new Long("2");
getSqlMapClientTemplate().delete("TestSpace.deleteTest", id);
1、SqlMapClientFactoryBean 的装配
SqlMapClientFactoryBean是SqlMapClientTemplate使用的基础,如果在
SpringFramework应用中没有装配SqlMapClientFactoryBean,那么SqlMapClientTemplate将不可用,报空指针错误。
Java代码
<beanid="sqlMapClient"class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<propertyname="configLocation"value="/WEB-INF/sqlmap-config.xml"/>
<propertyname="dataSource"ref="dataSource"/>
<propertyname="lobHandler"ref="oracleLobHandler"/>
bean>
2、继承使用SqlMapClientDaoSupport类
声明Java类:
Java代码
......
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
......
publicclass ReportDAOImpl extends SqlMapClientDaoSupport {
......
}
SpringFramework配置文件中装配Java类:
"reportDao"class="com.test.dao.ReportDAOImpl">
"sqlMapClient" ref="sqlMapClient"/>
SpringFramework配置文件中装配Java类:
3、使用SqlMapClientTemplate查询
Java代码:
当执行没有参数的查询时:
Java代码
List result = getSqlMapClientTemplate().queryForList("TestSpace.qryTest");
"TestSpace"为iBatis SqlMap文件的命名空间;"qryTest"为iBatis SqlMap的查询方法id
当按照主键获取某条记录信息时:
Java代码
Long id = new Long("2");
Object resultObj = getSqlMapClientTemplate().queryForObject("TestSpace.getTest", id);
当按照某些条件查询时:
Java代码
ObjectA objA = new ObjectA();
objA.setParam1("test1");
objA.setParam2("test2");
......
List result = getSqlMapClientTemplate().queryForList("TestSpace.qryTestByParam", objA);
如果需要取4~40条数据:
List result = getSqlMapClientTemplate().queryForList("TestSpace.qryTestByParam", objA, 4, 40);
也可以返回Map
Java代码
Map result = getSqlMapClientTemplate().queryForMap("TestSpace.qryTestByParam", objA, "MapKey");
4、使用SqlMapClientTemplate添加数据
Java代码:
ObjectA objA = new ObjectA();
Java代码
objA.setParam1("test1");
objA.setParam2("test2");
......
getSqlMapClientTemplate().insert("TestSpace.insertTest", objA);
5、使用SqlMapClientTemplate更新数据
Java代码:
Java代码
ObjectA objA = new ObjectA();
objA.setParam1("test1");
objA.setParam2("test2");
......
getSqlMapClientTemplate().update("TestSpace.updateTest", objA);
更新前20条记录:
Java代码
getSqlMapClientTemplate().update("TestSpace.updateTest", objA, 20);
6、使用SqlMapClientTemplate删除数据
Java代码:
Java代码
Long id = new Long("2");
getSqlMapClientTemplate().delete("TestSpace.deleteTest", id);
相关文章推荐
- ORACLE的实例恢复机制
- MongoDB基本命令用
- Redis集群搭建
- Mysql 内部结构 / Replication | 原理
- Mysql 内部结构 / Replication | Binlog格式
- 解决PL/SQL Developer连接数据库时出现 “ORA-12541:TNS:无监听程序”错误
- 使用hibernate根据配置的实体bean类无法自动创建数据库表
- Zabbix监控Mysql数据库性能
- Mysql 压力测试工具 mysqlslap
- redis配置安装和使用
- DEBUG MYSQL
- 关系型数据库设计
- mysql 添加的如果重复则采用更新语句
- MySQL学习笔记三
- Oracle到底有多少数据库?
- SQLi Labs writeup (附py脚本)
- JDBC之读取数据库
- tomcat连接池,显示数据库内容到jsp
- 一道sql的笔试题
- java代码显示正确执行,但为何数据未成功插入数据库?原因如下