Spring提供的iBatis的SqlMap配置
1. applicationContext.xml
<!-- Spring提供的iBatis的SqlMap配置-->
<bean id="sqlMapClient" class="com.ks.tjrw.jl.dao.impl.ibatis.KSSqlMapClientFactoryBean">
<property name="configLocation" value="classpath:SqlMapConfig.xml" />
<property name="dataSource" ref="dataSource" />
</bean>
2. 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="db.properties" />
<settings cacheModelsEnabled="true" enhancementEnabled="true"
lazyLoadingEnabled="true" maxRequests="64" maxSessions="20"
maxTransactions="20" useStatementNamespaces="false" />
<sqlMap resource="com/ks/tjrw/jl/sqlFile/Pdgxxt.xml" />
<sqlMap resource="com/ks/tjrw/jl/sqlFile/Pdxljdjxjyjl.xml" />
<sqlMap resource="com/ks/tjrw/jl/sqlFile/Zmqfh.xml" />
<sqlMap resource="com/ks/tjrw/jl/sqlFile/ZmqfhSub.xml" />
<sqlMap resource="com/ks/tjrw/jl/sqlFile/Clhzlx.xml" />
</sqlMapConfig>
3.列举其中一个
com/ks/tjrw/jl/sqlFile/Pdgxxt.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" >
<sqlMap namespace="Pdgxxt">
<typeAlias alias="Pdgxxt" type="com.ks.tjrw.jl.model.Pdgxxt" />
<resultMap id="get-PdxSub-result" class="com.ks.tjrw.jl.model.Pdgxxt">
<result property="powerNo" column="POWER_DISTRIBUTION_NO"/>
<result property="name" column="NAME"/>
<result property="number" column="NUMBER"/>
<result property="linkAmount" column="LINK_AMOUNT"/>
<result property="linkSituation" column="LINK_SITUATION"/>
<result property="verity" column="VERITY_SITUATION"/>
<result property="createTime" column="CREATE_TIME"/>
<result property="lineNo" column="LINE_CHECK_NO"/>
</resultMap>
<select id="findPdxSubByPk" parameterClass="Pdgxxt" resultClass="Pdgxxt" resultMap="get-PdxSub-result">
select * from JL_PDXLJDJXJYJL_PDGXXT where POWER_DISTRIBUTION_NO=#powerNo#
</select>
<!-- 查询配电线路接地、接线检验记录_配电干线表实体 -->
<select id="getPdg" resultClass="Pdgxxt" parameterClass="java.lang.String" resultMap="get-PdxSub-result">
select * from JL_PDXLJDJXJYJL_PDGXXT where 1=1
<dynamic>
<isNotEmpty prepend="and">
LINE_CHECK_NO=#lineNo#
</isNotEmpty>
</dynamic>
</select>
<!-- 插入配电线路接地、接线检验记录_配电干线表实体 -->
<insert id="insertPdg" parameterClass="Pdgxxt">
insert into JL_PDXLJDJXJYJL_PDGXXT(POWER_DISTRIBUTION_NO)
values (#powerNo#)
</insert>
<!-- 修改配电线路接地、接线检验记录_配电干线表实体 -->
<update id="updatePdg" parameterClass="Pdgxxt">
update JL_PDXLJDJXJYJL_PDGXXT set POWER_DISTRIBUTION_NO=#powerNo#
<dynamic>
<isNotNull prepend="," property="lineNo">
LINE_CHECK_NO=#lineNo#
</isNotNull>
<isNotNull prepend="," property="name">
"NAME"=#name#
</isNotNull>
<isNotNull prepend="," property="number">
"NUMBER"=#number#
</isNotNull>
<isNotNull prepend="," property="linkAmount">
LINK_AMOUNT=#linkAmount#
</isNotNull>
<isNotNull prepend="," property="linkSituation">
LINK_SITUATION=#linkSituation#
</isNotNull>
<isNotNull prepend="," property="verity">
VERITY_SITUATION=#verity#
</isNotNull>
<isNotNull prepend="," property="createTime">
CREATE_TIME=#createTime#
</isNotNull>
</dynamic>
where POWER_DISTRIBUTION_NO=#powerNo#
</update>
<!-- 删除配电线路接地、接线检验记录_配电干线表实体 -->
<delete id="deletePdg" parameterClass="java.util.List">
delete JL_PDXLJDJXJYJL_PDGXXT
<iterate prepend="WHERE" open="(" close=")"
conjunction="OR">
LINE_CHECK_NO=#matList[]#
</iterate>
</delete>
<delete id="deletePdxSubByCondition" parameterClass="java.lang.String">
delete from JL_PDXLJDJXJYJL_PDGXXT where LINE_CHECK_NO=#lineNo#
</delete>
</sqlMap>
4.对应的action
PdxAction---》列举edit方法
public String editPdx(){
pdxSubList = pdxSubService.findPdxs(pdx.getLineCheckNo());
pdx = pdxDao.findPdxByNo(pdx);
return newpath("/tjrw/jl/pdx.jsp");
}
5.
@Repository("PdxljdjxjyjlDaoImpl")
public class PdxljdjxjyjlDaoImpl extends BaseDaoiBatis<Pdxljdjxjyjl> implements PdxljdjxjyjlDao {
public List<Pdxljdjxjyjl> findPdxByQuery(Object obj, Pagination p) {
return queryForList("getPdx",obj,p);
}
public boolean insertPdx(Pdxljdjxjyjl pdx) {
return insert("insertPdx",pdx);
}
public boolean updatePdx(Pdxljdjxjyjl pdx) {
return update("updatePdx",pdx);
}
public boolean deletePdx(List<String> pkList) {
return delete("deletePdx",pkList);
}
public long getAllCounts(){
return getObjectTotal("getPdx");
}
public long getAllCounts(Object obj){
return getObjectTotal("getPdx",obj);
}
public Pdxljdjxjyjl findPdxByNo(Pdxljdjxjyjl pdx){
return (Pdxljdjxjyjl) queryForObject("findPdxByPk",pdx);
}
}
/**
*
* 类说明:数据操作基类,实现了物理分页查询,增,删,改等基本功能
* 作者:lf
* 创建时间:2011-4-4 下午04:59:48
*/
public class BaseDaoiBatis<T> {
private Logger logger = null;
@Resource(name="sqlMapClient")
private SqlMapClient sqlMapper = null;
public BaseDaoiBatis(){
getLogger();
}
public SqlMapClient getSqlMapper() {
return sqlMapper;
}
public void setSqlMapper(SqlMapClient sqlMapper) {
this.sqlMapper = sqlMapper;
}
protected Logger getLogger() {
if (null == logger) {
logger = Logger.getLogger(getClass().getName());
}
return logger;
}
/**
* 根据传入的sqlId创建查询总记录数的count sqlId
* 创建CountStatement,并将其添加到MapStatement(HashMap)中
*/
private void prepareCountQuery(String sqlId) {
//将传入的sqlId转换为__sqlId__Count__
String countQuery = CountStatementUtil.getCountStatementId(sqlId);
if (logger.isDebugEnabled()) {
logger.debug("Convert " + sqlId + " to " + countQuery);
}
if (sqlMapper instanceof SqlMapClientImpl) {
SqlMapExecutorDelegate delegate = ((SqlMapClientImpl) sqlMapper).getDelegate();
try {
delegate.getMappedStatement(countQuery);
}catch (SqlMapException e) {
delegate.addMappedStatement(CountStatementUtil.
createCountStatement(delegate.getMappedStatement(sqlId)));
}
}
}
/**
* 根据传入的sqlId和对象参数,查询满足条件的总记录条数
*/
public long getObjectTotal(String sqlId, Object parameterObject) {
long count = 0l;
prepareCountQuery(sqlId); //创建CountStatement,并将其添加到MapStatement(HashMap)中
try {
count = (Long) sqlMapper.queryForObject(
CountStatementUtil.getCountStatementId(sqlId),
parameterObject);
} catch (SQLException e) {
printErrorInfo(e);
}
return count;
}
/**
* 根据传入的sqlId查询满足条件的总记录条数
*/
public long getObjectTotal(String sqlId) {
long count = 0l;
prepareCountQuery(sqlId); //创建CountStatement,并将其添加到MapStatement(HashMap)中
try {
count = (Long) sqlMapper.queryForObject(
CountStatementUtil.getCountStatementId(sqlId));
} catch (SQLException e) {
printErrorInfo(e);
}
return count;
}
/**
* 根据传入的sqlId查询数据库
*/
public T queryForObject(String sqlId) {
T results = null;
try {
results = (T) sqlMapper.queryForObject(sqlId);
} catch (SQLException e) {
printErrorInfo(e);
}
return results;
}
/**
* 根据传入的sqlId,和对象参数parameterObject查询数据库
*/
public T queryForObject(String sqlId, Object parameterObject) {
T results = null;
try {
results = (T) sqlMapper.queryForObject(sqlId, parameterObject);
} catch (SQLException e) {
printErrorInfo(e);
}
return results;
}
/**
* 使用sql语句查询列表,返回List集合
* 待执行的sql查询语句,该sql语句存在于XML配置文件中,此处只需要引用相应的ID即可
*/
public List<T> queryForList(String sqlId) {
List<T> results = null;
try {
results = sqlMapper.queryForList(sqlId);
} catch (SQLException e) {
printErrorInfo(e);
}
return results;
}
public List<T> queryForList(String sqlId, Object parameterObject) {
List<T> results = null;
try {
results = sqlMapper.queryForList(sqlId, parameterObject);
} catch (SQLException e) {
printErrorInfo(e);
}
return results;
}
/**
* 功能说明:分页查询
* @param sqlId sql查询语句
* @param pagination.getCurrentPage() 起始页面
* @param pagination.getPageSize() 每页的记录条数
* @return
*/
public List<T> queryForList(String sqlId,Pagination pagination) {
List<T> results = null;
try {
results = sqlMapper.queryForList(sqlId,
pagination.getCurrentPage(), pagination.getPageSize());
} catch (SQLException e) {
printErrorInfo(e);
}
return results;
}
public List<T> queryForList(String sqlId, Object parameterObject,Pagination pagination) {
List<T> results = null;
try {
results = sqlMapper.queryForList(sqlId, parameterObject,
pagination.getCurrentPage(),pagination.getPageSize());
} catch (SQLException e) {
printErrorInfo(e);
}
return results;
}
/**
* 向数据库执行插入操作
*
* @param sqlId 待执行的sql插入操作语句,该sql语句存在于XML配置文件中,此处只需要引用相应的ID即可
* @param parameterObject 待插入的对象
* @return 在配置文件中配置<selectKey>
*/
public boolean insert(String sqlId, Object parameterObject) {
try {
sqlMapper.insert(sqlId, parameterObject);
} catch (SQLException e) {
printErrorInfo(e);
return false;
}
return true;
}
/**
* 向数据库执行插入操作,并返回配置文件中<selectKey>所返回的值
*
* @param sqlId
* @param parameterObject
* @return
*/
public int insertAndReturnPK(String sqlId, Object parameterObject) {
int returnValue = 0;
try {
returnValue = Integer.parseInt(sqlMapper.insert(sqlId,
parameterObject).toString());
} catch (SQLException e) {
printErrorInfo(e);
}
return returnValue;
}
/**
* 向数据库执行修改操作
*
* @param sqlId 待执行的sql修改操作语句,该sql语句存在于XML配置文件中,此处只需要引用相应的ID即可
* @param parameterObject 待修改的对象
* @return
*/
public boolean update(String sqlId, Object parameterObject) {
try {
sqlMapper.update(sqlId, parameterObject);
} catch (SQLException e) {
printErrorInfo(e);
return false;
}
return true;
}
/**
* 向数据库执行删除操作
*
* @param sqlId
* 待执行的sql删除操作语句,该sql语句存在于XML配置文件中,此处只需要引用相应的ID即可
* @param parameterObject
* 待删除的对象
*/
public boolean delete(String sqlId, Object parameterObject) {
try {
sqlMapper.delete(sqlId, parameterObject);
} catch (SQLException e) {
printErrorInfo(e);
return false;
}
return true;
}
/**
* 打印错误信息,以便于调试
*/
private void printErrorInfo(SQLException e) {
logger.error("error in class " + this.getClass() + ":" + e.toString()
+ ",caused by:" + e.getCause()+ ",more information:" + e.getMessage());
}
}
Spring提供的iBatis的SqlMap配置的更多相关文章
- PropertyPlaceholderConfigurer的用法(使用spring提供的类读取数据库配置信息.properties)
http://www.cnblogs.com/wanggd/archive/2013/07/04/3172042.html(写的很好)
- 使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法
Java提供了Class类,可以通过编程方式获取类别的字段和方法,包括构造方法 获取Class类实例的方法: 类名.class 实例名.getClass() Class.forNam ...
- 006-Spring Boot自动配置-Condition、Conditional、Spring提供的Conditional自动配置
一.接口Condition.Conditional(原理) 主要提供一下方法 boolean matches(ConditionContext context, AnnotatedTypeMetada ...
- spring提供的事务配置--纯注解
spring提供的事务--纯注解 模拟转账业务 ,出错需要事务回滚,没错正常执行 事务和数据库技术都是spring的内置提供的 --------dao包--------------- IAccoun ...
- iBatis2之SqlMap配置总结(18条)
iBatis2之SqlMap配置总结(18条) SqlMap的配置是iBatis中应用的核心.这部分任务占据了iBatis开发的70的工作量. 1.命名空间: <sqlMap names ...
- springboot+ibatis 多数据源配置
这个是boot基本版本包,因为我用的打包方式是war所以去除掉了boot内置的tomcat,但是为了方便测试又引入了内置tomcat,只要添加<scope>provided</sco ...
- Spring Boot实践——基础和常用配置
借鉴:https://blog.csdn.net/j903829182/article/details/74906948 一.Spring Boot 启动注解说明 @SpringBootApplica ...
- Spring学习笔记(2)——Bean的配置
要使应用程序中的Spring容器成功启动,需要以下三个方面的条件都具备: 1.Spring框架的类包都已经放到应用程序的类路径下 2.应用程序为Spring提供完备的Bean配置信息 3.Bean的类 ...
- Spring应用教程-3 依赖关系配置
注:组件与组件之间的耦合,采用依赖注入管理,但普通的JavaBean属性值,应直接在代码中设置. 1. 注入其他Bean的属性值 我们分析一下,Bean_A的一个属性要依赖Bean_B的一个属性值.这 ...
随机推荐
- p2 入门
心里一片空白,要弄个p2的demo出来... 先了解下p2的概念吧 P2只是一个算法库,以刚体为对象模型,模拟并输出物理碰撞.运动结果.这个过程通过持续调用world中的step()方法来实现 p2的 ...
- 按位与&、按位或|、按位异或^
与1进行位与&运算,值保持不变: 与0进行位与&运算,值清0: 按位与&常用于将整型变量中某些位清0,而其他位保持不变. 与1进行位或|运算,值置1: 与0进行位或|运算,值保 ...
- Object 接受集合里面的任意数据类型 所有的类型默认继承object
- SQL 临时表或表变量替代游标(转)
1.如果表没有自动增长的标识列(int) 使用临时表 SELECT IDENTITY(int) NewID ,.. INTO #tmp FROM YouTable 2.表有标识列 使用表变量 INSE ...
- 题解 P1781 【宇宙总统】
小金羊发现用的方法和python大佬们的方法还是不一样... (大概是我太弱了qAq) emmm... (Mode:Python 3)Code: a=int(input()) #几个数 L=list( ...
- 常州day5
Task 1 小 W 和小 M 一起玩拼图游戏啦~ 小 M 给小 M 一张 N 个点的图,有 M 条可选无向边,每条边有一个甜蜜值,小 W 要选 K条边,使得任意两点间最多有一条路径,并且选择的 K条 ...
- 洛谷U14667 肝活动【比赛】 【状压dp】
题目描述 Yume 最近在玩一个名为<LoveLive! School idol festival>的音乐游戏.他之所以喜欢上这个游戏,是因为这个游戏对非洲人十分友好,即便你脸黑到抽不出好 ...
- bzoj3306: 树(dfs序+倍增+线段树)
比较傻逼的一道题... 显然求子树最小值就是求出dfs序用线段树维护嘛 换根的时候树的形态不会改变,所以我们可以根据相对于根的位置分类讨论. 如果询问的x是根就直接输出整棵树的最小值. 如果询问的x是 ...
- C#调用GDI+1.1中的函数实现高斯模糊、USM锐化等经典效果。
http://www.cnblogs.com/Imageshop/archive/2012/12/13/2815712.html 在GDI+1.1的版本中,MS加入不少新的特性,其中的特效类Effec ...
- 虚拟机安装ubuntu14.04.5系统
参考教程 在vitualbox安装 ubuntu14.04.2 LTS教程 http://jingyan.baidu.com/article/46650658228345f549e5f8cc.html ...