如何用Java实现一个简单的数据库缓存功能

小白求助,现在需求是这样的:有一条SQL语句,先将查找到的内容缓存到内存中,之后再查询的时候就先从缓存中查询,如果第二条SQL语句的查询结果被包含在第一条语句的查询结果中,就直接从内存中读取,我想请问现在用什么方法可以实现这种需求?
我现在只知道Hibernate的查询缓存只能对完全相同的SQL语句读缓存,这种包含关系的还是会从数据库中读。

3个回答

问的太笼统,还有:之后再查询的时候就先从缓存中查询,如果第二条SQL语句的查询结果被包含在第一条语句的查询结果中,就直接从内存中读取,
和缓存的定义相互违背:缓存的方法很多

能够缓存的都是sql等语意相同的,部分结果是不太方便进行缓存处理的

可以抽空学学redis,多掌握点总归好

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
一个简单的java缓存实现

一个简单的java缓存实现 import java.util.Map; import java.util.WeakHashMap; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLoc

用java编写的记事本,基本功能都实现了啊!

import java.awt.BorderLayout; import java.awt.Container; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import javax.swing.BorderFactory; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.KeyStroke; import javax.swing.ScrollPaneConstants; import javax.swing.SwingConstants; public class JNotePadUI extends JFrame { private JMenuItem menuOpen; private JMenuItem menuSave; private JMenuItem menuSaveAs; private JMenuItem menuClose; private JMenu editMenu; private JMenuItem menuCut; private JMenuItem menuCopy; private JMenuItem menuPaste; private JMenuItem menuAbout; private JTextArea textArea; private JLabel stateBar; private JFileChooser fileChooser; private JPopupMenu popUpMenu; public JNotePadUI() { super("新建文本文件"); setUpUIComponent(); setUpEventListener(); setVisible(true); } private void setUpUIComponent() { setSize(640, 480); // 菜单栏 JMenuBar menuBar = new JMenuBar(); // 设置「文件」菜单 JMenu fileMenu = new JMenu("文件"); menuOpen = new JMenuItem("打开"); // 快捷键设置 menuOpen.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_O, InputEvent.CTRL_MASK)); menuSave = new JMenuItem("保存"); menuSave.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_S, InputEvent.CTRL_MASK)); menuSaveAs = new JMenuItem("另存为"); menuClose = new JMenuItem("关闭"); menuClose.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_Q, InputEvent.CTRL_MASK)); fileMenu.add(menuOpen); fileMenu.addSeparator(); // 分隔线 fileMenu.add(menuSave); fileMenu.add(menuSaveAs); fileMenu.addSeparator(); // 分隔线 fileMenu.add(menuClose); // 设置「编辑」菜单 JMenu editMenu = new JMenu("编辑"); menuCut = new JMenuItem("剪切"); menuCut.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK)); menuCopy = new JMenuItem("复制"); menuCopy.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK)); menuPaste = new JMenuItem("粘贴"); menuPaste.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK)); editMenu.add(menuCut); editMenu.add(menuCopy); editMenu.add(menuPaste); // 设置「关于」菜单 JMenu aboutMenu = new JMenu("关于"); menuAbout = new JMenuItem("关于JNotePad"); aboutMenu.add(menuAbout); menuBar.add(fileMenu); menuBar.add(editMenu); menuBar.add(aboutMenu); setJMenuBar(menuBar); // 文字编辑区域 textArea = new JTextArea(); textArea.setFont(new Font("宋体", Font.PLAIN, 16)); textArea.setLineWrap(true); JScrollPane panel = new JScrollPane(textArea, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); Container contentPane = getContentPane(); contentPane.add(panel, BorderLayout.CENTER); // 状态栏 stateBar = new JLabel("未修改"); stateBar.setHorizontalAlignment(SwingConstants.LEFT); stateBar.setBorder( BorderFactory.createEtchedBorder()); contentPane.add(stateBar, BorderLayout.SOUTH); popUpMenu = editMenu.getPopupMenu(); fileChooser = new JFileChooser(); } private void setUpEventListener() { // 按下窗口关闭钮事件处理 addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { closeFile(); } } ); // 菜单 - 打开 menuOpen.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { openFile(); } } ); // 菜单 - 保存 menuSave.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { saveFile(); } } ); // 菜单 - 另存为 menuSaveAs.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { saveFileAs(); } } ); // 菜单 - 关闭文件 menuClose.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { closeFile(); } } ); // 菜单 - 剪切 menuCut.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { cut(); } } ); // 菜单 - 复制 menuCopy.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { copy(); } } ); // 菜单 - 粘贴 menuPaste.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { paste(); } } ); // 菜单 - 关于 menuAbout.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { // 显示对话框 JOptionPane.showOptionDialog(null, "程序名称:\n JNotePad \n" + "程序设计:\n \n" + "简介:\n 一个简单的文字编辑器\n" + " 可作为验收Java的实现对象\n" + " 欢迎网友下载研究交流\n\n" + " /", "关于JNotePad", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null); } } ); // 编辑区键盘事件 textArea.addKeyListener( new KeyAdapter() { public void keyTyped(KeyEvent e) { processTextArea(); } } ); // 编辑区鼠标事件 textArea.addMouseListener( new MouseAdapter() { public void mouseReleased(MouseEvent e) { if(e.getButton() == MouseEvent.BUTTON3) popUpMenu.show(editMenu, e.getX(), e.getY()); } public void mouseClicked(MouseEvent e) { if(e.getButton() == MouseEvent.BUTTON1) popUpMenu.setVisible(false); } } ); } private void openFile() { if(isCurrentFileSaved()) { // 文件是否为保存状态 open(); // 打开 } else { // 显示对话框 int option = JOptionPane.showConfirmDialog( null, "文件已修改,是否保存?", "保存文件?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null); switch(option) { // 确认文件保存 case JOptionPane.YES_OPTION: saveFile(); // 保存文件 break; // 放弃文件保存 case JOptionPane.NO_OPTION: open(); break; } } } private boolean isCurrentFileSaved() { if(stateBar.getText().equals("未修改")) { return false; } else { return true; } } private void open() { // fileChooser 是 JFileChooser 的实例 // 显示文件选取的对话框 int option = fileChooser.showDialog(null, null); // 使用者按下确认键 if(option == JFileChooser.APPROVE_OPTION) { try { // 开启选取的文件 BufferedReader buf = new BufferedReader( new FileReader( fileChooser.getSelectedFile())); // 设定文件标题 setTitle(fileChooser.getSelectedFile().toString()); // 清除前一次文件 textArea.setText(""); // 设定状态栏 stateBar.setText("未修改"); // 取得系统相依的换行字符 String lineSeparator = System.getProperty("line.separator"); // 读取文件并附加至文字编辑区 String text; while((text = buf.readLine()) != null) { textArea.append(text); textArea.append(lineSeparator); } buf.close(); } catch(IOException e) { JOptionPane.showMessageDialog(null, e.toString(), "开启文件失败", JOptionPane.ERROR_MESSAGE); } } } private void saveFile() { // 从标题栏取得文件名称 File file = new File(getTitle()); // 若指定的文件不存在 if(!file.exists()) { // 执行另存为 saveFileAs(); } else { try { // 开启指定的文件 BufferedWriter buf = new BufferedWriter( new FileWriter(file)); // 将文字编辑区的文字写入文件 buf.write(textArea.getText()); buf.close(); // 设定状态栏为未修改 stateBar.setText("未修改"); } catch(IOException e) { JOptionPane.showMessageDialog(null, e.toString(), "写入文件失败", JOptionPane.ERROR_MESSAGE); } } } private void saveFileAs() { // 显示文件对话框 int option = fileChooser.showSaveDialog(null); // 如果确认选取文件 if(option == JFileChooser.APPROVE_OPTION) { // 取得选择的文件 File file = fileChooser.getSelectedFile(); // 在标题栏上设定文件名称 setTitle(file.toString()); try { // 建立文件 file.createNewFile(); // 进行文件保存 saveFile(); } catch(IOException e) { JOptionPane.showMessageDialog(null, e.toString(), "无法建立新文件", JOptionPane.ERROR_MESSAGE); } } } private void closeFile() { // 是否已保存文件 if(isCurrentFileSaved()) { // 释放窗口资源,而后关闭程序 dispose(); } else { int option = JOptionPane.showConfirmDialog( null, "文件已修改,是否保存?", "保存文件?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null); switch(option) { case JOptionPane.YES_OPTION: saveFile(); break; case JOptionPane.NO_OPTION: dispose(); } } } private void cut() { textArea.cut(); stateBar.setText("已修改"); popUpMenu.setVisible(false); } private void copy() { textArea.copy(); popUpMenu.setVisible(false); } private void paste() { textArea.paste(); stateBar.setText("已修改"); popUpMenu.setVisible(false); } private void processTextArea() { stateBar.setText("已修改"); } public static void main(String[] args) { new JNotePadUI(); } }

Java实现的一个简单聊天软件

介绍这是我自己学习Socket时写的,用到了多线程,Socket的知识,还有Java的IO技术,并且做了一个Java的UI,废话不多说,先上效果图

java实现一个简单的五子棋游戏

import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Toolkit; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.image.BufferedIma

JAVAEE中用session实现简单的购物车

在做网上商城的项目中,很多时候我们都会涉及到购物车这个模块。其实购物车的实现有多种,简单按大类可以分为:数据库层次购物车和session缓存中的购物车。 数据库中的购物车原理其实和用session实现购物车基本类似。此文章重点简单介绍使用session来实现购物车,接下来我们进入正题。 要用session实现购物车,首先就要了解一个购物车的组成,很多网站中例如淘宝网,我们都可以看到一个购物车的

实现一个简单的数据本地存储

在使用Java开发简单的程序时,有时需要实现数据本地存储的功能,使用oracle、mysql等专业数据库显得大材小用,也让程序看起来不够简洁,所以个人就做了一个简单的数据缓存类,可以为程序提供基础的数据缓存,数据持久化的功能。 在设计时也考虑了数据加密存储的功能,不过加密的数据类型有限, public class Cache { static { load();//初始...

基于Java的一个简单的文件上传下载功能

最近在公司给客户端做接口,有一个图片上传和文件下载的功能,本来想用Struts来做文件上传下载,但是看了下公司好像没有这个配置,然后看了下同事的代码,才发现原来Apache也可以简单的实现文件上传下载。  首先引入commons-io-2.2.jar  FileUtils为我们提供了很多对文件的操作的方法,比如上传整个文件夹的文件、上传单个文件等  然后请看代码下载:  public st

用java实现简单的搜索引擎

纯java实现简单的搜索引擎

用Java编写的一个字符串加密程序

这是一个用Java编写的简易字符串加密文件,可以对你输入的任何字符串实现加密解密功能

利用JSP与JS实现简易购物车

自己编写的一个简易购物网站示例: 示例代码运行的结果:carts.jsp文件<%@ page contentType="text/html;charset=GBK" %> <%@ page import="java.util.*,java.sql.*" %> <% Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String

使用JAVA写的一个简易通讯程序(一)

好记性不如赖笔头…………两种常见的网络传输模型:一、OSI模型分层专业人员一般不说每一层的名称二是说第几层,这是等价的,层的位次得记清楚。 7)应用层——为终端用户提供应用程序服务。 6)表示层——为应用提供数据的表示形式。例如表示层告诉应用层哪儿有加密或它是否为一张.jpg图片。 5)会话层——在用户间管理会话。 4)传输层——在源定义数据段并编号,传送数据,并在目的地重组数据。增加(源、

Python实现简单爬虫功能

在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材。

用JAVA编写的在线考试系统程序,功能强大

用JAVA编写的在线考试系统程序,功能强大

用java编写的计时器

用java编写的计时器,非常简单额,……

Java 编写简单的服务器

Java 简单服务器

java编写一个文件查找器

我们学过文件File之后就想写一个文件搜索器我写了两个版本的搜索器,第一个是基于控制台的就是我的查找结果要显示在控制台上,这个比较适合初学者学习,另外我又写了一个基于界面的文件搜索器,用起来比较好看,在第二个版本中我使用了皮肤包。       首先看第一个版本,花了不到几分钟就可以搞定的东西结果让我做了很长那个时间,原因是当时递归的时候把文件夹的名称当作了绝对路径给传了进去导致无法正常递归。。。

使用Java+MySQL做的简易留言板

留言板是一个基本的程序,终于把这个程序运行起来了。虽然比较简单,还是经历了很多问题。 一个3个页面,一个后台处理程序,就可以运行起来了。 后续需要解决的问题: 1.引入Servlet 2.前端做一个Bootstrap 3.数据库增加自增长主键 4.学习smart 框架

使用 Java 实现一个最简单的 Web Server

Hello Web Server Web Server没有你想象的那么难实现(当然要实现一个好的Java Web Server还是很有难度的)。你只要明白基本的HTTP协议,TCP编程和IO知识。当然,你也要会最简单的HTML代码。 我们先来一个屌丝版,这个屌丝版能显示Hello Web Server package exec.network.webserver; import java....

JAVA做的计算器小程序(实现简单的功能)

用JAVA程序做的计算器程序,只能实现简单的+、-、*、/功能

Java实现一个简单的数据库系统

Java实现简单数据库 功能:select、 insert(插入后排序)、create、delete等

java实现简单的日历功能

在工作台输入日期类型的字符串,然后打印出对应的日期的日历。 package demo; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import

一个使用JAVA编写的类似按键精灵的程序,支持脚本文件编写(含源代码)

import java.io.*;import java.util.*;import java.awt.*;import java.awt.event.*;/** * 支持脚本文件的按键控制程序 */public class KeySprite{ public static void main(String[] args){  String filename = "test.t";  try{

【20171210】用java实现简易贪吃蛇

一、各个类之间的关系之前学软件工程不努力,现在徒伤悲啊,不会用visio画类图…大致的类、方法之间的关系就是这样。二、游戏界面三、具体实现:1.游戏窗口要考虑的问题有: a.窗口的名字,大小,位置; b.添加的组件有哪些; c.设置点击关闭窗口之后不仅要关掉窗口还要消除后台进程; 如何看后台进程是否还在运行? 打开任务管理器: //首先对于第一个问题: //便于以后方便修改设置为stat

java中集合的运用,实现一个简单的购物程序

这个程序实现了集合中的数据相加,和集合的增删//泛型封装类 public class Phone { String name=""; int id=0; int price=0; int count = 0; public Phone( int id,String name, int price,int count) { super();

一个java实现的简易编译器

这是一个用java实现的简易的编译器,他能将一个具有加法和乘法的算术表达式编译成类汇编语言,这是我博文对应的代码,具体请参看我的博文: http://blog.csdn.net/tyler_download/article/details/50668983 例如输入 1+2*3+4; end end是必须的,表示输入结束,然后程序输出: t0 = 1 t1 = 2 t2 = 3 t1 *= t2 t0 += t1 t1 = 4 t0 += t1

如何用初级的JavaWeb知识写一个较简单的网站(三)

本人JavaWeb初学者,这是学校一门课程的期末作业,之前已经写了不少了,但是由于一点误操作,导致项目有点崩盘,加上心态不是很好,所以把整个项目全部删除重做,这里记录一下我写整个项目的全过程。 说一件很惊悚的事, 这将会是!一!个!系!列!......

java 简易闹钟

话不多说了,在上篇java播放Mp3基础上做得一个小闹钟,还有点bug,先发布一版bata版吧: import java.text.*; import java.util.*; import java.lang.*; import java.io.BufferedInputStream; import java.io.FileInputStream; import javazoom.jl.p

动手用JAVA做个小游戏--贪吃蛇

期末复习阶段,闲着没事写个游戏玩玩当温习。

【Android】如何用MediaPlayer实现一个简单的音视频播放器

我们在上一篇文章 如何实现一个简单的文件浏览器的基础上,使用MeidaPlayer实现对音视频文件的播放功能。 主要代码如下: Manifest文件<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.

搭建SpringMVC框架,实现简单登陆功能

搭建SpringMVC框架,实现简单登陆功能 阅读本篇文章之前建议先阅读以下前面两篇关于Spring的简单配置,Spring这系列的教程主要是为了让给初学者可以快速的掌握Spring的相关配置,如果希望应用于实际项目,还需要深入学习。 本次教程主要是使用简单配置实现用户登录验证功能。 要求: 1、搭建简单的Spring MVC框架 2、开发登陆功能(登陆成功跳转到欢迎页面,失败给

Java面试如何用Java实现一个回调函数

Java面试如何用Java实现一个回调函数

如何用java写一个简单的记事本。

初步应用swing图形界面,io输入输出,事件监听、响应器,以及类之间的相互关系。 刚刚正式学习java两个月不到,希望和大神们多交流,让彼此不断进步!

使用JMF实现java写自己的视频播放器

JMF这个多媒体开发框架太牛了,简单的几句代码就能实现一个视频播放器的开发,厉害,就是支持的格式少了一些,没关系,这个视频播放器可以播放mpg,avi,fvl等等,想播放其他的请开发自己的插件,下面将代码贴上去      package com.bird.jmf; impor

怎样用Java编写一个简单的计算器

我是自己纯手工用Java编写的计算器 //filename:JiShuan import java.awt.Color; import java.awt.EventQueue; import java.awt.Image; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JTextField;

用Java编写的可以进行加减乘除计算的GUI计算器

用Java编写的GUI图形可视界面的计算器,可以进行简单的加减乘除运算,可以调整计算器的大小

用JAVA编写小游戏连连看

本次软件工程是要让我们辨析

使用JAVA swing实现简单的记事本

本记事本具有查找、新建、保存、另存为、打开、设置字体、设置字体颜色、设置背景颜色、状态栏等功能。 以下是主函数: 以下是实现函数:

协议设计:如何实现一个最简单的通信协议(线程模拟)

*Author : DavidLin *Date : 2014-12-20pm *Email : linpeng1577@163.com or linpeng1577@gmail.com *world : the city of SZ, in China *Ver : 000.000.001 *For :

java 数据库缓存实例

最近工作中接触到了数据库缓存,这里讲解一下公司系统的缓存处理方式。一、自定义缓存注解为了方便区分需要缓存的dao方法,对于需要缓存的方法可以加上自定义的注解来标识。 自定义注解如下:import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.

关于java通信的一个简单聊天系统的实现

1.客户端类 import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import javax.swing.JButton; import javax.swing.JDialog; import

Java简单实现五子棋游戏

package prectice; import java.util.Scanner; public class ts2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[][] pc = new int[4][2]; //1-定义棋盘 + String[]

用java写一个简单计算器

这是一个用java写的简单计算器,十分适用于java初学者。

用JAVA实现一个简单地Http服务器

SimpleHttpServer.java import java.io.FileInputStream; import java.io.IOException; import java.net.InetSocketAddress; import java.net.Socket; import java.nio.ByteBuffer; import java.nio.CharBuffer; im

java编写一个简单记事本

package notepad; import java.awt.Font; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.KeyEv

最简单的音乐播放器,实现播放器基本功能(一)

最简单的音乐播放,实现最基本的功能

JSP | 简易购物车的实现

本程序共包含四部分文件,只包含jsp文件,将java代码嵌入到jsp文件中实现:loginID.jsp、shop.jsp、food.jsp、count.jsp,分别实现的功能是输入ID页面、超链接功能选择页面、购物页面和购物车页面。login.jsp文件代码如下:&amp;lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=GBK&quot; pag...

java实现简单的留言板功能

ava实现简单的留言板功能,主要是为了练习java的面向对象和IO流读取,本项目里主要就是对一个叫留言的txt文件进行读取和写入操作,非常实用,仅仅适合做java期末实训喔

用java实现一个简易扫雷游戏

用java实现了一个简单的扫雷游戏

自己写的JAVA记事本(很简单,对初学者有帮助)

package shengang.book;import java.awt.*;import javax.swing.*;import java.awt.event.*;import java.io.*;import javax.swing.event.*;import java.util.*; //Date neededpublic class NoteBook extends JFrame

JAVA 编写的超级简单的加法器

利用JAVA的swing编写的加法器,适合初学者参考!

立即提问
相关内容推荐