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. Delphi定位TDataSet数据集最后一条记录

    dst_temp.last ;//最后一条dst_temp.first ;//第一条dst_temp.next ;//下一条dst_temp.prior;//上一条

  2. Solr实现SQL的查询与统计--转载

    原文地址:http://shiyanjun.cn/archives/78.html Cloudera公司已经推出了基于Hadoop平台的查询统计分析工具Impala,只要熟悉SQL,就可以熟练地使用I ...

  3. 【bzoj4428】[Nwerc2015]Debugging调试 数论+记忆化搜索

    题目描述 一个 $n$ 行的代码出了bug,每行都可能会产生这个bug.你要通过输出调试,在其中加入printf来判断bug出现的位置.运行一次程序的时间为 $r$ ,加入一条printf的时间为 $ ...

  4. Django 2.0 学习(17):Django 用户认证(auth模块)

    Django 用户认证(auth模块) 一.认证登陆 在进行用户登陆验证的时候,如果是自己写代码,就必须要先查询数据库,看用户输入的用户名是否存在于数据库中:如果用户存在于数据库中,然后再验证用户输入 ...

  5. Shell脚本修改Nginx upstream配置文件

    #!/bin/bash ##################################################### # Name: change_nginx_upstream_conf ...

  6. windows7下的64位redis安装简介

    在网上找了好多,指向的都是同一个地址,可惜打不开.https://github.com/MSOpenTech/redis/releases.网址被禁掉了.终于找到一篇有用的帖子,安装成功.感谢仁兄ko ...

  7. 【刷题】HDU 6184 Counting Stars

    Problem Description Little A is an astronomy lover, and he has found that the sky was so beautiful! ...

  8. 数百种编程语言,而我为什么要学 Python?

    是应用率最高.长期霸占排行榜的常青藤 Java?是易于上手,难以精通的 C?还是在游戏和工具领域仍占主流地位的 C++?亦或是占据 Windows 桌面应用程序半壁江山的 C#?…… 我想,每个人可能 ...

  9. 【BZOJ2437】【NOI2011】兔兔与蛋蛋(博弈论,二分图匹配)

    [BZOJ2437][NOI2011]兔兔与蛋蛋(博弈论,二分图匹配) 题面 BZOJ 题解 考虑一下暴力吧. 对于每个状态,无非就是要考虑它是否是必胜状态 这个直接用\(dfs\)爆搜即可. 这样子 ...

  10. #pragma data_seg

    原文链接地址:http://www.cnblogs.com/CBDoctor/archive/2013/01/26/2878201.html 1)#pragma data_seg()一般用于DLL中. ...