在spring中使用SqlMapClientTemplate操作数据库

https://blog.csdn.net/wangxy799/article/details/50553274

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 
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值