使用数据库和ssm框架(spring + springmvc + mybatis )写一个简单的书籍管理网站之二——详细解释各种调用层次,以及注解,便于学习理解(附源码)

本文详细介绍使用SSM框架(Spring、SpringMVC、MyBatis)构建书籍管理网站的过程,涵盖各层次调用及注解说明,附带源码,适合初学者理解并实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用数据库和ssm框架(spring + springmvc + mybatis )写一个简单的书籍管理网站之二——详细解释各种调用层次,以及注解,便于学习理解(附源码)

废话不多说,先给心急的伙伴把全部代码附上:
先说楼主电脑软件配置:idea2018;MySQL5.5.58(不同的可能需要修改代码中驱动和jar包,楼主会出一期MySQL卸载教材,安装教材可以参考上一期;maven3.0)

再说一下,请心急的小伙伴先按照我上一期的内容一步步搭好层次结构:
上一期的连接附上:https://mp.youkuaiyun.com/mdeditor/93917511#
层次如图:
在这里插入图片描述
在这里插入图片描述
ok,现在代码奉上:Userinfo类:

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

UserController类:

package com.zhongruan.controller;

import com.zhongruan.bean.Userinfo;
import com.zhongruan.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;

@Controller
@RequestMapping("user")//网页地址导航1
public class UserController {
    @Autowired
    private IUserService userService;
    @RequestMapping("/findAll.do")//网页导航2
    public ModelAndView findAll(){
        List<Userinfo> userinfos = userService.findAll ();
        ModelAndView modelAndView=new ModelAndView ();
        modelAndView.addObject ("ui",userinfos);
        modelAndView.setViewName ("allUser");
        return modelAndView;
    }
    @RequestMapping("toAddUser.do")
    public String addUser(Userinfo userinfo)
    {
        return "addUser";//返回字符串,等于导航到addUser.jsp
    }

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

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

   @RequestMapping("toUpdate.do")
   public String update(Model model,int id)
   {
       model.addAttribute("userInfo", userService.queryById(id));
       return "updateUser";
   }

   @RequestMapping("update.do")
   public String updateUser( Model model,Userinfo userinfo)
   {
       userService.updateUser (userinfo);
       userinfo=userService.queryById (userinfo.getId ());
       model.addAttribute ("userInfo",userinfo);

       return "redirect:/user/findAll.do";
   }

   @RequestMapping("save.do")
    public String save(Userinfo userinfo)
   {
       userService.addUser (userinfo);   //执行相关操作,这里数据库的insert操作
       return "redirect:/user/findAll.do";//点击保存,跳到find All.do执行
   }
}

IUserDao类:

    package com.zhongruan.dao;
    
    import com.zhongruan.bean.Userinfo;
    import org.springframework.web.servlet.ModelAndView;
    
    import java.util.List;
    
    public interface IUserDao {
        public List<Userinfo> findAll();
    
        public Userinfo addUser(Userinfo userinfo);
    
        public void deleteUser(int id);//只能void,因为没有resultType:指定返回值类型//parameterType:是值函数的传参
    
        public void updateUser(Userinfo userinfo);//每一个dao函数都和UserMapper.xml中的一个<select>标签所对应,直接执行sql
    
         public Userinfo queryById(int id);
    }
IUserServices接口:

    package com.zhongruan.service;
    
    import com.zhongruan.bean.Userinfo;
    import org.springframework.web.servlet.ModelAndView;
    
    import java.util.List;
    
    public interface IUserService {
        public List<Userinfo> findAll();
    
        public void addUser(Userinfo userinfo);
    
        public void deleteUser(int id);
    
        public void updateUser(Userinfo userinfo);
    
        public Userinfo queryById(int id);
    }

UserServices接口的实现:

    package com.zhongruan.service.impl;
    
    import com.zhongruan.bean.Userinfo;
    import com.zhongruan.dao.IUserDao;
    import com.zhongruan.service.IUserService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.web.servlet.ModelAndView;
    
    import java.util.List;
    @Service//注解,IUserService放进spring
    public class UserServiceimpl implements IUserService {
        @Autowired//注解,把spring中的iUserDao生成后取出
        IUserDao iUserDao;
        @Override
        public List<Userinfo> findAll() {
    
            return iUserDao.findAll ();
        }
    
        public void addUser(Userinfo userinfo)
        {
          iUserDao.addUser (userinfo);
        }
    
        public void deleteUser(int id)
        {
         iUserDao.deleteUser (id);
        }
    
        public void updateUser(Userinfo userinfo)
        {
         iUserDao.updateUser (userinfo);
        }
    
        public Userinfo queryById(int id)
        {
           return iUserDao.queryById(id);
        }
    }
    
    //层次结构是:1.Userinfo是对象的类;2.IUserService是一个接口;3.UserServiceimpl是上面接口的实现,在里面调用IUserDao
    //4.IUserDao是接口,里面的函数与UserMapper一一对应;5.UserController中实现功能,他有一个UserService对象,然后递归调用方法
    //直到数据库,即可;注意页面的跳转。
UserMapper.xml
<?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.IUserDao" >

<select id="findAll" resultType="com.zhongruan.bean.Userinfo">
select * from userinfo
</select>

<select id="addUser" resultType="com.zhongruan.bean.Userinfo">
 insert  into userinfo(id,username,password) value (#{id},#{username},#{password})
</select>

 <select id="deleteUser">
  delete from userinfo where id=#{id}
 </select>

 <update id="updateUser" parameterType="com.zhongruan.bean.Userinfo">
  update userinfo set username=#{username},password=#{password}
  where id=#{id}
 </update>

 <select id="queryById" parameterType="int" resultType="com.zhongruan.bean.Userinfo">
  select * from userinfo where id=#{id}

 </select>


</mapper>

其他的在前一篇的素材中。现在给大家看看实现结果(都是学生我懂得):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
基本上就实现了简单增删改查了。马上进入解惑环节:心急的小伙伴可以先收藏下次有空再看哦。
1.层次结构看上去很复杂,框架啥的不懂咋办?
答:层次虽然对于新手很复杂,却是企业开发项目开发的正式结构,希望大家可以提前掌握,用处很多,也有利于找bug和锻炼自己的思维模式。
框架是很难,但是不慌,会用即可,目前先大致了解一下,之后我们再深度学习。
2.上面项目的层次调用是啥啊?就看一堆名字差不多的类?看不懂鸭?
答:层次结构是:

  • 1.Userinfo是对象的类;
    2.IUserService是一个接口;
    3.UserServiceimpl是上面接口的实现,在里面调用IUserDao
    4.IUserDao是接口,里面的函数与UserMapper一一对应;
    5.UserController中实现功能,他有一个UserService对象,然后递归调用方法直到数据库,即可;注意页面的跳转。
    3.页面咋跳转的啊?
    答:通过在UserController中的有些函数的return来实现,比如return"allUser";来跳转到allUser.jsp所对应的页面。
    4.那些标签@啥意思啊,看不懂UserControlle中函数的跳转和返回?
    答:

    @RequestMapping(“user”)//网页地址导航函数
    return “redirect:/user/findAll.do”;//跳转user标签下的findAll.do

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值