从一开始的增删改查以及分页插件pageHelper的使用

关于用户的增删改查以及登陆的操作这件事:

上一篇:构建Maven项目的创建

这一篇主要写关于用户的在增删改查以及登陆的操作。

一:构建好实体类:

package com.zhongruan.bean;

public class UserInfo {
    private int id;
    private String username;
    private String password;

    public int getId() {
        return id;
    }

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

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

    @Override
    public String toString() {
        return "UserInfo{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

实体类中定义了id,用户名以及登录密码

二:编写Dao层:

根据需求,我们需要写登录,增加用户,删除用户,修改用户,查询用户的操作,所以先在Dao层中写下这些方法:

IUserInfoDao层:

package com.zhongruan.dao;

import com.zhongruan.bean.UserInfo;

import java.util.List;

public interface IUserInfoDao {
    // 登陆
    UserInfo doLogin(String username);

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

    // 增加操作
    void addUser(UserInfo userInfo);

    // 删除, 根据主键ID
    void delUserById(int id);

    // 修改前的查询
    UserInfo updSelUserInfoById(int id);

    // 修改
    void updUserInfo(UserInfo userInfo);
}

因为要修改用户,必须先查询到该用户,才能进行修改操作,所以还应该写一个司改前的查询操作。

二:编写Service层:

在这一层中需要创建2个文件,一个是service接口类,一个是对应的实现类,根据dao层中的方法,将这些方法写入service接口处。

IUserInfoService接口类:

package com.zhongruan.service;

import com.zhongruan.bean.UserInfo;

import java.util.List;

public interface IUserInfoService {

    UserInfo doLogin(String username);
    
    List<UserInfo> findAll();
    
    void addUser(UserInfo userInfo);

    void delUserById(int id);

    UserInfo updSelUserInfoById(int id);

    void updUserInfo(UserInfo userInfo);
}

根据接口类写出相应的实现类:

UserInfoServiceImpl实现类:

package com.zhongruan.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zhongruan.bean.UserInfo;
import com.zhongruan.dao.IUserInfoDao;
import com.zhongruan.service.IUserInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserInfoServiceImpl implements IUserInfoService {

    @Autowired
    private IUserInfoDao userInfoDao;


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

    // 查询
    @Override
    public List<UserInfo> findAll() {
        return userInfoDao.findAll();
    }

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

    @Override
    public void delUserById(int id) {
        userInfoDao.delUserById(id);
    }

    @Override
    public UserInfo updSelUserInfoById(int id) {
        return userInfoDao.updSelUserInfoById(id);
    }

    @Override
    public void updUserInfo(UserInfo userInfo) {
        userInfoDao.updUserInfo(userInfo);
    }
}

编写完Service层,接下来去实现这些方法。

三:编写Controller层:

在Controller层中编写具体实现方法的操作,根据Service层中的方法来写具体实现方法的操作。

1、登陆操作:

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

编写登陆操作时,需要对对应的jsp页面进行修改,并且在对相应的mapper文件中增加sql语句。

对应的sql语句

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

2、增加用户:

@RequestMapping("/addUser.do")
    public String addUser(UserInfo userInfo){
        // 调用 service,得到结果。
        userInfoService.addUser(userInfo);
        // 增加成功,返回重新查询
        return "redirect:findAll.do";
    }

编写完增加操作需要去mapper文件下进行相对应的增加sql语句

对应的sql语句:

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

3、删除操作:

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

同样去mapper文件下增加相对应的sql语句

对应的sql语句

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

4、修改操作

前文中说了,进行修改操作应该先进行查询操作。
以下为查询操作的代码(默认通过id查询):
// 修改前的查询
@RequestMapping("/updSelUserById.do")
public ModelAndView updSelUserInfoById(int id){
UserInfo userInfo = userInfoService.updSelUserInfoById(id);

    ModelAndView mv = new ModelAndView();
    mv.addObject("userInfo",userInfo);
    mv.setViewName("user-update");

    return mv;
}
以下为修改操作的代码:
    // 修改
    @RequestMapping("/updUserInfo.do")
    public String updUserInfo(UserInfo userInfo){

        userInfoService.updUserInfo(userInfo);
        System.out.println("修改成功");

        return "redirect:findAll.do";
    }

同理,去mapper文件下增加sql语句:
以下为查询操作的代码(默认通过id查询):

对应的sql语句

    <!--  修改前的查询  -->
    <select id="updSelUserInfoById" parameterType="Integer" resultType="com.zhongruan.bean.UserInfo">
        select * from tb_user where id=#{id}
    </select>

以下为修改操作的代码:

对应的sql语句

    <!--  修改   -->
    <update id="updUserInfo" parameterType="com.zhongruan.bean.UserInfo">
        update tb_user set username=#{username}, password=#{password} where id=#{id}
    </update>

5、查询操作:

查询分为2种查询,按id查询,全部查询,因为按id查询与修改前查询相同,这边列出全部查询:

    //  全部查询
    // 所有需要返回数据到页面显示的全部都需要封装到ModelAndVIew中
    @RequestMapping("/findAll.do")
    public ModelAndView findAll(@RequestParam(){
        // 调用service中的方法,得到查询结果
        List<UserInfo> userInfoList = userInfoService.findAll(page,size);
        ModelAndView mv = new ModelAndView();
        mv.addObject("pageInfo",pageInfo);
        mv.setViewName("user-list");
        return mv;
    }

同样去mapper文件下增加sql语句:

对应的sql语句

//查询全部
<select id="findAll" resultType="com.zhongruan.bean.UserInfo">
    select * from tb_user
</select>

至此增删改查以及登陆全都完成,以下为完整的controller代码:

package com.zhongruan.controller;

import com.github.pagehelper.PageInfo;
import com.zhongruan.bean.UserInfo;
import com.zhongruan.service.IUserInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.List;

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

    @Autowired
    private IUserInfoService userInfoService;

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


    //  全部查询
    @RequestMapping("/findAll.do")
    public ModelAndView findAll(){
        // 调用service中的方法,得到查询结果
        List<UserInfo> userInfoList = userInfoService.findAll(page,size){
        ModelAndView mv = new ModelAndView();
        mv.addObject("pageInfo",pageInfo);
        mv.setViewName("user-list");
        return mv;
    }
    // 增加
    @RequestMapping("/addUser.do")
    public String addUser(UserInfo userInfo){
        // 调用 service,得到结果。
        userInfoService.addUser(userInfo);
        // 增加成功,返回重新查询
        return "redirect:findAll.do";
    }

    //  删除
    @RequestMapping("/delUser.do")
    public String delUserById(int id){
        userInfoService.delUserById(id);
        System.out.println("删除成功");
        return "redirect:findAll.do";
    }

    // 修改前的查询
    // JDBC 和 Mybatis 有什么区别
    @RequestMapping("/updSelUserById.do")
    public ModelAndView updSelUserInfoById(int id){
        UserInfo userInfo = userInfoService.updSelUserInfoById(id);

        ModelAndView mv = new ModelAndView();
        mv.addObject("userInfo",userInfo);
        mv.setViewName("user-update");

        return mv;
    }

    // 修改
    @RequestMapping("/updUserInfo.do")
    public String updUserInfo(UserInfo userInfo){

        userInfoService.updUserInfo(userInfo);
        System.out.println("修改成功");

        return "redirect:findAll.do";
    }



}

以及mapper代码:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.zhongruan.dao.IUserInfoDao">
    <!--  验证登陆   -->
    <select id="doLogin" parameterType="java.lang.String" resultType="com.zhongruan.bean.UserInfo">
        select * from tb_user where username=#{username}
    </select>

    <!-- 全部查询   -->
    <select id="findAll" resultType="com.zhongruan.bean.UserInfo">
        select * from tb_user
    </select>


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

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

    <!--  修改前的查询  -->
    <select id="updSelUserInfoById" parameterType="Integer" resultType="com.zhongruan.bean.UserInfo">
        select * from tb_user where id=#{id}
    </select>

    <!--  修改   -->
    <update id="updUserInfo" parameterType="com.zhongruan.bean.UserInfo">
        update tb_user set username=#{username}, password=#{password} where id=#{id}
    </update>

</mapper>

以下为分页插件的使用:

使用分页插件,需要导入分页插件的jar包,所以我们去上一章所讲的pom.xml中增加一段代码

    <!--   分页jar包      -->
    <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>5.1.2</version>
    </dependency>

之后在applicationContext.xml中进行分页的配置(即将对应的包告诉给SqlSessionfactory):

  <!--   分页配置     -->
        <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>

在分页查询前,还应该先开启PageHelper,并且传入相应的参数(即当前分页和分页显示的条数):

    // 分页查询
    List<UserInfo> findAll(Integer page, Integer size);

因为我们的代码量并不复杂,只需要修改部分方法即可(此处修改的是全部查询的方法):

Service接口类:

    // 分页查询
    List<UserInfo> findAll(Integer page, Integer size);

Service实现类:

    // 分页查询
    @Override
    public List<UserInfo> findAll(Integer page, Integer size) {
        PageHelper.startPage(page,size);
        return userInfoDao.findAll();
    }

Controller层:

    //  全部查询
    // 所有需要返回数据到页面显示的全部都需要封装到ModelAndVIew中
    @RequestMapping("/findAll.do")
    public ModelAndView findAll(@RequestParam(defaultValue = "1") Integer page,
                                @RequestParam(defaultValue = "5") Integer size){
        // 调用service中的方法,得到查询结果
        List<UserInfo> userInfoList = userInfoService.findAll(page,size);

        // 把得到的数据存放到 PageInfo中
        PageInfo pageInfo = new PageInfo(userInfoList);

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

之后修改相应jsp页面

至此,分页查询结束。

发布了2 篇原创文章 · 获赞 0 · 访问量 15

猜你喜欢

转载自blog.csdn.net/FN57_/article/details/104596192