旅游网RouteDaoImpl

10 篇文章 0 订阅
5 篇文章 0 订阅

public class RouteDaoImpl implements RouteDao {

/**
 * 人气旅游:是每个旅游线路收藏数量的降序获取前4条数据进行显示;
 * 最新旅游:是每个旅游线路上架时间的降序获取前4条数据进行显示;
 * 主题旅游:是每个旅游线路过滤为主题旅游的获取前4条数据进行显示(上架时间降序);
 * <p>
 * 前提: 所有被查到的数据,都必须是已上架(rflag=1)
 */

JdbcTemplate jdbcTemplate = new JdbcTemplate(C3P0Util.getDataSource());

@Override
public List<Route> queryLikes() {
    String sql = "select * from tab_route where rflag = 1 order by count desc limit 0 , 4";
    return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Route.class));
}

@Override
public List<Route> queryDate() {
    String sql = "select * from tab_route where rflag = 1 order by rdate desc limit 0, 4";
    return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Route.class));
}

@Override
public List<Route> queryTheme() {
    String sql = "select * from tab_route where rflag = 1 and isThemeTour = 1 order by rdate desc limit 0,4";
    return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Route.class));
}

@Override
public List<Route> queryPage(String word, String cid, int pageOffset, int pageSize) {
    /***
     *
     *通过搜索查询,sql语句需要四个参数
     * 将参数放进数组内,最后再将数组放入jdbc查询方法
     * 将数据库语句用builder语句拆分成各个段落
     * 通过参数判断sql语句的条件是否有添加进去的必要
     *
     */

    StringBuilder sql = new StringBuilder();
    sql.append("select * from tab_route where rflag = 1");


    //创建条件集合,方便添加条件
    List<Object> parameters = new ArrayList<>();
    //判断cid是否发过来,发过来就将其放入sql语句中
    if (cid != null && !cid.equals("")) {
        sql.append(" and cid=?");
        parameters.add(cid);
    }
    //判断word
    if (word != null && !word.equals("")) {
        sql.append(" and rname like ?");
        parameters.add("%" + word + "%");//'%?%',用jdbc不需要单引号
    }

    sql.append(" order by rdate desc limit ?,?");
    parameters.add(pageOffset);
    parameters.add(pageSize);


    //String sql = "select * from tab_route where rflag = 1 and cid = ? order by rdate desc limit ?,?;";
    return jdbcTemplate.query(sql.toString(), new BeanPropertyRowMapper<>(Route.class), parameters.toArray());
}

@Override
public int queryRecordCount(String word, String cid) {

    StringBuilder sql = new StringBuilder();
    sql.append("select count(*) from tab_route where rflag = 1");


    List<Object> parameters = new ArrayList<>();
    //判断cid是否发过来,发过来就将其放入sql语句中
    if (cid != null && !cid.equals("")) {
        sql.append(" and cid=?");
        parameters.add(cid);
    }
    //判断word
    if (word != null && !word.equals("")) {
        sql.append(" and rname like ?");
        parameters.add("%" + word + "%");//'%?%',用jdbc不需要单引号
    }
    //String sql = "select count(*) from tab_route where rflag = 1 and cid = ?;";
    return jdbcTemplate.queryForObject(sql.toString(), int.class, parameters.toArray());
}

@Override
public Route queryById(String rid) {
    String sql = "select * from tab_route where rflag = 1 and rid = ?";
    List<Route> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Route.class), rid);
    if (query.size() == 1) {
        return query.get(0);
    } else {
        return null;
    }
}

@Override
public Favorite queryFavorite(int uid, String rid) {
    String sql = "select * from tab_favorite where uid = ? and rid = ?";
    List<Favorite> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Favorite.class), uid, rid);
    if (query.size() == 1) {
        return query.get(0);
    } else {
        return null;
    }
}

@Override
public int favorite(int uid, String rid) {
    //因为要操作两张表,所以要用到事务

    //返回值
    int result = 0;

    TransactionSynchronizationManager.initSynchronization();

    try {
        Connection connection = C3P0Util.getConnection();
        connection.setAutoCommit(false);

        String sql = "update tab_route set count=count+1 where rid = ?";
        int update = jdbcTemplate.update(sql, rid);
        result+=update;

        sql = "insert into tab_favorite(`uid`, `rid`, `date`) values (?, ?, ?)";
        int update1 = jdbcTemplate.update(sql, uid, rid, new Date());
        result+=update1;

        connection.commit();
    } catch (Exception e) {
        e.printStackTrace();
    }

    return result;


}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值