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配置的更多相关文章

  1. PropertyPlaceholderConfigurer的用法(使用spring提供的类读取数据库配置信息.properties)

    http://www.cnblogs.com/wanggd/archive/2013/07/04/3172042.html(写的很好)

  2. 使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法

    Java提供了Class类,可以通过编程方式获取类别的字段和方法,包括构造方法    获取Class类实例的方法:   类名.class   实例名.getClass()   Class.forNam ...

  3. 006-Spring Boot自动配置-Condition、Conditional、Spring提供的Conditional自动配置

    一.接口Condition.Conditional(原理) 主要提供一下方法 boolean matches(ConditionContext context, AnnotatedTypeMetada ...

  4. spring提供的事务配置--纯注解

    spring提供的事务--纯注解 模拟转账业务  ,出错需要事务回滚,没错正常执行 事务和数据库技术都是spring的内置提供的 --------dao包--------------- IAccoun ...

  5. iBatis2之SqlMap配置总结(18条)

    iBatis2之SqlMap配置总结(18条)   SqlMap的配置是iBatis中应用的核心.这部分任务占据了iBatis开发的70的工作量. 1.命名空间:   <sqlMap names ...

  6. springboot+ibatis 多数据源配置

    这个是boot基本版本包,因为我用的打包方式是war所以去除掉了boot内置的tomcat,但是为了方便测试又引入了内置tomcat,只要添加<scope>provided</sco ...

  7. Spring Boot实践——基础和常用配置

    借鉴:https://blog.csdn.net/j903829182/article/details/74906948 一.Spring Boot 启动注解说明 @SpringBootApplica ...

  8. Spring学习笔记(2)——Bean的配置

    要使应用程序中的Spring容器成功启动,需要以下三个方面的条件都具备: 1.Spring框架的类包都已经放到应用程序的类路径下 2.应用程序为Spring提供完备的Bean配置信息 3.Bean的类 ...

  9. Spring应用教程-3 依赖关系配置

    注:组件与组件之间的耦合,采用依赖注入管理,但普通的JavaBean属性值,应直接在代码中设置. 1. 注入其他Bean的属性值 我们分析一下,Bean_A的一个属性要依赖Bean_B的一个属性值.这 ...

随机推荐

  1. PHP中类中成员及常量

    类中成员概述 面向对象编程,是需要通过“对象”去做什么事情(以完成某种任务): 而: 对象总是来源于类: 所以: 面向对象的编程,一切都是从定义类开始: 类中成员分为3大类: 属性: 方法: 常量: ...

  2. Java进行Base64的编码(Encode)与解码(Decode)

    关于base64编码Encode和Decode编码的几种方式 Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便 ...

  3. MacOS & 如何在当前文件下打开 terminal

    MacOS & 如何在当前文件下打开 terminal macbook 如何在文件夹中 打开 terminal https://www.cnblogs.com/yjmyzz/p/3662507 ...

  4. LoadRunner脚本参数化常见错误

    错误代码:Error:missing newline in d:\loadrunner\username.dat 错误原因:场景设置不合理,参数数量不够,或者参数化文件有问题. 1)如果参数化文件反复 ...

  5. python while 学习

    while True: reply = input('please input:') if reply == 'stop': break else: print (reply.upper())

  6. 第93天:CSS3 中边框详解

    CSS3 边框详解 其中边框圆角.边框阴影属性,应用十分广泛,兼容性也相对较好,具有符合渐进增强原则的特征,我们需要重点掌握. 一.边框圆角  border-radius    每个角可以设置两个值 ...

  7. bzoj1318[spoj 744] Longest Permutation

    题意 给出一个长度为n的,所有元素大小在[1,n]的整数数列,要求选出一个尽量长的区间使得区间内所有元素组成一个1到区间长度k的排列,输出k的最大值 n<=1e5 分析 不会做,好菜啊.jpg ...

  8. atcoder 2017Code festival C ——D题 Yet Another Palindrome Partitioning(思维+dp)

    题目大意: 把一个字符串s分割成m个串,这m个串满足至多有一种字符出现次数为奇数次,其他均为偶数次,问m的最小值 题解: 首先我们想一下纯暴力怎么做 显然是可以n^2暴力的,然后dp[i]表示分割到i ...

  9. NLP度量指标BELU真的完美么?

    摘要: NLP重要评价准则之一——BLEU,真的完美无缺么? 刚接触自然语言处理的朋友通常会问我:当系统的输出是文本,而非对输入文本进行某种分类,如何对该系统进行评估.当模型的输入是文本信息,输出也是 ...

  10. [CodeVs1050]棋盘染色2(状态压缩DP)

    题目大意:有一个5*N(≤100)的棋盘,棋盘中的一些格子已经被染成了黑色,求最少对多少格子染色,所有的黑色能连成一块. 这题卡了我1h,写了2.6k的代码,清明作业一坨还没做啊...之前一直以为这题 ...