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. node web 应用热更新

    在每次更改完 node.js 项目后,我们都需要先将 node.js停止(快捷键: Ctrl+C),然后再通过命令再次运行,这样特别麻烦.这里我推荐使用 supervisor工具, npm 安装命令为 ...

  2. 第76天:jQuery中的宽高

    Window对象和document对象的区别 1.window对象表示浏览器中打开的窗口 2.window对象可以省略,比如alert()也可以写成window.alert() Document对象是 ...

  3. EL语法 ${person.id} 这里面的id指的是实例对象的成员变量

    EL语法 ${person.id} 这里面的id指的是实例对象的成员变量

  4. redis2.4.conf配置文件中文释意

    # Redis示例配置文件 # 注意单位问题:当需要设置内存大小的时候,可以使用类似1k.5GB.4M这样的常见格式: # # 1k => 1000 bytes # 1kb => 1024 ...

  5. Linux 查询命令

    which       查看可执行文件的位置 whereis    查看文件的位置 locate       配合数据库查看文件位置 find          实际搜寻硬盘查询文件名称 (find也 ...

  6. 一个优质的Vue组件库应该遵循什么样的设计原则

    一.组件库的价值 就个人而言,拥有一套自己的组件库,可以让你的开发变得更高效,让你在行业里更有价值. 就团队而言,拥有一套团队的组件库,可以让协同开发变得更高效规范,让你的团队在公司更具有影响力. 就 ...

  7. Linux下安装python-2.7 先zlib

    2018-04-25 发布 Linux下安装python-2.7  python 1.1k 次阅读  ·  读完需要 25 分钟 1 安装依赖的库 yum -y install python-deve ...

  8. 【题解】期末考试 六省联考 2017 洛谷 P3745 BZOJ 4868 贪心 三分

    题目传送门:这里是萌萌哒传送门(>,<) 啊♀,据说这题有个完全贪心的做法,但是要维护太多东西好麻烦的(>,<),于是就来口胡一发三分的做法. 思路很简单,假设我指定了一个x, ...

  9. Mac下安装SVN插件javaHL not available的解决方法

    在Mac下安装Eclipse插件svnEclipse插件后,每次打开Eclipse都会弹出如下弹出框: 提示你本机缺少JavaHL Library. 选择Eclipse→偏好设置(preference ...

  10. HDU6128 二次剩余/二次域求二次剩余解/LL快速乘法取模

    LINK 题意:求满足模p下$\frac{1}{a_i+a_j}\equiv\frac{1}{a_i}+\frac{1}{a_j}$的对数,其中$n,p(1\leq n\leq10^5,2\leq p ...