Apache Ibatis 是一个你半自动的ORM产品,对于需要自己调用自定义sql或者需要手动优化sql的开发者是不错的选择. 现在 ibatis已经迁至google code下发展 ,更名为Mybatis .
SpringFramework集成了ibatis,开发者使用SqlMapClientDaoSupport即可.
要使用sprin集成的ibatis需要做以下两点:
1 、SqlMapClientFactoryBean的装配
注:SqlMapClientFactoryBean是SqlMapClientTemplate使用的基础,SpringFramework应用中没有装配SqlMapClientFactoryBean,那么SqlMapClientTemplate将不可用,报空指针错误。
装配:
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="/WEB-INF/sqlmap-config.xml"/>
<property name="dataSource" ref="dataSource"/>
<property name="lobHandler" ref="oracleLobHandler"/>
bean>
注意上面的configLocation的值是路径形式:/WEB-INF/sqlmap-config.xml,还可以是的形式(classpath:SqlMapConfig.xml):
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation">
<value>classpath:SqlMapConfig.xml</value>
</property>
<property name="dataSource">
<ref bean="dataSource-sale"/>
</property>
</bean>
2、继承SqlMapClientDaoSupport(一般是service层)
......
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
......
public class ReportDAOImpl extends SqlMapClientDaoSupport {
......
}
SpringFramework配置文件中装配Java类:
"reportDao" class="com.test.dao.ReportDAOImpl">
"sqlMapClient" ref="sqlMapClient"/>
3、使用SqlMapClientTemplate操作数据库
1)没有参数的查询
List result = getSqlMapClientTemplate().queryForList("TestSpace.qryTest");
"TestSpace"为iBatis SqlMap文件的命名空间;"qryTest"为iBatis SqlMap的查询方法id。
2)当按照主键获取某条记录信息时:
Long id = new Long("2"); Object resultObj = getSqlMapClientTemplate().queryForObject("TestSpace.getTest", id); 3)按某些条件查询
ObjectA objA = new ObjectA();
objA.setParam1("test1");
objA.setParam2("test2");
......
List result = getSqlMapClientTemplate().queryForList("TestSpace.qryTestByParam", objA);
4)分页查询(4~40条数据)
List result = getSqlMapClientTemplate().queryForList("TestSpace.qryTestByParam", objA, 4, 40);
也可以返回Map:
Map result = getSqlMapClientTemplate().queryForMap("TestSpace.qryTestByParam", objA, "MapKey");
5)其他方法
更新:getSqlMapClientTemplate().update("TestSpace.updateTest", objA);
注意:
更新前20条记录:
getSqlMapClientTemplate().update("TestSpace.updateTest", objA, 20);
插入:getSqlMapClientTemplate().insert("TestSpace.insertTest", objA);
删除:
Long id = new Long("2");
getSqlMapClientTemplate().delete("TestSpace.deleteTest", id);
+++++++++=====+++++++++++++++++
下面给一个工具类的代码:
import java.util.List;
import org.jw.cn.base.dao.IReader;
import org.jw.cn.base.dto.Dto;
import org.jw.cn.base.dto.impl.BaseDto;
import org.springframework.orm.ibatis.SqlMapClientTemplate;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
public class IReaderImpl extends SqlMapClientDaoSupport
implements IReader
{
public Object queryForObject(String statementName, Object parameterObject)
{
return super.getSqlMapClientTemplate().queryForObject(statementName, parameterObject);
}
public Object queryForObject(String statementName)
{
return super.getSqlMapClientTemplate().queryForObject(statementName, new BaseDto());
}
public List<Object> queryForList(String statementName, Object parameterObject)
{
return super.getSqlMapClientTemplate().queryForList(statementName, parameterObject);
}
public List<Object> queryForPage(String statementName, Dto qDto)
{
return super.getSqlMapClientTemplate().queryForList(statementName, qDto, qDto.getAsInteger("start").intValue(),
qDto.getAsInteger("end").intValue());
}
public List<Object> queryForList(String statementName)
{
return super.getSqlMapClientTemplate().queryForList(statementName, new BaseDto());
}
}
DWR应用时可以用接口,以避免进行繁琐的方法暴露配置:
接口
package org.jw.cn.base.service;
import org.jw.cn.base.dto.Dto;
public abstract interface BaseService
{
public abstract Dto jsCall(Dto paramDto);
}
实现类
package org.jw.cn.base.service.impl;
import org.apache.log4j.Logger;
import org.jw.cn.base.dao.IBaseDao;
import org.jw.cn.base.dao.IReader;
import org.jw.cn.base.log.BaseLogger;
import org.jw.cn.base.service.BaseService;
public abstract class BaseServiceImpl
implements BaseService
{
protected IBaseDao baseDao;
protected IReader baseReader;
protected Logger log = BaseLogger.getLogger("APP-LOG");
public IBaseDao getBaseDao()
{
return this.baseDao;
}
public void setBaseDao(IBaseDao baseDao)
{
this.baseDao = baseDao;
}
public IReader getBaseReader()
{
return this.baseReader;
}
public void setBaseReader(IReader baseReader)
{
this.baseReader = baseReader;
}
}
dwr.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
<init>
<creator id="BssCreator" class="org.directwebremoting.create.NewCreator"/></init>
<allow>
<create creator="BssCreator" javascript="JSBaseCall" scope="application">
<param name="class" value="org.jw.cn.base.jscall.BaseJSCallImpl"/>
</create>
<convert converter="bean" match="org.hd.demo.bo.*"/>
</allow>
</dwr>
转载于:https://blog.51cto.com/langlichong/1730392