多属性对象创建公用RowMapper
来源:互联网 发布:消费金融 知乎 编辑:程序博客网 时间:2024/05/17 09:22
接着上一篇博文,继续写一下,如果给多属性的大对象,如何创建公用的rowmapper?
假如有应用对象App,包含属性如下
/** * 应用实体类 * @author Administrator */public class App {// 应用IDprivate String id;// 名称private String name;// 发布时间private Date createTime;// 应用类型private AppType appType;// 应用访问地址private String appVisitedAddress;// 应用图标private Image appImage;}
其中应用类型和图标又分别为类
/** * 应用类型实体 * @author Administrator */public class AppType {// 类型IDprivate String typeId;// 类型名称private String typeName;}
和
/** * 图标实体类 * @author Administrator */public class Image {// 图标IDprivate String imageId;// 退保路径private String imageUrl;}
假如要查询出一个App对象的话,那么映射的属性共有id,name,createTime 和 appVisitedAddress 四个单属性 及 appType 和 appImage 两个对象属性。
但是 查询的时候,并不需要每次都将所有的属性查询出来,然后组装为App 对象的实例,那么每次都写一个App 的 RowMapper 类吗?显然比较浪费。
我们可以使用前一篇博文讲过的,根据查询结果集中是否存在该属性列来决定是否映射该属性,写一个公用的AppRowMapper类。
import java.sql.ResultSet;import java.sql.SQLException;import org.springframework.jdbc.core.RowMapper;import com.bbs.entity.App;import com.bbs.entity.AppType;import com.bbs.entity.Image;public class AppRowMap implements RowMapper<App> {@Overridepublic App mapRow(ResultSet rs, int index) throws SQLException {// APPType 类AppType appType = new AppType();// typeId属性映射if (isExistColumn(rs, "typeId")) {appType.setTypeId(rs.getString("typeId"));}// typeName属性if (isExistColumn(rs, "typeName")) {appType.setTypeName(rs.getString("typeName"));}// AppImage 类Image appImage = new Image();// imageId 属性if (isExistColumn(rs, "imageId")) {appImage.setImageId(rs.getString("imageId"));}// imageName 属性if (isExistColumn(rs, "imageName")) {appImage.setImageUrl(rs.getString("imageName"));}final App app = new App();// 应用idif (isExistColumn(rs, "id")) {app.setId(rs.getString("id"));}// 应用nameif (isExistColumn(rs, "name")) {app.setName(rs.getString("name"));}// 创建时间if (isExistColumn(rs, "createTime")) {app.setCreateTime(rs.getDate("createTime"));}// 访问地址if (isExistColumn(rs, "appVisitedAddress")) {app.setAppVisitedAddress(rs.getString("appVisitedAddress"));}app.setAppImage(appImage);app.setAppType(appType);return app;}/** * 判断查询结果集中是否存在某列 * @param rs 查询结果集 * @param columnName 列名 * @return true 存在; false 不存咋 */public boolean isExistColumn(ResultSet rs, String columnName) {try {if (rs.findColumn(columnName) > 0 ) {return true;} }catch (SQLException e) {return false;}return false;}}
这样,当我们第一次仅查询出id和name时,和第二次查询出id,appVisitAddress时便可共用一个AppRowMap 对象。
这里我们只是一个简单的例子,给的对象属性都比较少,当然实际情况中,对象属性可能更多,而且关联对象更复杂时,这种方式便非常有效。因为在数据库查询结果集ResultSet中,如果直接去getString("notExistColumn") 时,会直接抛SQLException,isExistColumn(ResultSet rs, String columnName) 正是利用了 findColumn 方法的SQLException ,然后达到了是否存在该列的效果。
0 0
- 多属性对象创建公用RowMapper
- ACM-选择器公用一个对象时如何销毁好创建
- vue--创建对象属性
- javascript创建对象属性
- js公用功能对象
- 在 Azure 中使用公用 IP 创建多 NIC VM
- js 创建对象、属性、方法
- Qt 对象 创建自定义属性
- js 创建对象、属性、方法
- zend framework2-控制器插件创建公用对象函数,可在控制器直接调用
- android 常用布局公用属性
- 验证控件公用属性表
- 属性较多的java对象的创建
- 将每行映射为MAP对象的RowMapper实现
- JavaScript学习笔记,创建对象,属性访问
- js创建对象并赋值其属性
- 创建对象和使用方法以及属性
- 创建对象和使用方法以及属性
- servlet+jsp数据库增删改查实例
- uvalive 3716
- 多个监听器的绑定与监听
- codeforces Biridian Forest
- 在qml工程中怎么使用qmldir进行模块管理
- 多属性对象创建公用RowMapper
- [leetcode]Valid Sudoku(判断有效数独 C语言实现)
- 字串
- 【Java】Java学习进度_W1
- poj 1469 二分匹配——匈牙利算法
- 推荐一个UML图制作软件UMLET
- 时间复杂度与空间复杂度概念
- [LeetCode]Reverse Integer
- nginx rtmp