案例:用户信息列表展示

一、需求设计分析


     1.需求:用户信息的增删改查操作
     2.设计:
           1.技术选型:Servlet+JSP+MySQL+JDBCTemplate+Duird+BeanUtils+tomcat   

       注:Servlet擅长于流程控制和事务处理,所以用于我们控制用户数据在服务器端的增删改查操作。
              JSP擅长于动态页面的编写,所以我们使用它编写页面中的一些动态按钮和显示形式。
              MySQL数据库则用于存储用户数据信息。
              JDBCTemplate则是spring架构中为我们提供的一个对象,用于搭建该案例的一个三层架构(界面层、业务逻辑层、数据访问层)。
              Durid是阿里巴巴的一个数据库连接池,我们可以使用durid配置文件将数据库和我们编码使用的软件连接起来。
              BeanUtils也是spring中的一个工具类,我们可以使用它来进行简化封装数据。
         

           2.数据库设计:
                 create database day17;  --创建数据库              
                 use day17;                      --使用数据库
                 create table user(              --创建表
                        id   int  primary  key  auto_increment,        注:数据库的元素类型根据用户的信息类型进行添加和修改。
                        name  varchar(20)  no null,
                        gender  varchar(5),
                        age  int,
                        address  varchar(32),
                        qq  varchar(20),
                        email  varchar(50)
                 );

 
    3.开发:
          1.环境搭建
                1.创建数据库环境
                2.创建项目,导入需要的jar包

 

注:根据分析,我们可以先把项目包和类创建好。

           其中dao包下有UserDao接口和其实现类UserDaoImpl,用于封装和实现对于数据库的操作代码。

package dao;

import domain.User;

import java.util.List;
import java.util.Map;

/*
用户操作的DAO
 */
public interface UserDao {
    public List<User> findAll();

    User findUserByUsernameAndPassword(String username, String password);

    void add(User user);

    void delete(int i);

    User findById(int parseInt);

    void update(User user);
    //查询总记录数
    int findTotalCount(Map<String, String[]> condition);
    //分页查询每页记录
    List<User> findByPage(int start, int rows, Map<String, String[]> condition);
}
package dao.impl;
import dao.UserDao;
import domain.User;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import util.JDBCUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class UserDaoImpl implements UserDao {
    private JdbcTemplate template=new JdbcTemplate(JDBCUtils.getDataSource());

    @Override
    public List<User> findAll() {
        //使用JDBC操作数据库
        //1.定义sql
        String sql="select * from user";
        List<User> users = template.query(sql, new BeanPropertyRowMapper<User>(User.class));
        return users;
    }

    public User findUserByUsernameAndPassword(String username,String password){
        try {
            String sql="SELECT * FROM `user` WHERE username = ? AND `password` = ? ;";
            User user=template.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class),username,password);
            return user;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    @Override
    public void add(User user) {
        //1.定义sql
        String sql="insert into user values(null,?,?,?,?,?,?,null,null)";
        //2.执行sql
        template.update(sql,user.getName(),user.getGender(),user.getAge(),user.getAddress(),user.getQq(),user.getEmail());
    }

    @Override
    public void delete(int id) {
        //1.定义sql
        String sql="delete from user where id = ? ";
        //2.执行sql
        template.update(sql,id);
    }

    @Override
    public User findById(int id) {
        String sql="select * from user where id = ? ";
        return template.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class),id);
    }

    @Override
    public void update(User user) {
        String sql="update user set name = ? ,gender = ? ,age = ? ,address = ? ,qq = ? ,email = ? where id = ? ";
        template.update(sql,user.getName(),user.getGender(),user.getAge(),user.getAddress(),user.getQq(),user.getEmail(),user.getId());
    }

    @Override
    public int findTotalCount(Map<String, String[]> condition) {
        //1.定义模板初始化sql
        String sql="select count(*) from user where 1 = 1 ";
        StringBuilder sb = new StringBuilder(sql);
        //2.遍历map
        Set<String> keySet = condition.keySet();
        //定义参数的集合
        List<Object> params = new ArrayList<>();
        for (String key:keySet) {
            //排除分页条件参数
            if("currentPage".equals(key)||"rows".equals(key)){
                continue;
            }
            //获取value
            String value = condition.get(key)[0];
            //判断value是否有值
            if(value !=null&& !"".equals(value)){
                //有值
                sb.append(" and "+key+" like ? ");
                params.add("%"+value+"%");//?条件的值
            }
        }

        return template.queryForObject(sb.toString(),Integer.class,params.toArray());
    }

    @Override
    public List<User> findByPage(int start, int rows, Map<String, String[]> condition) {
        String sql="select * from user where 1 = 1 ";
        StringBuilder sb = new StringBuilder(sql);
        //2.遍历map
        Set<String> keySet = condition.keySet();
        //定义参数的集合
        List<Object> params = new ArrayList<>();
        for (String key:keySet) {
            //排除分页条件参数
            if("currentPage".equals(key)||"rows".equals(key)){
                continue;
            }
            //获取value
            String value = condition.get(key)[0];
            //判断value是否有值
            if(value !=null&& !"".equals(value)){
                //有值
                sb.append(" and "+key+" like ? ");
                params.add("%"+value+"%");//?条件的值
            }
        }

        //添加分页的查询
        sb.append("limit ?,?");
        //添加分页查询参数值
        params.add(start);
        params.add(rows);

        sql=sb.toString();
        return template.query(sql,new BeanPropertyRowMapper<User>(User.class),params.toArray());
    }
}

  domain中的User类用于声明用户的属性和获取修改方法,PageBean类则用于声明后面分页显示数据功能中总页面数,当前页面数等属性。

