Spring+CXF+IBatis详细介绍及下载
发布日期:2022-02-09 20:39:03 浏览次数:6 分类:技术文章

本文共 18422 字,大约阅读时间需要 61 分钟。

今天开始使用JAVA WEB工程集成Spring+IBatis+CXF(restful web service),我尽量把一些细节讲清楚,让自己和你们一起成长~
1.首先准备一个动态WEB工程,我把他取名为tnserver,我准备首先完成Spring与IBatis的集成,最后集成CXF,并完成一个资源的CURD操作。
2.准备Spring所需要的jar包,jar为:
[list]
[*]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
[/list]
3.准备CXF RS所需要的jar包,jar为:
[list]
[*]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
[/list]
4.准备Ibatis所需要的jar包,jar为:
[list]
[*]ibatis-2.3.0.677.jar
[/list]
5.其它jar:
[list]
[*]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
[/list]
6.完成上述jar包的收集一般会占用大量时间,我希望以后资源都能共享,而且是方便免费的,如果这样相信中国软件行业发展会更好(好的分享往往会让我们成长),附件中我会提供除Spring之外的jar下载。如果你需要spring的jar,可以去spring官网。
7.首先配置[color=red]web.xml[/color],其中CXFServlet为CXF初始化配置(这里我将所有的请求都交给CXF处理“/*”):
tnserver
contextConfigLocation
classpath:applicationContext*.xml
org.springframework.web.context.ContextLoaderListener
CXFServlet
org.apache.cxf.transport.servlet.CXFServlet
1
CXFServlet
/*
index.jsp
8.接下来创建spring的配置文件,这里我把spring的配置文件分成了两份,前缀都一样(为web.xml中applicationContext*.xml),分别是applicationContext-core.xml(存放数据源、注解及扫描、Ibatis配置、BaseDao配置)、applicationContext-server.xml用来发布restful服务的。
9.applicationContext-core.xml配置如下:
10.applicationContext-server.xml配置如下:
11.spring配置到此为止,后续我都是采用的注解进行注入的,现在来弄Ibatis的配置SqlMapConfig.xml:
sqlMap resource="conf/mappings/health_sqlMap.xml" />
12.如果你感兴趣,可以继续配置log4j的配置文件log4j.properties:
[color=blue]#--------------------------------
#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[/color]
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
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
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
hList = null; JSONObject jo = null; JSONArray ja = new JSONArray(); try {
Map
params = new HashMap
(); 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
) 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 查询结果集合 */ List
query(String sqlId, Object params) throws AKSQLException; /** * 根据条件查询数据,用于分页 * * @param sqlId IBatis SQL Id * @param params 查询参数 * * @throws AKSQLException SQL异常 * * @return List 查询结果集合 */ List
queryPagination(String sqlId, Object params) throws AKSQLException; /** * 根据条件查询数据记录数,用于分页 * * @param sqlId IBatis SQL Id * @param params 查询参数 * * @throws AKSQLException SQL异常 * * @return List 查询结果集合 */ int queryCount(String sqlId, Object params) throws AKSQLException; /** * 查询一条记录 * * @param sqlId IBatis SQL Id * @param params 查询参数 * * @throws AKSQLException SQL异常 * * @return List 查询结果集合 */ Object queryOneModel(String sqlId, Object params) throws AKSQLException; /** * 查询所有数据 * * @param sqlId IBatis SQL Id * @param params 查询参数 * * @throws AKSQLException SQL异常 * * @return List 查询结果集合 */ 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 查询结果集合 */ @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 查询结果集合 */ @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 查询结果集合 */ @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 查询结果集合 */ @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 查询结果集合 */ @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,我尽量帮助你:)

转载地址:https://blog.csdn.net/iteye_12884/article/details/82580246 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:递归去除集合中的空格(集合中可能包括集合,Map、List)
下一篇:tomcat下摘要认证(数据库配置用户角色)+java代码模拟请求

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年03月12日 14时13分09秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

mysql 2003错误 10055_MYSQL无法连接---提示10055错误 2019-04-21
mysql redis缓存层_redis实现缓存的两种方式 2019-04-21
git 改local branch名字_用Git管理Latex写论文的工作流程 2019-04-21
mysql索引篇_MySQL索引篇 2019-04-21
有至少一个用MySQL_Mysql有用的面试题 2019-04-21
mysql select同时update_MySQLSELECT同时UPDATE同一张表 2019-04-21
mysql删除后数据库没变化_mysql之delete删除记录后数据库大小不变 2019-04-21
net mysql start3534_MySQL 5.7.14 net start mysql 服务无法启动-“NET HELPMSG 3534” 的奇怪问题... 2019-04-21
pta两个有序链表的合并_7-1 两个有序链表序列的合并 (20分) --- 内存问题再叙 2019-04-21
python问题描述怎么写_python写文件有时候写不进去怎么办 2019-04-21
qpython3安装lxml_在python的lxml中使用xml目录? 2019-04-21
java 幂取模_快速幂取模算法 2019-04-21
java build path jre_java-如何在安装了jre 7后为Jre 6设置路径? 2019-04-21
java上传下载源码_javaweb简单实现文件上传与下载源代码 2019-04-21
java socket udp 广播_1.Java 的屏幕广播(基于UDP),2.多线程下载器 2019-04-21
java控制热敏打印机的例子.rar_stm32控制热敏打印机 2019-04-21
java clone equals_(原)java中对象复制、==、equals 2019-04-21
java滚动字幕实训报告_Java实习报告 (7000字).doc 2019-04-21
php7 memcached.exe,PHP7 下安装 memcache 和 memcached 扩展 2019-04-21
计算机二级java技巧,计算机二级报java难考吗 2019-04-21