在数据库的设计中,字典项是经常使用的技巧。
比如在一个图书馆系统中,书籍表(Book)会有一个分类字段,这时候我们一般会单独建立一张分类表(Category),在书籍表只保存分类表的ID。
在用户界面上显示书籍明细的时候,会要求显示CategoryID在Category表中对应的名称。
这样通常的做法是把Book和Category两张表进行关联。
但在实际应用中,Category一般都是Cache在应用服务器端,再使用数据表的连接就不够高效。
我的做法是这样的:在iBatis中使用SqlMap从表中将数据取出,此时不使用数据表的连接。
<!---->package com.demo;
public class Book {
/* 省略了getter和setter方法 */
private int id;
private String name;
private int categoryId;
private String author;
}
<!---->package com.demo;
public class Category {
private static Map<Integer, Category> cacheMap;
/* 省略了这两个属性的getter和setter方法 */
private int id;
private String name;
public static Category getCategory(int id) {
init();
return cacheMap.get(id);
}
public static Map<Integer, Category> getCategoryMap() {
init();
return cacheMap();
}
private init() {
if ( cacheMap != null ) return;
// the code to load category from datebase
// 在这里为了演示的需要,使用以下代码
cacheMap = new HashMap<Integer, Category>();
Category category = new Category();
category.setId(1);
category.setName("Fiction");
cacheMap.put(1, category);
category = new Category();
category.setId(2);
category.setName("Cartoon");
}
}
<!---->package com.demo;
public class BookAction {
/* 省略了属性的getter和setter方法 */
Book book;
public String execute() {
book = new Book();
book.setId(1);
book.setName("Thinking in java");
book.setCategoryId(1);
bookList.add(book);
return SUCCESS;
}
}
JSP:
<!----><%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<s:head />
</head>
<body>
<table border="1">
<tr>
<td>
<s:text name="page.label.userName" />
</td>
<td>
<s:property value="book.name" />
</td>
</tr>
<tr>
<td>
<s:text name="page.label.category" />
</td>
<td>
<s:property value="@com.demo.Category@getCategory(book.categoryId).getName()"/></td>
</tr>
</body>
</html>
: 使用struts2中的ognl表达式显示数据表字典项的值 回复 更多评论 2008-03-17 17:57 by 雨奏
@云自无心水自闲
其实如果修改一下Book为
public class Book {
/* 省略了getter和setter方法 */
private int id;
private String name;
private Category category; //Modify code here
private String author;
}
(当然你的action、dao等需要进行相应的修改)
可以考虑在JSP页面中这样访问:
<s:property value="book.category.name"/>
# re: 使用struts2中的ognl表达式显示数据表字典项的值[未登录] 回复 更多评论
2008-03-17 19:00 by
云自无心水自闲
@雨奏
这篇文章主要就是想利用数据的缓存简化数据存取。
Category这样的缓存方法只是一个示例,其实数据完全可以以其他的方式缓存,这里只是介绍有这么一种方法可以使用。
# re: 使用struts2中的ognl表达式显示数据表字典项的值 回复 更多评论
2008-03-17 21:06 by
长江三峡
学习
# re: 使用struts2中的ognl表达式显示数据表字典项的值 回复 更多评论
2008-03-18 00:12 by
Edward's
ognl原来可以这样用啊
# re: 使用struts2中的ognl表达式显示数据表字典项的值 回复 更多评论
2008-03-18 09:37 by
雨奏
@云自无心水自闲
没错,数据缓存方式有多种,你的文章也确实展现了ognl的更多的用法。我只是提出一点个人的看法供参考:就你提供的代码来看,感觉换一种方式似乎更简洁、更易理解一点
# re: 使用struts2中的ognl表达式显示数据表字典项的值 回复 更多评论
2008-03-18 09:59 by
hejianhuacn
webwork2 里也支持“@com.demo.Category@getCategory(book.categoryId).getName()"的语法?看来要试一下了
# re: 使用struts2中的ognl表达式显示数据表字典项的值 回复 更多评论
2008-03-18 20:55 by
云自无心水自闲
@雨奏
想请教一下,你准备如何修改action和Dao?
即如何获得book实例中category的值呢?
# re: 使用struts2中的ognl表达式显示数据表字典项的值 回复 更多评论
2008-03-18 21:53 by
雨奏
@云自无心水自闲
因为我使用的是Hibernate,当把Category作为Book的一个属性,获得一个Book实例后可直接访问该属性取得相应的Category,Hibernate会自动地加载它(如果设置了laze initialization,Hibernate会在程序第一次访问该属性时加载,否则加载Book时同时加载)
我才注意到你使用的是iBatis,很抱歉我对它并不了解,我提到的这种做法可能并不适合
分享到:
相关推荐
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
Unity3d 3D模型描边代码 懒人直接上代码
原文链接:https://alading.blog.csdn.net/article/details/141710476 包含功能: 经理管理:负责经理信息维护与权限分配,确保管理层操作的安全性和高效性。 员工管理:管理员工信息,包括招聘、离职、考勤及权限设置,优化人力资源配置。 商品分类管理:对商品进行科学分类,便于商品检索与管理,提升顾客购物体验。 商品信息管理:维护商品详细信息,如名称、价格、描述等,确保信息准确无误。 商品入库管理:监控商品入库流程,记录库存变化,实现库存精准管理。 商品销售管理:处理销售事务,包括销售记录、退货处理,支持销售业绩分析。 缺货提醒管理:自动检测库存水平,及时发出缺货警告,保障商品供应连续性。 商品收银管理:处理交易结算,支持多种支付方式,确保收银过程快速准确。 供应商管理:维护供应商信息,评估合作效果,优化供应链,保证商品质量与供应稳定性。
MATLAB实现工业PCB电路板缺陷识别和检测【图像处理实战】项目详情请参见:https://handsome-man.blog.csdn.net/article/details/130493170 PCB板检测的大概流程如下:首先存储一个标准PCB板图像作为良好板材的参考标准,然后将待检测的PCB板图像进行处理,比较与标准PCB图像的差异,根据差异的情况来判断缺陷类型。 项目代码可顺利编译运行~
Jupyter-Notebook
1991-2021年中国科技统计年鉴-最新数据发布.zip
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
BMI270 驱动开发程序
Jupyter-Notebook
Jupyter-Notebook
Jupyter-Notebook
上市公司基本资料及行业分类(2020)+员工构成数据大全(2006-2020)-最新发布.zip
安慰剂检验代码与数据文章-最新研究成果.zip
原文链接:https://alading.blog.csdn.net/article/details/141678636 包含功能: 用户管理:负责系统用户的注册、登录、权限分配及个人信息管理。 供应商管理:维护供应商信息,包括添加、编辑、删除供应商资料及合作状态。 商品分类管理:创建、修改和删除商品分类,便于商品归类与查找。 商品信息管理:管理商品详情,如添加新品、编辑商品属性、价格及库存量。 采购入库管理:记录采购订单详情,处理入库操作,更新库存数量。 销售信息管理:记录销售订单,追踪销售数据,支持销售分析与报表生成。 赠品入库管理:管理赠品入库流程,记录赠品信息,关联促销活动。 退货入库管理:处理客户退货,记录退货详情,恢复库存数量。 其他入库管理:管理非采购、非赠品的入库情况,如调拨入库等。 购买订单管理:跟踪客户购买订单状态,从下单到发货的全流程管理。 赠送信息管理:管理赠品发放规则,记录赠送活动执行情况。 盘点信息管理:定期进行库存盘点,记录盘点结果,调整库存差异。
演示:https://blog.csdn.net/m0_54925305/article/details/143660348?spm=1001.2014.3001.5501
Jupyter-Notebook
shiahdifhiahfiqefiwhfi weifwijfiwqufiqweefijeq0jfe
用java实现了全部23种设计模式,代码简单易懂,注释详细,仅作学习使用——hrh。
北大新农研究院联合阿里县域乡村指数(2018)-已更至最新.zip