收藏223
分享
阅读11911
更新时间2022-04-11
JDBC模块提供的ORM主要是针对单实体操作,实际业务中往往会涉及到多表关联查询以及返回多个表字段,在单实体ORM中是无法将JDBC结果集记录自动转换为实体对象的,这时就需要对结果集数据自定义处理来满足业务需求。
若想实现结果集数据的自定义处理,需要了解以下相关接口和类:
IResultSetHandler接口:结果集数据处理接口,用于完成将JDBC结果集原始数据的每一行记录进行转换为目标对象,JDBC模块默认提供了该接口的三种实现:
EntityResultSetHandler:采用实体类存储结果集数据的接口实现,此类已经集成在ISession会话接口业务逻辑中,仅用于处理单实体的数据转换;
MapResultSetHandler:采用Map存储结果集数据的接口实现;
ArrayResultSetHandler:采用Object[]数组存储结果集数据的接口实现;
ResultSetHelper类:数据结果集辅助处理工具,用于帮助开发人员便捷的读取和遍历结果集中数据内容,仅支持由 ArrayResultSetHandler 和 MapResultSetHandler 产生的结果集数据类型;
下面通过简单的多表关联查询来介绍IResultSetHandler接口和ResultSetHelper类如何配合使用:
示例代码一:使用ArrayResultSetHandler或MapResultSetHandler处理结果集数据;
IResultSet
示例代码二:使用自定义IResultSetHandler处理结果集数据;
// 自定义JavaBean对象,用于封装多表关联的结果集的记录
public class CustomUser {
private String id;
private String username;
private Double money;
// 忽略Getter和Setter方法
}
// 修改示例一的代码,将结果集中的每一条记录转换成自定义的CustomUser对象
IResultSet _results = JDBC.get().openSession(new ISessionExecutor>() {
public IResultSet execute(ISession session) throws Exception {
Select _uSelect = Select.create(User.class, "u")
.join(Join.left(UserExt.TABLE_NAME).alias("ue")
.on(Cond.create()
.opt("u", User.FIELDS.ID, Cond.OPT.EQ, "ue", UserExt.FIELDS.UID)))
.field(Fields.create()
.add("u", User.FIELDS.ID, "id")
.add("u", User.FIELDS.USER_NAME, "username")
.add("ue", UserExt.FIELDS.MONEY, "money"));
// 通过实现IResultSetHandler接口实现结果集的自定义处理
return session.find(SQL.create(_uSelect), new IResultSetHandler() {
public List handle(ResultSet resultSet) throws Exception {
List _results = new ArrayList();
while (resultSet.next()) {
CustomUser _cUser = new CustomUser();
_cUser.setId(resultSet.getString("id"));
_cUser.setUsername(resultSet.getString("username"));
_cUser.setMoney(resultSet.getDouble("money"));
//
_results.add(_cUser);
}
return _results;
}
});
}
}); 相关
视频
RELATED VIDEOS
科技资讯
1
2
3
4
5
6
7
8
9
精选课程
共5课时
17.2万人学习
共49课时
77万人学习
共29课时
61.7万人学习
共25课时
39.3万人学习
共43课时
71万人学习
共25课时
61.6万人学习
共22课时
23万人学习
共28课时
33.9万人学习
共89课时
125万人学习