宁波实习日志day5

SSS项目实现登录、增删查和分页

由于day4中已经实现了框架的搭建和修改,所以今天主要实现了增删查和分页

1.登录

1.mapper.xml(用于写SQL语句)

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

2.dao层(数据库交互)

    //登录
    UserInfo doLogin(String username);

3.service层(处于controller和dao层之间,负责业务模块的逻辑应用设计)
UserInfoService.java

    //登录
    UserInfo doLogin(String username);

UserInfoServiceImpl.java

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

4.controller层(页面交互的逻辑处理)

    @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";
        }
    }

2.增删查

1.mapper.xml(用于写SQL语句)

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

    <!--   更新用户   -->
    <update id="updateUser" parameterType = "com.zhongruan.bean.UserInfo">
        update tb_user set username=#{username},password=#{password} where id=#{id}
    </update>

    <!--   删除用户   -->
    <delete id="deleteUser" parameterType="Integer">
        delete from tb_user where id=#{id}
    </delete>

    <!--  更新前查询 通过id找User  -->
    <select id="findUserById" parameterType="Integer" resultType = "com.zhongruan.bean.UserInfo">
        select * from tb_user where id=#{id}
    </select>

    <!--   模糊查询   -->
    <select id="findUserByName" parameterType="String" resultType="com.zhongruan.bean.UserInfo">
        select * from tb_user where username like '%' #{username} '%'
    </select>

2.dao层(数据库交互)

    //删除
    void deleteUser(int id);

    //增加
    void addUser(UserInfo userInfo);

    //模糊查询
    List<UserInfo> findUserByName(String username);

3.service层(处于controller和dao层之间,负责业务模块的逻辑应用设计)
UserInfoService.java

    //删除
    void deleteUser(int id);

    //增加
    void addUser(UserInfo userInfo);

    //模糊查询
    List<UserInfo> findUserByName(String username);

UserInfoServiceImpl.java

    @Override
    public void deleteUser(int id){
        userdao.deleteUser(id);
    }

    @Override
    public void addUser(UserInfo userInfo){
        userdao.addUser(userInfo);
    }

    @Override
    public List<UserInfo> findUserByName(String username){
        return userdao.findUserByName(username);
    }

4.controller层(页面交互的逻辑处理)

    @RequestMapping("/deleteUser.do")
    public String deleteUser(int id){
        userInfoService.deleteUser(id);
        return "redirect:/user/findAll.do";
    }

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

    @RequestMapping("/findUserByName.do")
    public ModelAndView findUserByName(String username){
        List<UserInfo> userInfoList = userInfoService.findUserByName(username);
        ModelAndView mv = new ModelAndView();
        mv.addObject("userInfoList ",userInfoList );
        mv.setViewName("user-list");
        return mv;
    }

3.分页

1.在pom.xml文件中导入pagehelper的包

<dependency>
   <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.1.2</version>
</dependency>

2.在applicationContext.xml文件中为sqlsessionfactroy加入以下配置。为下面的plugins的property

    <!-- 3.配置SqlSessionFactory对象 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 注入数据库连接池 -->
        <property name="dataSource" ref="dataSource"/>
        <!-- 扫描bean包 使用别名 -->
        <property name="typeAliasesPackage" value="com.suelta.bean"></property>

        <!--配置加载映射文件 UserMapper.xml-->
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>

        <property name="plugins">
            <array>
                <bean class="com.github.pagehelper.PageInterceptor">
                    <property name="properties">
                        <props>
                            <!--设置用的哪个数据库-->
                            <prop key="helperDialect">mysql</prop>
                            <!--设置默认为可以处理页面异常-->
                            <prop key="reasonable">true</prop>
                        </props>
                    </property>
                </bean>
            </array>
        </property>
    </bean>

3.在使用pagehelper进行分页之前,我们看看pagehelper的相关属性。这里主要关注size,pageNum,pages,list这几个参数

    	//当前页  
        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<T> 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;  

