1. 程式人生 > >在spring中使用SqlMapClientTemplate操作資料庫

在spring中使用SqlMapClientTemplate操作資料庫

SqlMapClientTemplate是SqlMapClient的封裝類。

SqlMapClient是ibatis的。但SpringFramework,也很好的將其進行了整合,我們要做的就是繼承SpringFramework中提供的SqlMapClientDaoSupport類即可。 在springFramework的org.springframework.orm.ibatis元件中。 SqlMapClient中包含著session的管理.  SqlMapClientTemplate用於session的封裝,以及異常的捕捉.  所以按照以上的推斷來說.應該儘量使用SqlMapClientTemplate.  保證session以及Exception的正常以及統一.(以上不懂,看下面才是正解)

1.使用SqlMapClientTemplate時除了基本的spring和springmvc包以外另外還得加兩個包(maven新增) pom.xml:

<dependency>     <groupId>org.springframework</groupId>     <artifactId>spring-orm</artifactId>     <version>3.1.0.RELEASE</version> </dependency> <dependency>     <groupId>org.apache.ibatis</groupId>     <artifactId>ibatis</artifactId>     <version>2.3.2.715</version> </dependency> 2.SqlMapClientFactoryBean 的裝配 applicationContext.xml: SqlMapClientFactoryBean是SqlMapClientTemplate使用的基礎,如果在SpringFramework應用中沒有裝配SqlMapClientFactoryBean,那麼SqlMapClientTemplate將不可用,報空指標錯誤。

<!-- Spring iBatis SqlMapClient 需要spring-orm元件 --> <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">     <property name="dataSource" ref="dataSource" />     <property name="configLocations">         <list merge="true">             <value>classpath:SqlMapConfig.xml</value>         </list>     </property> </bean> 3.繼承使用SqlMapClientDaoSupport類(有多種方法,只用其一) java類: 第一步:做一個基礎類

package org.demo.dao; import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport; public class BaseDAO extends SqlMapClientDaoSupport{ } 第二步:DAO介面 package org.demo.dao;   import org.demo.model.EmpModel;   /**  * <一句話功能簡述><p>  * <類功能詳細描述>  * @see  [相關類/方法]  * @since  [產品/模組版本]  */ public interface EmpDAO {     /**      * 根據id查詢員工<p>      * <方法功能詳細描述>      * @param id      * @return      */     EmpModel findById(int id); } 第三步:DAO的實現,使用SqlMapClientTemplate查詢 package org.demo.dao.impl;   import org.demo.dao.BaseDAO; import org.demo.dao.EmpDAO; import org.demo.model.EmpModel;   public class EmpDAOImpl extends BaseDAO implements EmpDAO{       /**      * @see org.demo.dao.EmpDAO#findById(int)      */     @Override     public EmpModel findById(int id) { <span style="white-space:pre">        </span>//"EMP"為iBatis SqlMap檔案的名稱空間; <span style="white-space:pre">        </span>//"findById"為iBatis SqlMap的查詢方法; <span style="white-space:pre">        </span>//"id"為查詢條件         return (EmpModel) getSqlMapClientTemplate().queryForObject("EMP.findById",id);     } } 4.對映檔案 EMP.xml:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"   "http://ibatis.apache.org/dtd/sql-map-2.dtd" > <sqlMap namespace="EMP">    <typeAlias alias="empModel" type="org.demo.model.EmpModel" />       <resultMap class="empModel" id="empResultMap">         <result property="name" column="NAME"/>         <result property="age" column="AGE"/>         <result property="gender" column="GENDER"/>         <result property="password" column="PASSWORD"/>     </resultMap>          <select id="findById" parameterClass="int" resultMap="empResultMap">         select * from emp;     </select>   </sqlMap> 5.配置SqlMapConfig.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"     "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">   <sqlMapConfig>     <settings cacheModelsEnabled="true" enhancementEnabled="true"         lazyLoadingEnabled="true" useStatementNamespaces="true" />              <sqlMap resource="org/demo/mapper/EMP.xml" />     <!-- <sqlMap resource="org/demo/mapper/其它.xml" /> --> </sqlMapConfig>  6.指定介面 Spring-beans.xml (也可直接將bean放入applicationContext.xml中) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans>     <bean id="baseDAO" class="org.demo.dao.BaseDAO">         <property name="sqlMapClient" ref="sqlMapClient" />     </bean>          <bean id="empDAO" class="org.demo.dao.impl.EmpDAOImpl" parent="baseDAO">     </bean> </beans> 7.javaBean: package org.demo.model;   public class EmpModel {     private String name;     private int age;     private String gender;     private String password;          //get\set\toString...      } 8.mysql.sql DROP TABLE IF EXISTS EMP; CREATE TABLE EMP (     ID int(16) NOT NULL AUTO_INCREMENT ,     NAME varchar(30) NULL ,     AGE int(4) NULL ,     GENDER varchar(4) NULL DEFAULT 'F' ,     PASSWORD varchar(30) NULL ,     PRIMARY KEY (ID) ); 9.測試: import org.apache.log4j.Logger; import org.demo.dao.EmpDAO; import org.demo.model.EmpModel; import org.junit.Before; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;   import com.mchange.v2.c3p0.ComboPooledDataSource;   public class TestA {     private static final Logger logger = Logger.getLogger(TestA.class);     ApplicationContext ac;            @Before     public void init() {         ac = new ClassPathXmlApplicationContext("applicationContext.xml");     }          @Test     public void testEmpDAO(){         EmpDAO empDAO = ac.getBean("empDAO",EmpDAO.class);         EmpModel emp = empDAO.findById(1);         logger.info("emp:"+emp);         } }

** 成功!

檔案結構:

其它操作:

//查詢 返回一個物件 Object resultObj = getSqlMapClientTemplate().queryForObject("名稱空間.方法名", 引數...);   //查詢 返回List集合 List result = getSqlMapClientTemplate().queryForList("名稱空間.方法名", 引數...);   //查詢 返回Map集合 Map result = getSqlMapClientTemplate().queryForMap("名稱空間.方法名", 引數...);   //插入  getSqlMapClientTemplate().insert("名稱空間.方法名", 引數...);   //更新 getSqlMapClientTemplate().update("名稱空間.方法名", 引數...);   //刪除 getSqlMapClientTemplate().delete("名稱空間.方法名", 引數...);

---------------------  作者:wangxy799  來源:CSDN  原文:https://blog.csdn.net/wangxy799/article/details/50553274  版權宣告:本文為博主原創文章,轉載請附上博文連結!