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. mysql导出/导入表结构以及表数据

    导出: 命令行下具体用法如下:  mysqldump -u用戶名 -p密码 -d 数据库名 表名 脚本名; 1.导出数据库为dbname的表结构(其中用戶名为root,密码为dbpasswd,生成的脚 ...

  2. 【计算机网络】NAT:网络地址转换

    NAT(Network Address Translation,网络地址转换)是1994年提出的.当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因 ...

  3. BZOJ 1444 有趣的游戏(AC自动机+矩阵快速幂)

    真的是很有趣的游戏... 对每个单词构建好AC自动机后,由于单词都是相同长度的且不同,所以不会出现互相为子串的形式. 那么我们对AC自动机上的节点构建转移矩阵.对于每个单词末尾的节点.该节点的出边仅仅 ...

  4. oracle 如何查看pga

    进去命令行 输入 sqlplus username/password@dbname  回车 进入数据库输入 show parameter pga  回车

  5. 【BZOJ3242】【NOI2013】快餐店(动态规划)

    [BZOJ3242][NOI2013]快餐店(动态规划) 题面 BZOJ 题解 假设我们要做的是一棵树,那么答案显然是树的直径的一半. 证明? 假设树的直径是\(2d\),那么此时最远点的距离是\(d ...

  6. [JSOI2008]Blue Mary的战役地图——全网唯一一篇dp题解

    全网唯一一篇dp题解 网上貌似全部都是哈希+二分(反正我是大概baidu了翻了翻)(还有人暴力AC了的..) 哈希还是相对于dp还是比较麻烦的. 而且正确性还有可能被卡(当然这个题不会) 而且还容易写 ...

  7. pxp

    Time Limit: 2000 ms Memory Limit: 512 MB Description 给定 \(n\), 求\(\sum\limits_{p,q∈primes}[pq≤n]\) ( ...

  8. SVN Server 500 NotLicensed 错误的解决方法

    SVN Server 500 NotLicensed 错误的HTML页面显示 Not licensed The server encountered an internal error or misc ...

  9. UESTC--1300

    原题链接:http://acm.uestc.edu.cn/problem.php?pid=1300 分析:dp,最长公共上升子列.对于两个序列num1[maxn],num2[maxn]: 如果num1 ...

  10. 由保存当前用户引发的springboot的测试方式postman/restlet还是swagger2

    今天在测试接口的到时候发现用springboot集成swagger2集成的项目,在测试session保存的当前用户的时候,发现执行不了,没有像postman或者restlet一样,保存这个接口的url ...