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. asp.net下使用Cookie保存登录信息

    在网页中登录窗口是最常见的,如果把登录信息存在客户机Cookie中,下次用户登录时,网页先在客户机上查找登录信息,如果成功即可跳过登录步骤直接到主窗口,如登录界面如下:

  2. luogu 1344 追查坏牛奶(最小割)

    第一问求最小割. 第二问求割边最小的最小割. 我们直接求出第二问就可以求出第一问了. 对于求割边最小,如果我们可以把每条边都附加一个1的权值,那么求最小割是不是会优先选择1最少的边呢. 但是如果直接把 ...

  3. BZOJ4915 简单的数字题

    不妨设a1<a2<a3<a4.显然第一问的答案是4,满足a1+a4=a2+a3,a1+a2|a3+a4,a1+a3|a2+a4.容易发现将其同时扩大k倍是仍然满足条件的,于是考虑gc ...

  4. C++解析-外传篇(3):动态内存申请的结果

    0.目录 1.动态内存申请一定成功吗? 2.new_handler() 函数 3.小结 1.动态内存申请一定成功吗? 问题: 动态内存申请一定成功吗? 常见的动态内存分配代码: C代码: C++代码: ...

  5. 深入理解JVM一性能监控工具

    一.前言 工欲善其事必先利其器,性能优化和故障排查在我们大都数人眼里是件比较棘手的事情,一是需要具备一定的原理知识作为基础,二是需要掌握排查问题和解决问题的流程.方法.本文就将介绍利用性能监控工具,帮 ...

  6. Debugging QML Applications

    Debugging QML Applications Console API Log console.log, console.debug, console.info, console.warn an ...

  7. 代码收藏系列--jquery--筛选器、事件绑定技巧

    Jquery筛选器的一些常用技巧,比如过滤属性等 /* 过滤获取没有含data-xsui-grid-colspan的节点 */$(this).find('.xsui-grid-cell:not([da ...

  8. bzoj2621: [Usaco2012 Mar]Cows in a Skyscraper(状压DP)

    第一眼是3^n*n的做法...然而并不可行T T 后来发现对于奶牛的一个状态i,最优情况下剩下那个可以装奶牛的电梯剩下的可用重量是一定的,于是我们设f[i]表示奶牛状态为i的最小电梯数,g[i]为奶牛 ...

  9. Java之面向对象编程20170619

    /*************************************************************************************************** ...

  10. Codeforces Round #298 (Div. 2)A B C D

    A. Exam time limit per test 1 second memory limit per test 256 megabytes input standard input output ...