非直连数据库的环境下,如何进行数据库访问呢?
下面是使用数据代理进行数据访问的示例代码,分享在此。
(1)是服务层:服务层通过UID获取用户POJO:
/**
* 通过UID获取用户详情
* @param uid
* @return
*/
public User getUserById(String uid) {
Hashtable<String, String> ctx_params = new Hashtable<String, String>();
ctx_params.put("p1", uid);
//获取数据结果
FsResult result = proxyDatasetService.getSingle("get_user_details_by_id", ctx_params);
//判断结果状态
if(result.getStatus() != FsSpec.STATUS_OK) {
return (null);
}
//转换成POJO实例
User pojo = null;
JSONObject obj = (JSONObject)result.getContents();
pojo = User.fromJson(obj);
return (pojo);
}
(2)是POJO定义的静态方法,从JSON对象生成POJO实例:
/**
* 从JSON对象生成P0JO实例
* @param obj
* @return
*/
public static User fromJson(JSONObject obj) {
if(obj == null) {
return (null);
}
ObjectMapper objMapper = new ObjectMapper();
objMapper.setDateFormat(new SimpleDateFormat(FsFormatUtil.Pattern_Date) );
User pojo = FsJsonUtil.getInstance().json2Entity(objMapper, obj, User.class);
return (pojo);
}
(3)是(1)中的代理层获取数据的方法:
/**
* 代理获取单条记录
* @param ds_id 数据集标识
* @param ctx_params 上下文参数
* @return 数据记录结果
*/
public FsResult getSingle(String ds_id, Hashtable<String,String> ctx_params) {
ctx_params.put("ds_id", ds_id);
//通过数据服务平台提供的客户端工具调用远程接口
FsResult result = client.getSingle(appProperties.getHost(),
appProperties.getPort(),
appProperties.getDomain(),
ctx_params);
return (result);
}
(4)是数据服务平台对(1)中数据接口的定义,通过配置来完成:
结语:
通过配置定义数据接口,服务层通过代理服务访问数据接口并获取数据结果并转换成POJO实例。
过程清晰,代码简单,是不是值得圈点呢。