使用数据库和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。