4.这一过程我们分三步,因为我们是通过前台传递的参数来确定是哪一页分页和每一页所展示的数据量。所以,(1)我们在Controller层使用page和size来接收前端传来的数据。Controller层调用service层,故将值往下传,(2)并在service层所调用的函数中,加入PageHelper.startPage(page,size);即可。(3)最后通过在Controller层使用PageInfo,对其初始化,并传给ModelAndView中即可
Controller层

//分页查询全部user
    @RequestMapping("/findAll.do")
    public ModelAndView findAll(@RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "5") int size){
        List<UserInfo> userInfoList = userInfoService.findAll(page,size);

        PageInfo pageInfo = new PageInfo(userInfoList);

        ModelAndView mv = new ModelAndView();
        mv.addObject("pageInfo",pageInfo);
        mv.setViewName("user-list");
        return mv;
    }

service层

    @Override
    public List<UserInfo> findAll(int page, int size){
        PageHelper.startPage(page,size);//开始使用分页
        return userdao.findAllUser();
    }

5.下面为前端的页面代码。通过${pageContext.request.contextPath}/user/findAll.do?page=1&size=5来实现传值。
pageInfo.pages代表总页数;
pageInfo.pageNum代表当前页码;

<li><a href="${pageContext.request.contextPath}/user/findAll.do?page=1&size=5" aria-label="Previous">首页</a></li>
<li><a href="${pageContext.request.contextPath}/user/findAll.do?page=${pageInfo.pageNum-1}&size=5">上一页</a></li>
<c:forEach begin="1" end="${pageInfo.pages}" var="pagenum">
   <li><a href="${pageContext.request.contextPath}/user/findAll.do?page=${pagenum}&size=5">${pagenum}</a> </li>
</c:forEach>
<li><a href="${pageContext.request.contextPath}/user/findAll.do?page=${pageInfo.pageNum+1}&size=5">下一页</a></li>
<li><a href="${pageContext.request.contextPath}/user/findAll.do?page=${pageInfo.pages}&size=5" aria-label="Next">尾页</a></li>

注意:模糊查询的显示是使用findAll这个函数对应的jsp进行显示的,当使用分页后,findAll进行了修改,所以查询模块需要进行相应的修改

dao层

    //模糊查询
    List<UserInfo> findUserByName(String username);

service层

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

controller层

    @RequestMapping("/findUserByName.do")
    public ModelAndView findUserByName(@RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "5") int size,String username){
        List<UserInfo> userInfoList = userInfoService.findUserByName(page,size,username);

        PageInfo pageInfo = new PageInfo(userInfoList);

        ModelAndView mv = new ModelAndView();
        mv.addObject("pageInfo",pageInfo);
        mv.setViewName("user-list");
        return mv;
    }

效果图

登录界面
在这里插入图片描述
登录成功
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
查询
在这里插入图片描述
分页
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园悬赏任务平台对字典管理、论坛管理、任务资讯任务资讯公告管理、接取用户管理、任务管理、任务咨询管理、任务收藏管理、任务评价管理、任务订单管理、发布用户管理、管理员管理等进行集中化处理。经过前面自己查阅的网络知识,加上自己在学校课堂上学习的知识,决定开发系统选择小程序模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问,采用的主流的Java语言这种面向对象的语言进行校园悬赏任务平台程序的开发,在数据库的选择上面,选择功能强大的Mysql数据库进行数据的存放操作。校园悬赏任务平台的开发让用户查看任务信息变得容易,让管理员高效管理任务信息。 校园悬赏任务平台具有管理员角色,用户角色,这几个操作权限。 校园悬赏任务平台针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理任务信息,管理任务资讯公告信息等内容。 校园悬赏任务平台针对用户设置的功能有:查看并修改个人信息,查看任务信息,查看任务资讯公告信息等内容。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。项目管理页面提供的功能操作有:查看任务,删除任务操作,新增任务操作,修改任务操作。任务资讯公告信息管理页面提供的功能操作有:新增任务资讯公告,修改任务资讯公告,删除任务资讯公告操作。任务资讯公告类型管理页面显示所有任务资讯公告类型,在此页面既可以让管理员添加新的任务资讯公告信息类型,也能对已有的任务资讯公告类型信息执行编辑更新,失效的任务资讯公告类型信息也能让管理员快速删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值