【中软国际实习】Day 3:基于SSM框架的管理系统:实现“增、删、改、查”

一、主要代码解析

1、UserController.java

控制层:控制页面跳转以及前后端数据传递的类

@Controller
@RequestMapping("user")
public class UserController {
    @Autowired
    private IUserService userService;

    @RequestMapping("login.do")
    public ModelAndView login(User user){
        boolean flag = userService.login(user.getUsername(),user.getPassword());
        ModelAndView modelAndView = new ModelAndView();
        if(flag){
            modelAndView.setViewName("main");
        }else {
            modelAndView.setViewName("../failer");
        }
        return modelAndView;
    }

    @RequestMapping("findAll.do")
    public ModelAndView findAll(){
        List<User> users = userService.findAll();
        ModelAndView mv = new ModelAndView();
        mv.setViewName("user-list");
        mv.addObject("users",users);
        return mv;
    }

    @RequestMapping("deleteById.do")
    public String delete(int id){
        userService.deleteById(id);
        return "redirect:findAll.do";  //重定向,再执行一次查询
    }

    @RequestMapping("add.do")
    public String add(User user){
        userService.add(user);
        return "redirect:findAll.do";
    }

    @RequestMapping("toUpdate.do")
    public ModelAndView toUpdate(int id){
        User user = userService.selectUserById(id);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("user",user);
        modelAndView.setViewName("user-update");
        return modelAndView;
    }

    @RequestMapping("update.do")
    public String update(User user){
        userService.update(user);
        return "redirect:findAll.do";
    }

}

2、IUserDao.java

负责在UserMapper.xml和IUserService接口之间传递数据

public interface IUserDao {
    User findUserByUsername(String username);
    List<User> findAll();

    void deleteById(int id);

    void add(User user);

    User selectUserById(int id);

    void update(User user);
}

3、UserMapper.xml

负责实现接口IUserService的各种功能

<?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.Augenstern.dao.IUserDao">
    <select id="findUserByUsername" parameterType="String" resultType="com.Augenstern.bean.User">
        select * from tb_user where username=#{username}
    </select>
    <select id="findAll" resultType="user">
        select * from tb_user
    </select>
    <delete id="deleteById" parameterType="int">
        delete from tb_user where id =#{id}
    </delete>
    <insert id="add" parameterType="user">
        insert into tb_user(username,password) values (#{username},#{password})
    </insert>
    <select id="selectUserById" parameterType="int" resultType="user">
        select * from tb_user where id =#{id}
    </select>
    <update id="update" parameterType="user">
        update tb_user set username=#{username},password=#{password} where id =#{id}
    </update>
</mapper>

4、IUserService.java

public interface IUserService {

    boolean login(String username,String password);

    List<User> findAll();

    void deleteById(int id);

    void add(User user);

    User selectUserById(int id);

    void update(User user);
}

5、UserServiceImpl.java

具体实现IUserService接口中的各方法

@Service
public class UserServiceImpl implements IUserService {
    @Autowired
    private IUserDao userDao;

    @Override
    public boolean login(String username, String password) {
        User user = userDao.findUserByUsername(username);
        if(user!=null && user.getPassword().equals(password)){
            return true;
        }
        return false;
    }

    @Override
    public List<User> findAll(){
        return userDao.findAll();
    }

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

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

    @Override
    public User selectUserById(int id) {
        return userDao.selectUserById(id);
    }

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

二、管理系统实现

1、主界面

用户登录界面:用户需输入用户名和密码,点击“登录”按钮即可成功登录
在这里插入图片描述
主界面:左侧界面显示用户头像与登录状态,菜单包括首页和系统管理(分为用户管理与角色管理)
在这里插入图片描述

2、查

点击用户管理即可查询所有用户信息
在这里插入图片描述

3、删

点击操作栏的“删除”按钮,即可成功删除用户
系统根据ID来删除用户数据,例如:我们删除了ID为2的用户Lisa
在这里插入图片描述

4、增

点击“新建”,即可跳转至新增用户界面,用户需提供新用户的用户名和密码,系统自动生成ID
在这里插入图片描述
在这里插入图片描述

5、改

点击操作栏的“更新”按钮,可跳转至信息更新界面,可以修改用户名或密码
例如:将ID为3的用户名由Lucy改为Alice
在这里插入图片描述
在这里插入图片描述

三、碎片知识小结

#{} 与 ${}

${}#{}
含义仅仅为一个纯粹的string替换,在动态SQL解析阶段会进行变量替换解析为一个JDBC预编译语句(prepared statement)的参数标记符,也就是一个参数占位符
解析结果不会当做字符串处理,原来是什么,就是什么能够把string类型在拼接的时候自动加上引号,其他数据类型不加引号
sql语句:select * from tb_user where username = #{username} 动态解析为:select * from tb_user where username = ?sql语句:select * from tb_user where username = ${username} 传递参数"Juddy"解析为:select * from tb_user where username = “Juddy”

注意:
1、原则上使用#{}
(1)出于性能考虑,相同的预编译SQL可以重复利用;
(2)${}在预编译之前已经被变量替换了,会存在SQL注入问题
例:
SQL语句为:
select * from ${tablename} where name =#{name}
参数tablename为user;delete user;–,那么动态解析后会变为:
select * from user;delete user;-- where name = ?
原来的情况时一条查询中包含删除表数据的SQL语句,但解析之后–之后的语句将作为注释,不起作用。

2、表名为变量时,必须使用${}
表名是字符串,使用SQL占位符替换字符串时会带上单引号,这会导致SQL语法错误。

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页