在开发中经常用到select的标签将数据加载,供用户选择,我最近在开发一个跟帐务有关的应用系统,系统中包括了很多查
询功能,比如那款游戏进行查询,每次到查询页面,必须要显示所有游戏,为了避免每次打开该页面都要查询数据库的话那执
行效率就会很低。所以我写了一个缓存,简单解决这个问题。供大家查考!
java 代码
- public class SystemInfoCache {
- private static Map map = null;
- private static SystemInfoCache instance;
- private static Object mutex = new Object();
- /**
- * 单列设计模式保证应用中只有一个对象
- * @return
- */
- public static SystemInfoCache getInstance() {
- if (instance == null) {
- synchronized (mutex) {
- if (instance == null) {
- loadMap();
- instance = new SystemInfoCache(map);
- }
- }
- }
- return instance;
- }
- /**
- * 通过id获取应用名称
- *
- * @param id 应用id对应数据中的主键
- * @return
- */
- public String getSysinfoName(Integer id) {
- SystemInfoDTO dto = null;
- if (getInstance().map.containsKey(id)) {
- dto = getInstance().map.get(id);
- return dto.getSysName();
- }
- try {
- dto = BizLocator.getSystemInfoBiz().getSystemInfoById(id);
- return dto.getSysName();
- } catch (DAOException e) {
- e.printStackTrace();
- }
- return "";
- }
- /**
- * 获得列表
- * @return 获得系统信息列表
- */
- public List<systeminfodto></systeminfodto> getList() {
- if (instance.map == null)
- this.loadMap();
- List<systeminfodto></systeminfodto> list = new ArrayList<systeminfodto></systeminfodto>();
- int size = instance.map.size();
- Iterator iter = instance.map.entrySet().iterator();
- for (int i = 0; i < size; i++) {
- Map.Entry entry = (Map.Entry) iter
- .next();
- list.add(entry.getValue());
- }
- return list;
- }
- /**
- * 加载数据中的数据
- *
- */
- private static void loadMap() {
- map = new HashMap();
- try {
- List<systeminfodto></systeminfodto> list = BizLocator.getSystemInfoBiz()//通过此方法获取数据中的应用系统信息
- .getSystemInfoByName("");
- for (SystemInfoDTO dto : list) { //存储到map中
- map.put(dto.getSysId(), dto);
- }
- } catch (DAOException e) {
- e.printStackTrace();
- }
- }
- private SystemInfoCache(Map map) {
- }
- }
注:记录本人在开发中遇到的问题,与大家一起交流,如果有的好的解决方法,请指导一下,谢谢!