package domain;
public class User {
    private int id;
    private String name;
    private String gender;
    private int age;
    private String address;
    private String qq;
    private String email;

    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getQq() {
        return qq;
    }

    public void setQq(String qq) {
        this.qq = qq;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                ", qq='" + qq + '\'' +
                ", email='" + email + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
package domain;
import java.util.List;
/*
分页对象
 */
public class PageBean<T> {
    private int totalCount;//总记录数
    private int totalPage;//总页码
    private List<T> list;//每页的数据
    private int currentPage;//当前页码
    private int rows;//每页显示的记录数

    public int getTotalCount() {
        return totalCount;
    }

    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }

    public int getTotalPage() {
        return totalPage;
    }

    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }

    public List<T> getList() {
        return list;
    }

    public void setList(List<T> list) {
        this.list = list;
    }

    public int getCurrentPage() {
        return currentPage;
    }

    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }

    public int getRows() {
        return rows;
    }

    public void setRows(int rows) {
        this.rows = rows;
    }

    @Override
    public String toString() {
        return "PageBean{" +
                "totalCount=" + totalCount +
                ", totalPage=" + totalPage +
                ", list=" + list +
                ", currentPage=" + currentPage +
                ", rows=" + rows +
                '}';
    }
}

         service中的接口和实现类用于封装用户增删查改的方法,并dao包下的实现类方法连接使用达到效果。

package service;

import domain.PageBean;
import domain.User;

import java.util.List;
import java.util.Map;

/*
用户管理的业务接口
 */
public interface UserService {
    //查询所有用户信息
    public List<User> findAll();
    //登录方法
    User login(User user);
    //保存User
    void addUser(User user);
    //根据id删除user
    void deleteUser(String id);
    //根据id查询
    User findUserById(String id);
    //修改用户信息
    void updateUser(User user);
    //删除选中用户
    void delSelectedUser(String[] ids);
    //分页条件查询
    PageBean<User> findUserByPage(String currentPage, String rows, Map<String, String[]> condition);
}
package service.impl;
import dao.UserDao;
import dao.impl.UserDaoImpl;
import domain.PageBean;
import domain.User;
import service.UserService;

import java.util.List;
import java.util.Map;
public class UserServiceImpl implements UserService {
    private UserDao dao=new UserDaoImpl();
    @Override
    public List<User> findAll(){
        //调用Dao完成查询
        return dao.findAll();
    }

    @Override
    public User login(User user){
        return dao.findUserByUsernameAndPassword(user.getUsername(),user.getPassword());
    }

    @Override
    public void addUser(User user) {
        dao.add(user);
    }

    @Override
    public void deleteUser(String id) {
        dao.delete(Integer.parseInt(id));
    }

    @Override
    public User findUserById(String id) {
        return dao.findById(Integer.parseInt(id));
    }

    @Override
    public void updateUser(User user) {
        dao.update(user);
    }

    @Override
    public void delSelectedUser(String[] ids) {
        if(ids !=null&&ids.length>0){
            //1.遍历数组
            for (String id :ids) {
                //2.调用dao删除
                dao.delete(Integer.parseInt(id));
            }
        }
    }

    @Override
    public PageBean<User> findUserByPage(String _currentPage, String _rows, Map<String, String[]> condition) {
        int currentPage=Integer.parseInt(_currentPage);
        int rows=Integer.parseInt(_rows);
        if(currentPage<=0){
            c
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值