`

Spring+CXF+IBatis详细介绍及下载

 
阅读更多
今天开始使用JAVA WEB工程集成Spring+IBatis+CXF(restful web service),我尽量把一些细节讲清楚,让自己和你们一起成长~

1.首先准备一个动态WEB工程,我把他取名为tnserver,我准备首先完成Spring与IBatis的集成,最后集成CXF,并完成一个资源的CURD操作。

2.准备Spring所需要的jar包,jar为:
  • org.springframework.aop-3.1.2.RELEASE.jar
  • org.springframework.asm-3.1.2.RELEASE.jar
  • org.springframework.aspects-3.1.2.RELEASE.jar
  • org.springframework.beans-3.1.2.RELEASE.jar
  • org.springframework.context-3.1.2.RELEASE.jar
  • org.springframework.context.support-3.1.2.RELEASE.jar
  • org.springframework.core-3.1.2.RELEASE.jar
  • org.springframework.expression-3.1.2.RELEASE.jar
  • org.springframework.instrument-3.1.2.RELEASE.jar
  • org.springframework.instrument.tomcat-3.1.2.RELEASE.jar
  • org.springframework.jdbc-3.1.2.RELEASE.jar
  • org.springframework.orm-3.1.2.RELEASE.jar
  • org.springframework.test-3.1.2.RELEASE.jar
  • org.springframework.transaction-3.1.2.RELEASE.jar
  • org.springframework.web-3.1.2.RELEASE.jar


3.准备CXF RS所需要的jar包,jar为:
  • cxf-2.6.13.jar
  • jettison-1.3.3.jar
  • jsr311-api-1.1.2.r612.jar
  • neethi-3.0.3.jar
  • wsdl4j-1.6.3.jar
  • xmlschema-core-2.0.3.jar
  • ezmorph-1.0.4.jar
  • slf4j-log4j12-1.7.6.jar
  • slf4j-api-1.7.6.jar


4.准备Ibatis所需要的jar包,jar为:
  • ibatis-2.3.0.677.jar


5.其它jar:
  • antlr-2.7.7.jar
  • aopalliance-1.0.jar
  • asm-3.3.jar
  • mysql-connector-java-5.1.7-bin.jar mysql数据库驱动jar
  • c3p0-0.9.1.2.jar 数据库数据源
  • commons-beanutils-1.8.0.jar apache公用jar
  • commons-codec-1.4.jar apache公用jar
  • commons-collections-3.2.jar apache公用jar
  • commons-io-2.0.1.jar apache公用jar
  • commons-lang-2.4.jar apache公用jar
  • commons-lang3-3.1.jar apache公用jar
  • commons-logging-1.1.1.jar apache公用jar


6.完成上述jar包的收集一般会占用大量时间,我希望以后资源都能共享,而且是方便免费的,如果这样相信中国软件行业发展会更好(好的分享往往会让我们成长),附件中我会提供除Spring之外的jar下载。如果你需要spring的jar,可以去spring官网。

7.首先配置web.xml,其中CXFServlet为CXF初始化配置(这里我将所有的请求都交给CXF处理“/*”):
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">
	<display-name>tnserver</display-name>

	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext*.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<servlet>
		<servlet-name>CXFServlet</servlet-name>
		<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>CXFServlet</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>


8.接下来创建spring的配置文件,这里我把spring的配置文件分成了两份,前缀都一样(为web.xml中applicationContext*.xml),分别是applicationContext-core.xml(存放数据源、注解及扫描、Ibatis配置、BaseDao配置)、applicationContext-server.xml用来发布restful服务的。

9.applicationContext-core.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
	http://www.springframework.org/schema/context 
	http://www.springframework.org/schema/context/spring-context-3.1.xsd
	http://www.springframework.org/schema/tx
         http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
         http://www.springframework.org/schema/aop 
         http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
	
	<!-- 开启注解处理器 -->
	<context:annotation-config/>
	
	<!-- 数据源配置 -->
	<context:property-placeholder location="classpath:conf/jdbc.properties" />
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="${jdbc.driverName}" />
		<property name="jdbcUrl" value="${jdbc.url}" />
		<property name="user" value="${jdbc.userName}" />
		<property name="password" value="${jdbc.password}" />
		<property name="autoCommitOnClose" value="${c3p0.autoCommitOnClose}" />
		<property name="checkoutTimeout" value="${jdbc.checkoutTimeout}" />
		<property name="initialPoolSize" value="${jdbc.initialPoolSize}" />
		<property name="minPoolSize" value="${jdbc.minPoolSize}" />
		<property name="maxPoolSize" value="${jdbc.maxPoolSize}" />
		<property name="testConnectionOnCheckin" value="${c3p0.testConnectionOnCheckin}" />
		<property name="testConnectionOnCheckout" value="${c3p0.testConnectionOnCheckout}" />
		<property name="idleConnectionTestPeriod" value="${c3p0.idleConnectionTestPeriod}" />
		<property name="automaticTestTable" value="${c3p0.automaticTestTable}" />
	</bean>

	<!-- ibatis2.x 配置 SqlMapClient-->
	<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
		<property name="dataSource" ref="dataSource"/>  
	    <property name="configLocation" value="classpath:SqlMapConfig.xml"/> 
	</bean> 
	
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>
	
	<!-- 使用annotation定义事务 -->
	<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
	
	<bean id="defaultBaseDao" class="cn.thinknet.database.ibatis.DefaultBaseDaoImpl">
		<property name="sqlMapClient" ref="sqlMapClient" />
	</bean>
	
	<!-- 扫描并自动装配 -->
	<context:component-scan base-package="cn.thinknet.common.service" />
	<tx:annotation-driven/>
</beans>


10.applicationContext-server.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:cxf="http://cxf.apache.org/core"
	xmlns:jaxrs="http://cxf.apache.org/jaxrs"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
	http://www.springframework.org/schema/context 
	http://www.springframework.org/schema/context/spring-context-3.1.xsd
	http://www.springframework.org/schema/tx
         http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
         http://www.springframework.org/schema/aop 
         http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
         http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd">

	<import resource="classpath:META-INF/cxf/cxf.xml" />
	<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
	<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

	<jaxrs:server id="healthRestful" address="/health">
		<jaxrs:serviceBeans>
			<ref bean="healthRestfulBean" />
		</jaxrs:serviceBeans>
	</jaxrs:server>
         <bean id="healthRestfulBean" class="cn.tn.restful.third.health.HealthRestful"></bean>


11.spring配置到此为止,后续我都是采用的注解进行注入的,现在来弄Ibatis的配置SqlMapConfig.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
	<!-- <settings cacheModelsEnabled="true" enhancementEnabled="true"
		lazyLoadingEnabled="true" maxRequests="32" maxSessions="10"
		maxTransactions="5" useStatementNamespaces="false" /> -->

	<!-- this put xxxx_sqlMap.xml files -->
	sqlMap resource="conf/mappings/health_sqlMap.xml" />
	
</sqlMapConfig>


12.如果你感兴趣,可以继续配置log4j的配置文件log4j.properties:
#--------------------------------  
#log4j.rootLogger=DEBUG, stdout, fileout
log4j.rootLogger=INFO, stdout, fileout 
#log4j.logger.test=info 
#log4j.logger.org.apache.jasper = DEBUG 
#log4j.logger.org.apache.catalina.startup.TldConfig = DEBUG 
#log4j.logger.org.apache.catalina.session.ManagerBase = DEBUG 
 
log4j.logger.com.fiscal = INFO
log4j.logger.com.system = INFO
 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
 
log4j.appender.fileout=org.apache.log4j.RollingFileAppender
log4j.appender.fileout.File=${catalina.home}/logs/tnserver.log
log4j.appender.fileout.MaxFileSize=10000KB
 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss} \:%m%n  
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout  
log4j.appender.fileout.layout.ConversionPattern=[%-5p]_%d{yyyy-MM-dd HH\:mm\:ss} \:%m%n


13.以上基本就已经完成一个spring+ibatis+CXF RS集成,下面我开始输出一个实例。

14.创建一个java类:HealthRestful.java:
package cn.tn.restful.third.health;

import java.util.Map;

import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.QueryParam;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.beans.factory.annotation.Autowired;

import cn.thinknet.common.service.common.CommonService;
import cn.thinknet.common.service.third.health.HealthService;
import cn.thinknet.utils.exception.AKBaseException;
import cn.thinknet.utils.others.AKJsonValues;

/**
 * 第三方健康接口 ,用于存储数据和提取数据
 * @author ***
 * @date 2014/05/21
 */
public class HealthRestful
{
    @Autowired
    private HealthService healthService;

    @Autowired
    private CommonService commonService;

    /**
     * 保存健康记录
     * @param data 第三方数据
     * @return String
     */
    @POST
    public String saveHealthData(String data)
    {
        boolean flag = true;

        try
        {
            JSONObject jo = JSONObject.fromObject(data);
            String deviceId = jo.get("deviceId").toString();
            // 校验设备ID是否正确
            flag = commonService.validateDeviceId(deviceId);
            if (flag)
            {
                Object obj = jo.get("data");
                Map<String,String> map = commonService.getUserAndCardRelation();
                // 保存数据
                healthService.addHealth(deviceId, obj,map);
            }
        }
        catch (AKBaseException akbe)
        {
            akbe.writeToLogger();
            flag = false;
        }
        if (flag)
        {
            // 返回成功
            return AKJsonValues.getStatusSuccess().toString();
        }
        else
        {
            return AKJsonValues.getStatusFailed().toString();
        }
    }

    /**
     * 查询门禁信息
     * @param userName 用户名
     * @param examProject 体检项目
     * @param page 当前页码
     * @return 门禁信息 json数组
     */
    @GET
    public String queryDoor(@QueryParam("userName")
    String userName, @QueryParam("examProject")
    String examProject, @QueryParam("page")
    String page)
    {
        Boolean flag = true;
        JSONArray ja = new JSONArray();
        JSONObject jo = new JSONObject();
        try
        {
            int pageIndex = NumberUtils.toInt(page);
            
            // 执行方法
            ja = healthService.queryHealth(userName, examProject, pageIndex);
        }
        catch (AKBaseException akbe)
        {
            akbe.writeToLogger();
            flag = false;
        }
        if (flag)
        {
            // 成功
            jo.put(AKJsonValues.STATUS_KEY, AKJsonValues.STATUS_SUCCESS);
            jo.put("list", ja);
        }
        else
        {
            // 失败
            jo.put(AKJsonValues.STATUS_KEY, AKJsonValues.STATUS_FAILED);
            jo.put("list", "");
        }
        return jo.toString();
    }
}


15.service层代码HealthService.java:
package cn.thinknet.common.service.third.health;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import cn.thinknet.database.ibatis.BatisBaseDao;
import cn.thinknet.utils.date.AKDateUtil;
import cn.thinknet.utils.exception.AKBaseException;
import cn.thinknet.utils.others.AKPagination;
import cn.thinknet.utils.vo.third.health.HealthVo;

/**
 * 健康业务类
 * 
 * @date 2014/05/21
 * 
 * @author ****
 */
@Service("healthService")
public class HealthService
{
    @Autowired
    private BatisBaseDao baseDao;

    /**
     * 保存第三方健康数据
     * 
     * @param deviceId 设备号
     * @param data 第三方数据
     * @throws AKBaseException
     */
    public void addHealth(String deviceId, Object data, Map<String, String> map)
            throws AKBaseException
    {
        if (MapUtils.isNotEmpty(map))
        {
            return;
        }
        try
        {
            // 将第三方数据转换成Json数组
            JSONArray ja = JSONArray.fromObject(data);
            JSONObject jo = null;
            HealthVo hv = null;
            for (Object obj : ja)
            {
                // 获得JSON对象
                jo = JSONObject.fromObject(obj);
                hv = new HealthVo();
                hv.setCardNo(jo.getString("cardNo"));
                // 根据卡号找到用户名
                hv.setUserName(map.get(jo.getString("cardNo")));
                hv.setDeviceId(deviceId);
                hv.setExamProject(jo.getString("examProject"));
                hv.setExamValue(jo.getString("examValue"));
                hv.setExamUnit(jo.getString("examUnit"));
                hv.setExamStatus(jo.getInt("examStatus"));
                hv.setExamTime(AKDateUtil.stringConvertDate(
                        jo.getString("examTime"), AKDateUtil.DATEFORMAT002));

                // 存储到数据库中
                baseDao.add("third_health_insert", hv);
            }

        }
        catch (AKBaseException ake)
        {
            throw new AKBaseException(ake);
        }

    }

    /**
     * 查询第三方健康信息
     * 
     * @param userName 用户名
     * @param examProject 体检项目
     * @param 页码
     * @return JSONArray
     * @throws AKBaseException
     */
    @SuppressWarnings("unchecked")
    public JSONArray queryHealth(String userName, String examProject,
            int pageIndex) throws AKBaseException
    {
        List<HealthVo> hList = null;
        JSONObject jo = null;
        JSONArray ja = new JSONArray();

        try
        {
            Map<String, Object> params = new HashMap<String, Object>();

            pageIndex = pageIndex == 0 ? 1 : pageIndex;

            params.put(AKPagination.MYSQL_PAGE_ROW_NUMBER_KEY, (pageIndex - 1)
                    * AKPagination.MYSQL_PAGE_SIZE_KEY);
            params.put(AKPagination.MYSQL_PAGE_ROW_SIZE_KEY,
                    AKPagination.MYSQL_PAGE_SIZE_KEY);
            params.put("userName", userName);
            params.put("examProject", examProject);

            hList = (List<HealthVo>) baseDao.queryPagination(
                    "third_health_select", params);

            // 将查询出来的数据转换成JSON数组
            if (CollectionUtils.isNotEmpty(hList))
            {
                for (HealthVo hv : hList)
                {
                    jo = new JSONObject();
                    jo.put("cardNo", hv.getCardNo());
                    jo.put("examProject", hv.getExamProject());
                    jo.put("examValue", hv.getExamValue());
                    jo.put("examUnit", hv.getExamUnit());
                    jo.put("examStatus", hv.getExamStatus());
                    jo.put("examTime",
                            AKDateUtil.dateConvetStringByFormat(
                                    hv.getExamTime(), AKDateUtil.DATEFORMAT002));

                    ja.add(jo);
                }
            }
        }
        catch (AKBaseException ake)
        {
            throw new AKBaseException(ake);
        }
        return ja;
    }
}



16.这里列出我一直用来访问数据的接口与默认实现类,接口类BatisBaseDao.java:
package cn.thinknet.database.ibatis;

import java.io.Serializable;
import java.util.List;

import cn.thinknet.utils.exception.AKSQLException;

/**
 * 数据库操作父接口
 * 
 * @author 李时增
 * 
 *         CreateTime 2013-03-10
 */
public interface BatisBaseDao extends Serializable
{
    /**
     * 添加对象
     * 
     * @param sqlId IBatis SQL Id
     * @param obj 需要添加的对象
     * 
     * @throws AKSQLException SQL异常
     */
    void add(String sqlId, Object obj) throws AKSQLException;

    /**
     * 删除对象
     * 
     * @param sqlId IBatis SQL Id
     * @param params 删除参数
     * 
     * @throws AKSQLException SQL异常
     */
    void delete(String sqlId, Object params) throws AKSQLException;

    /**
     * 根据条件查询数据,此方法不分页
     * 
     * @param sqlId IBatis SQL Id
     * @param params 查询参数
     * 
     * @throws AKSQLException SQL异常
     * 
     * @return List<Object> 查询结果集合
     */
    List<?> query(String sqlId, Object params) throws AKSQLException;

    /**
     * 根据条件查询数据,用于分页
     * 
     * @param sqlId IBatis SQL Id
     * @param params 查询参数
     * 
     * @throws AKSQLException SQL异常
     * 
     * @return List<Object> 查询结果集合
     */
    List<?> queryPagination(String sqlId, Object params)
            throws AKSQLException;

    /**
     * 根据条件查询数据记录数,用于分页
     * 
     * @param sqlId IBatis SQL Id
     * @param params 查询参数
     * 
     * @throws AKSQLException SQL异常
     * 
     * @return List<Object> 查询结果集合
     */
    int queryCount(String sqlId, Object params) throws AKSQLException;

    /**
     * 查询一条记录
     * 
     * @param sqlId IBatis SQL Id
     * @param params 查询参数
     * 
     * @throws AKSQLException SQL异常
     * 
     * @return List<Object> 查询结果集合
     */
    Object queryOneModel(String sqlId, Object params) throws AKSQLException;

    /**
     * 查询所有数据
     * 
     * @param sqlId IBatis SQL Id
     * @param params 查询参数
     * 
     * @throws AKSQLException SQL异常
     * 
     * @return List<Object> 查询结果集合
     */
    List<?> queryAll(String sqlId) throws AKSQLException;

    /**
     * 更新对象
     * 
     * @param sqlId IBatis SQL Id
     * @param updateObj 需要更新的对象
     * 
     * @throws AKSQLException SQL异常
     */
    void update(String sqlId, Object updateObj) throws AKSQLException;
}


实现类DefaultBaseDaoImpl.java:
package cn.thinknet.database.ibatis;

import java.util.List;

import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

import cn.thinknet.utils.exception.AKSQLException;

/**
 * 数据库操作父类
 * 
 * @author lishizeng
 * 
 * CreateTime 2013-03-10
 */
public class DefaultBaseDaoImpl extends SqlMapClientDaoSupport implements BatisBaseDao
{
    
    private static final long serialVersionUID = -2493529163246756507L;

    /**
     * 添加对象
     * 
     * @param sqlId IBatis SQL Id
     * @param obj 需要添加的对象
     * 
     * @throws AKSQLException SQL异常
     */
    @Override
    public void add(String sqlId, Object obj) throws AKSQLException
    {
        try
        {
            this.getSqlMapClientTemplate().insert(sqlId, obj);
        }
        catch (Exception sqle)
        {
            throw new AKSQLException(sqle.getMessage(), sqle.getCause());
        }
    }

    /**
     * 删除对象
     * 
     * @param sqlId IBatis SQL Id
     * @param params 删除参数
     * 
     * @throws AKSQLException SQL异常
     */
    @Override
    public void delete(String sqlId, Object params) throws AKSQLException
    {
        try
        {
            this.getSqlMapClientTemplate().delete(sqlId, params);
        }
        catch (Exception sqle)
        {
            throw new AKSQLException(sqle.getMessage(), sqle.getCause());
        }
    }

    /**
     * 根据条件查询数据,此方法不分页
     * 
     * @param sqlId IBatis SQL Id
     * @param params 查询参数
     * 
     * @throws AKSQLException SQL异常
     * 
     * @return List<Object> 查询结果集合
     */
    @Override
    public List<?> query(String sqlId, Object params) throws AKSQLException
    {
        List<?> list = null;

        try
        {
            list = this.getSqlMapClientTemplate().queryForList(sqlId,
                    params);
        }
        catch (Exception sqle)
        {
            throw new AKSQLException(sqle.getMessage(), sqle.getCause());
        }
        return list;
    }

    /**
     * 查询所有数据
     * 
     * @param sqlId IBatis SQL Id
     * @param params 查询参数
     * 
     * @throws AKSQLException SQL异常
     * 
     * @return List<Object> 查询结果集合
     */
    @Override
    public List<?> queryAll(String sqlId) throws AKSQLException
    {
        List<?> list = null;

        try
        {
            list = this.getSqlMapClientTemplate().queryForList(sqlId);
        }
        catch (Exception sqle)
        {
            throw new AKSQLException(sqle.getMessage(), sqle.getCause());
        }
        return list;
    }

    /**
     * 更新对象
     * 
     * @param sqlId IBatis SQL Id
     * @param updateObj 需要更新的对象
     * 
     * @throws AKSQLException SQL异常
     */
    @Override
    public void update(String sqlId, Object updateObj) throws AKSQLException
    {
        try
        {
            this.getSqlMapClientTemplate().update(sqlId, updateObj);
        }
        catch (Exception sqle)
        {
            throw new AKSQLException(sqle.getMessage(), sqle.getCause());
        }
    }

    /**
     * 根据条件查询数据,用于分页
     * 
     * @param sqlId IBatis SQL Id
     * @param params 查询参数
     * 
     * @throws AKSQLException SQL异常
     * 
     * @return List<Object> 查询结果集合
     */
    @Override
    public List<?> queryPagination(String sqlId, Object params)
            throws AKSQLException
    {
        List<?> list = null;

        try
        {
            list = this.getSqlMapClientTemplate().queryForList(sqlId,
                    params);
        }
        catch (Exception sqle)
        {
            throw new AKSQLException(sqle.getMessage(), sqle.getCause());
        }
        return list;
    }

    /**
     * 根据条件查询数据记录数,用于分页
     * 
     * @param sqlId IBatis SQL Id
     * @param params 查询参数
     * 
     * @throws AKSQLException SQL异常
     * 
     * @return List<Object> 查询结果集合
     */
    @Override
    public int queryCount(String sqlId, Object params) throws AKSQLException
    {
        int count = 0;
        try
        {
            count = Integer.valueOf(this.getSqlMapClientTemplate()
                    .queryForObject(sqlId, params).toString());
        }
        catch (NumberFormatException e)
        {
            count = 0;
        }
        catch (Exception e)
        {
            throw new AKSQLException(e.getMessage(), e.getCause());
        }
        
        return count;
    }

    /**
     * 查询一条记录
     * 
     * @param sqlId IBatis SQL Id
     * @param params 查询参数
     * 
     * @throws AKSQLException SQL异常
     * 
     * @return List<Object> 查询结果集合
     */
    @Override
    public Object queryOneModel(String sqlId, Object params)
            throws AKSQLException
    {
        try
        {
            return this.getSqlMapClientTemplate().queryForObject(sqlId,
                    params);
        }
        catch (Exception e)
        {
            throw new AKSQLException(e.getMessage(), e.getCause());
        }
    }
}


20.如果你想要什么jar包或是哪里有什么不明白的请发我邮箱lishizenglw@126.com,我尽量帮助你:)
分享到:
评论
1 楼 zhoulvming 2015-05-28  
请问你说的附件呢

相关推荐

    ibatis+spring+cxf+mysql搭建webservice的客户端

    ibatis+spring+cxf+mysql搭建webservice的客户端,文章地址在http://blog.csdn.net/cenyi2013/article/details/17315755. 服务端源码的下载地址在http://download.csdn.net/detail/cenyi2012/6712729

    Spring + Struts2 + Ibatis + cxf 集成

    此项目继承了Spring Struts2 Ibatis CXF,项目里面含有数据执行文件!具体请参见项目的readme.txt文件,里面详细描述需要对应框架支持需要的jar包。请注意,如果选取的版本不一致,所需要的jar可能不一样。

    ibatis+spring+cxf+mysql搭建的myWebservice服务端

    本项目利用ibatis、spring、cxf和mysql这四个关键技术,搭建了一个名为myWebservice的服务端,旨在提供灵活的数据交互和强大的服务功能。以下是对这些技术及其在项目中应用的详细解释: 1. **iBatis**:iBatis是一...

    websevice,spring,cxg,ibatis

    CXF环境配置 - jackymin CXF与Spring的集成 log4j的配置使用 Spring XML配置十二个最佳实践WebService开发实例 (Xfire+Spring+Hibernate)

    spring2.5+ibatis3+web service cxf 例子MyEclipse工程

    标题 "spring2.5+ibatis3+web service cxf 例子MyEclipse工程" 提供了一个关于如何在MyEclipse环境中集成并使用Spring 2.5、iBatis 3和CXF Web服务的实例。这个项目组合是Java企业级开发中常见的技术栈,下面将详细...

    CXF Spring搭建WebServer服务器

    本教程将详细介绍如何使用CXF和Spring框架搭建一个Web服务器,并结合iBatis作为数据库访问层,以及JSON作为后台与前端页面的数据交换格式。 **一、CXF框架** CXF是一个开源的服务框架,它允许开发人员创建和部署...

    cxf,ibatis架包,收集了好久

    【标题】"cxf, ibatis框架集合"指的是在软件开发中常用的两个Java技术框架——CXF和iBATIS的集合。这些框架是开发者必备的工具,能够极大地提高开发效率和代码质量。 CXF(Continuus eXtension for F/OSS)是一个...

    spring.struts,ibatis集成包

    描述中提到的"还有很多常用的包"表明这个集成包不仅仅是Spring、Struts和iBATIS的基础组件,还包含了其他辅助库,如Groovy、CXF、Docx4j、Guava等。这些库在不同的场景下提供额外的功能支持。 1. Groovy-all-2.3.6....

    springMVC_ibatis_redis_cxf_restful框架整合代码实例

    1.简单的ibatis多表级联 2.基于cxf的restful接口开发,包括文件上传(文档,图片等)接口 3.redis缓存服务,通过spring的aop来控制 4.file表太大,我给清空了,测试的是注意报错 5.本人测试通过,有问题可交流

    SpringCxfRestDemo:这将包含使用 Apache CXF 和 Spring 的 Restful 服务的演示项目

    总之,SpringCxfRestDemo 是一个很好的学习资源,可以帮助开发者深入了解如何在 Java 环境中使用 CXF、Spring 和 IBatis 构建 RESTful 服务。通过研究这个项目的源代码,你可以提升你的 Web 服务开发技能,为未来的...

    Java个人简历模板2.doc

    2. **框架技术**:熟悉SSH(Struts2 + Spring + Hibernate)和SSI(Struts2 + Spring + Ibatis)等开源框架,这些框架在企业级Java应用开发中非常常见,用于构建高效、可维护的Web应用程序。 3. **开发工具**:熟练...

    大数据功能模块概要设计.doc

    3.3 **底层开发框架**:Java服务端开发推荐使用struts2 + spring3+ ibatis(mybatis),前台WEB开发框架建议使用JS框架如jQuery,以提高开发效率和兼容性。 综上所述,大数据功能模块概要设计是一个综合性的系统工程...

    Yakoliv Framework:旨在促进基于 Apache CXF 的 java 软件开发-开源

    它利用了 Ibatis 和 Spring 的优势,形成了一个迷你容器,方便了数据库访问。 Yakoliv 框架由通用 DAO 工件和 GUI 程序组成,可帮助开发人员: - 生成数据库模式并启用序列管理 - 从类型化数据生成 java 类 - 使用 ...

    Yakoliv Framework:旨在促进基于Apache CXF的Java软件开发-开源

    它在Ibatis和Spring上发挥了优势,并与之形成了一个微型容器,并简化了数据库访问。 Yakoliv Framework由通用DAO工件和GUI程序组成,可帮助开发人员:-生成数据库模式并启用序列管理-从键入的数据生成Java类-使用...

    jeefuseMDA用户开发手册1

    《jeefuseMDA用户开发手册1》详细阐述了构建高效、可扩展的企业级应用的开发框架和技术选型。在本文中,我们将深入探讨其中的关键技术组件及其在实际开发中的应用。 1. DAO层(Data Access Object): Hibernate3 ...

    基于SSHI架构的开发平台技术方案

    SSHI通常指代Spring、Struts、Hibernate、Ibatis这四大技术栈,它们构成了平台的底层技术框架。本文将深入探讨这一技术方案的关键特点及其应用场景。 #### 技术栈概览 - **J2EE平台**:作为终极解决方案,此平台...

Global site tag (gtag.js) - Google Analytics