thrift使用示例二
来源:互联网 发布:淘宝限制购买怎么解决 编辑:程序博客网 时间:2024/05/21 06:53
thrift使用示例二
1.thrift配置参考:
#定义生成代码的命名空间(与你需要定义的package相对应,其中"java"表示如果生产的是Java类,则会在指定的包下生成)namespace java com.zhongying.thrift#创建另一个名称类型(即对i32类型起别名,thrift中的i32对应java中的int,在下面如果要使用i32就可以直接用int代替了)typedef i32 int#接口一使用(获取行业信息)#定义结构体,最终会像service一样生成一个Output类,可以当作一种数据类型使用struct Output { 1: map<string, string> values; }#接口二使用(获取最终结果)#定义结构体,最终会像service一样生成一个UserArray类,可以当作一种数据类型使用struct UserArray {1: string userId;2: string userName;3: string userPhoneNumber;4: double allSumMoney;5: int allConsumeTimes;6: double allAvgMoney;7: string lastConsumeTime;8: string lastConsumeShop;9: string lastConsumeItem;10: list<string> tags;}#定义结构体,最终会像service一样生成一个UserResult类,可以当作一种数据类型使用struct UserResult {1: int rsCount;2: list<UserArray> array;}#定义service,最终生成一个BakingManager接口类,类里面有需要自己手动实现的getOutput()、getCPList()方法#你的业务逻辑代码需要实现代码生成的BakingManager.Iface接口service BakingManager { Output getOutput(1:string id), UserResult getCPList(1:int pageSize, 2:int pageIndex, 3:list<string> sectorId, 4:list<string> areaId, 5:double fromSectorAvgMonery, 6:double toSectorAvgMoney, 7:double fromSectorSummoney, 8: double toSectorSumMoney),}
2.生成的java类如下:
最终生成gen-java文件夹,其下有个com.zhongying.thrift包,包中包含所生成的类(在这里面,我已经对其改造成了"source folder")。
OutPut、UserArray、UserResult与配置文件中的struct类型对应,表示一种数据类型;BankingManger与配置文件中的service对应,表示一个接口(需自己手写代码实现此接口)
3.编写实现类(实现BankingManager.Iface接口)
package com.zhongying.java;import java.util.List;import java.util.Map;import org.apache.thrift.TException;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.zhongying.ibatisImpl.CategoryImpl;import com.zhongying.ibatisImpl.Tmp;import com.zhongying.thrift.BakingManager;import com.zhongying.thrift.Output;import com.zhongying.thrift.UserResult;/**实现BakingManager.Iface接口(该接口有两个方法)*/public class BakingHandler implements BakingManager.Iface {private static final Logger LOGGER = LoggerFactory.getLogger(BakingHandler.class);private static int sum = 0;@Overridepublic synchronized Output getOutput(String id) {//Map<String,String> map = new Category.getCategorys(id);//之前的jdbc实现代码Map<String,String> map = new CategoryImpl().getCategorys(id);Output output = new Output(map);//调用OutPut的构造方法把map改造为Output类型//LOGGER.debug("接口被调用:" + ++sum + "次");System.out.println("接口被调用:" + ++sum + "次");return output;}@Overridepublic UserResult getCPList(int pageSize, int pageIndex,List<String> sectorId, List<String> areaId,double fromSectorAvgMonery, double toSectorAvgMoney,double fromSectorSummoney, double toSectorSumMoney)throws TException {UserResult result = new Tmp().getCPList(pageSize, pageIndex, sectorId,areaId, fromSectorAvgMonery, toSectorAvgMoney,fromSectorSummoney, toSectorSumMoney);// LOGGER.info("接口被调用:" + ++sum + "次");System.out.println("接口被调用:" + ++sum + "次");return result;}}
4.上述实现接口的代码间接的调用了其他类中的对于getOuput和getCPList方法的具体实现,参考如下:
(1).getOutput方法实现:
import com.ibatis.common.resources.Resources;import com.ibatis.sqlmap.client.SqlMapClient;import com.ibatis.sqlmap.client.SqlMapClientBuilder;import com.zhongying.pojo.Category;public class CategoryImpl {private static SqlMapClient sqlMapClient = null;// 读取配置文件static {try {Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);reader.close();} catch (IOException e) {e.printStackTrace();}}@SuppressWarnings("unchecked")public Map<String,String> getCategorys(String catId) {List<Category> list = new ArrayList<Category>();try{list = sqlMapClient.queryForList("getCategorys",catId);Map<String,String> map = new HashMap<String,String>();for(Category cat : list){map.put(cat.getCatId(), cat.getCatName());}return map;}catch (SQLException e) {e.printStackTrace();return null;}}}
(2).getCPList方法实现:
import java.util.ArrayList;import java.util.List;import com.zhongying.thrift.UserArray;import com.zhongying.thrift.UserResult;public class FianlResultTmp {public UserResult getCPList(int pageSize, int pageIndex, List<String> sectorId,List<String> areaId, double fromSectorAvgMonery, double toSectorAvgMoney,double fromSectorSummoney, double toSectorSumMoney) {UserResult result = new UserResult();result.setRsCount(35);List<UserArray> userArrays = new ArrayList<UserArray>();for(int i = 0; i < 10; i++){UserArray arr = new UserArray(); arr.setUserId("1001"); arr.setUserName("朱**"); arr.setUserPhoneNumber("187******93"); arr.setAllSumMoney(5060.0); arr.setAllConsumeTimes(15); arr.setAllAvgMoney(337.3); arr.setLastConsumeTime("2013-2-16"); arr.setLastConsumeShop("无锡国美永乐店"); arr.setLastConsumeItem("微波炉、洗衣机、三星Cgalaxy 5"); List<String> tags = new ArrayList<String>(); tags.add("湘菜"); tags.add("婚纱馆"); tags.add("亲子旅游"); arr.setTags(tags); userArrays.add(arr);}result.setArray(userArrays);return result;}}
以上代码仅供本人参考,大家可能会看的很模糊,如果有兴趣可以下载本人的实现代码:
http://download.csdn.net/detail/u012875880/7057687
0 0
- thrift使用示例二
- thrift使用入门示例
- Thrift使用示例
- thrift 串行化使用示例
- VS2008 thrift简单使用示例
- 【Apache Thrift】Thrift的使用和编译(二)
- 【Apache Thrift】Thrift的使用和编译(二)
- windows下使用thrift编译+示例+详解解决坑
- VS2012 C++ thrift-0.10.0简单使用示例
- python thrift 示例
- python thrift 示例<转>
- Thrift示例分析
- thrift远程调用示例
- thrift 安装及示例
- Thrift开发示例
- thrift远程调用示例
- Thrift示例程序
- Thrift第一个示例
- SEO优化步骤
- javascript eval和JSON之间的联系
- 使用Android Studio遇到的问题及解决过程
- 新手学习Cadence16.3笔记
- 16进制转化为8进制
- thrift使用示例二
- usaco training 6.1.3 Cow XOR 题解
- MongoDB数据文件备份与恢复
- Hibernate查询缓存全面分析
- hdu 1255 覆盖的面积 线段树扫描线num2
- 整齐打印
- 关于matlab连续读入图片的问题
- Android动画之translate(位移动画)
- 对象的四种引用方式