- Java后端 學習路線 筆記匯總表【黑馬程式員】
- JavaWeb黑馬旅游網-學習筆記01【準備作業】
- JavaWeb黑馬旅游網-學習筆記02【注冊功能】
- JavaWeb黑馬旅游網-學習筆記03【登陸和退出功能】
- JavaWeb黑馬旅游網-學習筆記04【BaseServlet抽取】
- JavaWeb黑馬旅游網-學習筆記05【分類資料展示功能】
- JavaWeb黑馬旅游網-學習筆記06【旅游線路分頁展示分頁展示】
- JavaWeb黑馬旅游網-學習筆記07【旅游線路查詢】
- JavaWeb黑馬旅游網-學習筆記08【旅游線路詳情】
- JavaWeb黑馬旅游網-學習筆記09【旅游線路收藏】
- JavaWeb黑馬旅游網-學習筆記10【專案代碼】
目錄
26-分類資料展示功能_分析
27-分類資料展示功能_實作_后臺代碼
CategoryDao.java
CategoryDaoImpl.java
CategoryService.java
CategoryServlet.java
在BaseServlet中封裝了序列化json的方法
28-分類資料展示功能_實作_前臺代碼
29-分類資料展示功能_快取優化_分析
30-分類資料展示功能_快取優化_代碼實作
CategoryServiceImpl.java
26-分類資料展示功能_分析
效果:
分析:
27-分類資料展示功能_實作_后臺代碼
CategoryDao.java
package cn.itcast.travel.dao;
import cn.itcast.travel.domain.Category;
import java.util.List;
public interface CategoryDao {
/**
* 查詢所有
*
* @return
*/
public List<Category> findAll();
}
CategoryDaoImpl.java
package cn.itcast.travel.dao.impl;
import cn.itcast.travel.dao.CategoryDao;
import cn.itcast.travel.domain.Category;
import cn.itcast.travel.util.JDBCUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.List;
public class CategoryDaoImpl implements CategoryDao {
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
@Override
public List<Category> findAll() {
String sql = "select * from tab_category";
return template.query(sql, new BeanPropertyRowMapper<Category>(Category.class));
}
}
CategoryService.java
package cn.itcast.travel.service;
import cn.itcast.travel.domain.Category;
import java.util.List;
public interface CategoryService {
public List<Category> findAll();
}
CategoryServlet.java
package cn.itcast.travel.web.servlet;
import cn.itcast.travel.domain.Category;
import cn.itcast.travel.service.CategoryService;
import cn.itcast.travel.service.impl.CategoryServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@WebServlet("/category/*")
public class CategoryServlet extends BaseServlet {
private CategoryService service = new CategoryServiceImpl();
/**
* 查詢所有
*
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void findAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.呼叫service查詢所有
List<Category> cs = service.findAll();
//2.序列化json回傳
/* ObjectMapper mapper = new ObjectMapper();
response.setContentType("application/json;charset=utf-8");
mapper.writeValue(response.getOutputStream(),cs);*/
writeValue(cs, response);
}
}
在BaseServlet中封裝了序列化json的方法
28-分類資料展示功能_實作_前臺代碼
hader.html加載后,發送ajax請求,請求category/findAll,
29-分類資料展示功能_快取優化_分析
分析發現,分類的資料在每一次頁面加載后 都會重新請求資料庫來加載,對資料庫的壓力比較大,而且分類的資料不會經常產生變化,所以可以使用redis來快取這個資料,
分析:
30-分類資料展示功能_快取優化_代碼實作
期望 資料中存盤的順序 就是 將來展示的順序,使用redis的sortedset,
CategoryServiceImpl.java
package cn.itcast.travel.service.impl;
import cn.itcast.travel.dao.CategoryDao;
import cn.itcast.travel.dao.impl.CategoryDaoImpl;
import cn.itcast.travel.domain.Category;
import cn.itcast.travel.service.CategoryService;
import cn.itcast.travel.util.JedisUtil;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Tuple;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
public class CategoryServiceImpl implements CategoryService {
private CategoryDao categoryDao = new CategoryDaoImpl();
@Override
public List<Category> findAll() {
//1.從redis中查詢
//1.1獲取jedis客戶端
Jedis jedis = JedisUtil.getJedis();
//1.2可使用sortedset排序查詢
//Set<String> categorys = jedis.zrange("category", 0, -1);
//1.3查詢sortedset中的分數(cid)和值(cname)
Set<Tuple> categorys = jedis.zrangeWithScores("category", 0, -1);
List<Category> cs = null;
//2.判斷查詢的集合是否為空
if (categorys == null || categorys.size() == 0) {
System.out.println("從資料庫查詢...");
//3.如果為空,需要從資料庫查詢,在將資料存入redis
//3.1 從資料庫查詢
cs = categoryDao.findAll();
//3.2 將集合資料存盤到redis中的category的key
for (int i = 0; i < cs.size(); i++) {
jedis.zadd("category", cs.get(i).getCid(), cs.get(i).getCname());
}
} else {
System.out.println("從redis中查詢...");
//4.如果不為空,將set的資料存入list
cs = new ArrayList<Category>();
for (Tuple tuple : categorys) {
Category category = new Category();
category.setCname(tuple.getElement());
category.setCid((int) tuple.getScore());
cs.add(category);
}
}
return cs;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/265863.html
標籤:其他
上一篇:在國企加班996..面試拿到offer卻又是外包公司,我該怎么辦?
下一篇:C/C++ 中 main(int argc, char* argv[], char** env) 函式的引數及應用












