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; @Override public 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; } @Override public 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; } }
(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