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