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的一个属性值.这 ...
随机推荐
- PHP中类中成员及常量
类中成员概述 面向对象编程,是需要通过“对象”去做什么事情(以完成某种任务): 而: 对象总是来源于类: 所以: 面向对象的编程,一切都是从定义类开始: 类中成员分为3大类: 属性: 方法: 常量: ...
- Java进行Base64的编码(Encode)与解码(Decode)
关于base64编码Encode和Decode编码的几种方式 Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便 ...
- MacOS & 如何在当前文件下打开 terminal
MacOS & 如何在当前文件下打开 terminal macbook 如何在文件夹中 打开 terminal https://www.cnblogs.com/yjmyzz/p/3662507 ...
- LoadRunner脚本参数化常见错误
错误代码:Error:missing newline in d:\loadrunner\username.dat 错误原因:场景设置不合理,参数数量不够,或者参数化文件有问题. 1)如果参数化文件反复 ...
- python while 学习
while True: reply = input('please input:') if reply == 'stop': break else: print (reply.upper())
- 第93天:CSS3 中边框详解
CSS3 边框详解 其中边框圆角.边框阴影属性,应用十分广泛,兼容性也相对较好,具有符合渐进增强原则的特征,我们需要重点掌握. 一.边框圆角 border-radius 每个角可以设置两个值 ...
- bzoj1318[spoj 744] Longest Permutation
题意 给出一个长度为n的,所有元素大小在[1,n]的整数数列,要求选出一个尽量长的区间使得区间内所有元素组成一个1到区间长度k的排列,输出k的最大值 n<=1e5 分析 不会做,好菜啊.jpg ...
- atcoder 2017Code festival C ——D题 Yet Another Palindrome Partitioning(思维+dp)
题目大意: 把一个字符串s分割成m个串,这m个串满足至多有一种字符出现次数为奇数次,其他均为偶数次,问m的最小值 题解: 首先我们想一下纯暴力怎么做 显然是可以n^2暴力的,然后dp[i]表示分割到i ...
- NLP度量指标BELU真的完美么?
摘要: NLP重要评价准则之一——BLEU,真的完美无缺么? 刚接触自然语言处理的朋友通常会问我:当系统的输出是文本,而非对输入文本进行某种分类,如何对该系统进行评估.当模型的输入是文本信息,输出也是 ...
- [CodeVs1050]棋盘染色2(状态压缩DP)
题目大意:有一个5*N(≤100)的棋盘,棋盘中的一些格子已经被染成了黑色,求最少对多少格子染色,所有的黑色能连成一块. 这题卡了我1h,写了2.6k的代码,清明作业一坨还没做啊...之前一直以为这题 ...