文章目录
- 一、旅游线路收藏
-
-
- 1.分析
- 2.后台代表编写
- 3.前台代码的编写
- 4.执行结果
-
- 二、收藏次数的动态展示
- 三、完成点击收藏的功能
-
-
- 1.分析
- 2.后台代码的编写
- 3.前台代码的编写
- 4.运行结果
-
一、旅游线路收藏
1.分析

用户表里面有uid,线路表里面有rid,现在有一张收藏表里面有(uid,date,rid)代表那一条线路在那一天被哪一个用户收藏
2.后台代表编写
routeServlet中添加isFavorite方法
@WebServlet("/route/*")
public class RouteServlet extends BaseServlet {
private RouteService routeService = new RouteServiceImpl();
private FavoriteService favoriteService = new FavoriteServiceImpl();
public void isFavorite(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 获取线路id
String rid = request.getParameter("rid");
//2. 获取当前登录的用户 user
User user = (User) request.getSession().getAttribute("user");
int uid;//用户id
if(user == null){
//用户尚未登录
uid = 0;
}else{
//用户已经登录
uid = user.getUid();
}
//3. 调用FavoriteService查询是否收藏
boolean flag = favoriteService.isFavorite(rid, uid);
//4. 写回客户端
writeValue(flag,response);
}
}
favorite类
public class Favorite implements Serializable {
private Route route;//旅游线路对象
private String date;//收藏时间
private User user;//所属用户
public Favorite() {
}
public Favorite(Route route, String date, User user) {
this.route = route;
this.date = date;
this.user = user;
}
public Route getRoute() {
return route;
}
public void setRoute(Route route) {
this.route = route;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
FavoriteService
public interface FavoriteService {
public boolean isFavorite(String rid, int uid);
}
public class FavoriteServiceImpl implements FavoriteService {
private FavoriteDao favoriteDao = new FavoriteDaoImpl();
@Override
public boolean isFavorite(String rid, int uid) {
Favorite favorite = favoriteDao.findByRidAndUid(Integer.parseInt(rid), uid);
return favorite != null;//如果对象有值,则为true,反之,则为false
}
}
FavoriteDao
public interface FavoriteDao {
public Favorite findByRidAndUid(int rid, int uid);
}
public class FavoriteDaoImpl implements FavoriteDao {
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
@Override
public Favorite findByRidAndUid(int rid, int uid) {
Favorite favorite = null;
try {
String sql = " select * from tab_favorite where rid = ? and uid = ?";
favorite = template.queryForObject(sql, new BeanPropertyRowMapper<Favorite>(Favorite.class), rid, uid);
} catch (DataAccessException e) {
e.printStackTrace();
}
return favorite;
}
}
3.前台代码的编写
route_detail.html
$(function () {
// 发送请求,判断用户是否收藏过该线路
var rid = getParameter("rid");//获取rid
$.get("route/isFavorite",{rid:rid},function (flag) {
if(flag){
// 用户已经收藏过,添加<a class="btn already" disabled="disabled">的样式
//设置收藏按钮的样式
$("#favorite").addClass("already");
$("#favorite").attr("disabled","disabled");
//删除按钮的点击事件(这个收藏按钮就不能再被点击了)
$("#favorite").removeAttr("onclick");
}else{
// 用户没有收藏,什么也不做,用默认样式
}
});
});
4.执行结果
二、收藏次数的动态展示
改写routeServiceImpl
前期学过,routeServiceImpl里面有一个findOne()方法就是查询一条线路的详情(图片信息,商家信息),而一条线路的收藏次数也属于一条线路的详细信息,所以要把它封装到findOne()方法里
改写favoriteDao
在favoriteDao中添加findCountByRid()方法
public interface FavoriteDao {
/**
* 根据rid 查询收藏次数
* @param rid
* @return
*/
public int findCountByRid(int rid);
}
public class FavoriteDaoImpl implements FavoriteDao {
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
@Override
public int findCountByRid(int rid) {
String sql = "SELECT COUNT(*) FROM tab_favorite WHERE rid = ?";
return template.queryForObject(sql,Integer.class,rid);
}
}
前端代码添加收藏次数
三、完成点击收藏的功能
1.分析
2.后台代码的编写
在routeServlet中添加addFavorite()方法
@WebServlet("/route/*")
public class RouteServlet extends BaseServlet {
private RouteService routeService = new RouteServiceImpl();
private FavoriteService favoriteService = new FavoriteServiceImpl();
public void addFavorite(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 获取线路rid
String rid = request.getParameter("rid");
//2. 获取当前登录的用户
User user = (User) request.getSession().getAttribute("user");
int uid;//用户id
if(user == null){
//用户尚未登录
return ;
}else{
//用户已经登录
uid = user.getUid();
}
//3. 调用service添加
favoriteService.add(rid,uid);
}
}
FavoriteService中添加add()方法
public interface FavoriteService {
void add(String rid, int uid);
}
public class FavoriteServiceImpl implements FavoriteService {
private FavoriteDao favoriteDao = new FavoriteDaoImpl();
@Override
public void add(String rid, int uid) {
favoriteDao.add(Integer.parseInt(rid),uid);
}
}
FavoriteDao中添加add()方法
public interface FavoriteDao {
void add(int i, int uid);
}
public class FavoriteDaoImpl implements FavoriteDao {
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
@Override
public void add(int rid, int uid) {
String sql = "insert into tab_favorite values(?,?,?)";
template.update(sql,rid,new Date(),uid);
}
}
3.前台代码的编写
route_detail.html
//点击收藏按钮触发的方法
function addFavorite(){
var rid = getParameter("rid");//获取rid
//1. 判断用户是否登录
$.get("user/findOne",{},function (user) {
if(user){
//用户登录了
//发送Ajax请求,完成添加收藏的功能
$.get("route/addFavorite",{rid:rid},function () {
location.reload();//代码刷新页面
});
}else{
//用户没有登录
alert("您尚未登录,请登录");
location.href="http://localhost/travel/login.html";//跳转到登录页码
}
})
}
4.运行结果
感谢浏览和收藏