package com.yj.dao.impl;

import com.yj.bean.User;
import com.yj.dao.UserDao;

import java.util.List;

/**
 * @author yj
 * @create 2020-08-21 15:04
 */
public class UserDaoImpl extends BaseDao implements UserDao {
    // 根据用户名查询用户信息
    @Override
    public User querybyUsername(String username) {
        // SQL 查询语句，选择 t_user 表中的相关字段
        String sql = "select `id`,`username`,`password`,`email`,`address` from t_user where username = ?";
        // 执行查询并返回单个 User 对象
        return queryForOne(User.class, sql, username);
    }

    // 根据用户名和密码查询用户信息
    @Override
    public User querybyUsernameAndPassword(String username, String password) {
        // SQL 查询语句，通过用户名和密码查找用户
        String sql = "select * from t_user where username = ? and password = ?";
        // 执行查询并返回单个 User 对象
        return queryForOne(User.class, sql, username, password);
    }

    // 保存用户信息
    @Override
    public int saveUser(User user) {
        // SQL 插入语句，向 t_user 表中插入新的用户数据
        String sql = "insert into t_user(`username`,`password`,`email`,`address`) values(?,?,?,?)";
        // 执行更新操作，返回受影响的行数
        return update(sql, user.getUsername(), user.getPassword(), user.getEmail(), user.getAddress());
    }

    // 添加用户信息（功能与 saveUser 相同）
    @Override
    public int addUser(User user) {
        // SQL 插入语句，向 t_user 表中插入新的用户数据
        String sql = "insert into t_user(`username`,`password`,`email`,`address`) values(?,?,?,?)";
        // 执行更新操作，返回受影响的行数
        return update(sql, user.getUsername(), user.getPassword(), user.getEmail(), user.getAddress());
    }

    // 根据用户 ID 删除用户信息
    @Override
    public int deleteUserById(int i) {
        // SQL 删除语句，根据用户 ID 删除对应的记录
        String sql = "delete from t_user where id = ?";
        // 执行更新操作，返回受影响的行数
        return update(sql, i);
    }

    // 更新用户信息
    @Override
    public int updateUser(User user) {
        // SQL 更新语句，根据用户 ID 更新用户的各项信息
        String sql = "update t_user set `username`=?,`password`=?,`email`=?,`address`=? where id=?";
        // 执行更新操作，返回受影响的行数
        return update(sql, user.getUsername(), user.getPassword(), user.getEmail(), user.getAddress(), user.getId());
    }

    @Override
    public User queryUserById(Integer id) {
        // 根据用户ID查询单个用户信息
        String sql = "select * from t_user where id=?";
        return queryForOne(User.class, sql, id);
    }

    @Override
    public List<User> queryUsers() {
        // 查询所有用户信息
        String sql = "select * from t_user";
        return queryForList(User.class, sql);
    }

    @Override
    public Integer queryForPageTotalCount() {
        // 查询用户表中总记录数，以便进行分页
        String sql = "select count(*) from t_user";
        Number count = (Number) queryForSingleValue(sql);
        return count.intValue();
    }

    @Override
    public List<User> queryForPageItems(int begin, int pageSize) {
        // 通过指定的偏移量和页面大小查询特定页的用户信息
        String sql = "select * from t_user limit ?,?";
        return queryForList(User.class, sql, begin, pageSize);
    }

}
