基于SSM的用户信息管理系统的增删查、登录功能及分页的实现

SSM的增删改功能实现

controller层

   @RequestMapping("/updUserById.do")
    public String updUserById(UserInfo userInfo){
        userInfoService.updUserById(userInfo);
        return "redirect:findAll.do";
    }
@RequestMapping("/addUser.do")
    public String addUser(UserInfo userInfo){
        userInfoService.addUser(userInfo);
        return "redirect:findAll.do";
}
@RequestMapping("/delUser")
public String delUser(int id) {
    userInfoService.delUser(id);
    return "redirect:findAll.do";
}

DAO层

    //更新前的查询
    UserInfo findUserById(int id);
    //update
    void updUserById(UserInfo userInfo);

    //add;id,username,password
    void addUser(UserInfo userInfo);
    //delete
    void delUser(int id);
    List<UserInfo> findUserByName(String username);
    //login
    UserInfo doLogin(String username);

Servie接口层

 //更新前的查询
    UserInfo findUserById(int id);

    //update
    void updUserById(UserInfo userInfo);

    //add;id,username,password
    void addUser(UserInfo userInfo);

    void delUser(int id);
    //模糊查询
    List<UserInfo> findUserByName(String username,int page,int size);

Service实现层


    @Override
    public UserInfo findUserById(int id) {
        return userDao.findUserById(id);
    }

    @Override
    public void updUserById(UserInfo userInfo) {
        userDao.updUserById(userInfo);
    }

    @Override
    public void addUser(UserInfo userInfo) {

        userDao.addUser(userInfo);
    }

    @Override
    public void delUser(int id) {
        userDao.delUser(id);

    }

    @Override
    public List<UserInfo> findUserByName(String username,int page,int size) {
        return userDao.findUserByName(username);
    }

SQL语句的实现

 <select id="findUserById" parameterType="java.lang.Integer" resultType="com.zhongruan.bean.UserInfo">
            select * from tb_user where  id=#{id}
    </select>

    <update id="updUserById" parameterType="com.zhongruan.bean.UserInfo">
        update tb_user set username={#username},password={#password} where  id=#{id}
    </update>

    <insert id="addUser" parameterType="com.zhongruan.bean.UserInfo">
        insert into tb_user(id,username,password) values (#{id},#{username},#{password})
    </insert>

    <delete id="delUser" parameterType="java.lang.Integer">
        delete from tb_user where id=#{id}
    </delete>

    <select id="findUserByName" parameterType="java.lang.String" resultType="com.zhongruan.bean.UserInfo">
        select * from tb_user where username like '%' #{username} '%'
    </select>

登录功能的实现

Controller层

//login
    @RequestMapping("/doLogin.do")
    public String doLogin(String username, String password, HttpSession session){
        UserInfo userInfo=userInfoService.doLogin(username);
        if (userInfo !=null){
            if (userInfo.getPassword().equals(password)){
                System.out.println("登录成功");
                session.setAttribute("userInfo",userInfo);
                return "main";

            }else{
                System.out.println("密码错误,请重新登录!");
                session.setAttribute("message","密码错误,请重新输入!");
                return  "../login";
            }
        }else {
            System.out.println("用户不存在,请重新输入!");
            session.setAttribute("message","用户不存在,请重新输入!");
            return  "../login";
        }
    }
}

DAO层

 //login
    UserInfo doLogin(String username);

Service接口层

 UserInfo doLogin(String username);、

Service实现层

 @Override
    public UserInfo doLogin(String username) {
        return userDao.doLogin(username);
    }
}

SQL语句

 <select id="doLogin" resultType="com.zhongruan.bean.UserInfo" parameterType="java.lang.String">
        select * from tb_user where username=#{username}
    </select>

分页管理的实现

Controller层

@RequestMapping("/user")
public class UserInfoController {

    @Autowired
    private UserInfoService userInfoService;
    @RequestMapping("/findAll.do")
    public ModelAndView findAll(@RequestParam(defaultValue="1") int page, @RequestParam(defaultValue = "5") int size){
        List<UserInfo> userInfoList=userInfoService.findAll(page,size);
//把得到的结果集 给到pagehelper中得到内置对象PageInfo中
        PageInfo pageInfo=new PageInfo(userInfoList);
        ModelAndView mv = new ModelAndView();
        mv.addObject("pageInfo",pageInfo);
        mv.setViewName("user-list");
        return mv;
    }

DAO层

//全部查询
    List<UserInfo> findAll();

Service接口层

 //全部查询
    List<UserInfo> findAll(int page,int size);

Service实现层

    @Override
    public List<UserInfo> findAll(int page, int size) {
        //开启分页信息
        PageHelper.startPage(page,size);
        return userDao.findAll();
    }

课后问题

  1. 请求转发forward 和 重定向redirect的区别
    转发是服务器行为,重定向是客户端行为。
    转发过程:客户浏览器发送http请求——》web服务器接受此请求——》调用内部的一个方法在容器内部完成请求处理和转发动作——》将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。
    重定向过程:客户浏览器发送http请求——》web服务器接受后发送302状态码响应及对应新的location给客户浏览器——》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址——》服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

  2. get和post的优缺点


    在这里插入图片描述
  3. PageHelper的参数

    //当前页
    private int pageNum;
    //每页的数量
    private int pageSize;
    //当前页的数量
    private int size;
    //由于startRow和endRow不常用,这里说个具体的用法
    //可以在页面中"显示startRow到endRow 共size条数据"
    //当前页面第一个元素在数据库中的行号
    private int startRow;
    //当前页面最后一个元素在数据库中的行号
    private int endRow;
    //总记录数
    private long total;
    //总页数
    private int pages;
    //结果集
    private List list;

    //第一页
    private int firstPage;
    //前一页
    private int prePage;

    //是否为第一页
    private boolean isFirstPage = false;
    //是否为最后一页
    private boolean isLastPage = false;
    //是否有前一页
    private boolean hasPreviousPage = false;
    //是否有下一页
    private boolean hasNextPage = false;
    //导航页码数
    private int navigatePages;
    //所有导航页号
    private int[] navigatepageNums;
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容

  • 数据存储和消息队列 SSM/Servlet 1. Servlet的生命周期 Servlet的产生到消亡过程中,分为...
    熊先森_5094阅读 2,109评论 0 2
  • SpringMVC 一、SpringMVC概述 1. 三层架构 服务器端开发程序主要由两种形式构成。一种是基于客户...
    青丶空阅读 380评论 0 1
  • 标签:sso iplas 一、SSO(单点登录)介绍 SSO英文全称Single SignOn,单点登录。SSO是...
    傑仔阅读 15,618评论 2 35
  • 一、Spring面试题 1、Spring 在ssm中起什么作用? Spring:轻量级框架 作用:Bean工厂,用...
    coder_girl阅读 337评论 0 5
  • 1.工具:IDEA,要用到的包,mysql数据库 1.2数据库 1.3.准备连接数据库的封装方法 package ...
    静静_6b03阅读 269评论 0 0