框架搭建的环境准备,包括IDEA开发工具、maven环境搭建、Mysql服务、Sqlyog可视化界面、tomcat服务
2、步骤: 2.1数据库环境:创建数据库表books,存放书籍信息包括:编号,名字,数量,价格,描述:
# 1.创建数据库CREATE DATAbase ssmbuild_study;# 2.使用数据库USE ssmbuild_study;# 3、删除books表(如果该表存在)DROp TABLE IF EXISTS books;# 4、创建books表CREATE TABLE `books` (`bookID` INT(10) NOT NULL AUTO_INCREMENT COMMENT '书籍编号',`bookName` VARCHAR(100) NOT NULL COMMENT '书籍名称',`bookCounts` INT(11) NOT NULL COMMENT '库存数量',`bookPrice` DOUBLE NOT NULL COMMENT '书籍价格',`detail` VARCHAR(200) NOT NULL COMMENT '书籍描述',KEY `bookID` (`bookID`)) ENGINE=INNODB DEFAULT CHARSET=utf8# 5.插入数据INSERT INTO `books`(`bookID`,`bookName`,`bookCounts`,`bookPrice`,`detail`)VALUES(1,'Java编程思想', 169, 103.8, '从入门到放弃'),(2,'MySQL技术内幕', 100, 79.4, '七天精通MySQL'),(3,'Java核心技术卷1', 59, 89.6, '半个月从进门到崩溃'),(4,'Java核心技术卷2', 104, 78.3, '原地爆炸'),(5,'Spring源码解析', 206, 68.7, '看到怀疑人生');# 6验证表创建是否成功:SELECT * FROM books;
查看数据库表创建是否成功:
2.2搭建项目,准备环境1、新建maven项目,ssmbuild_study,添加web支持
2、导入相关的maven依赖(junit、数据库驱动,数据库连接池,jsp、mybatis、mybatis-spring、spring-webmvc、spring-jdbc、lombok)
3、maven的静态资源过滤问题:
4、项目的基本结构:分层创建包:
实体类:pojoservice层:servicedao层:daocontroller层:controllermybatis配置:mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
spring总的配置文件:applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
1、数据库配置文件:db.properties
db.driver=com.mysql.cj.jdbc.Driverdb.url=jdbc:mysql://localhost:3306/ssmbuild_study?useSSL=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghaidb.username=rootdb.password=****
2、数据库对应实体类:pojo包中编写books类
package com.kevin.pojo;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;@Data@AllArgsConstructor@NoArgsConstructorpublic class Books { private int booID; private String bookName; private int bookCounts; private double bookPrice; private String detail;}
3、dao层编写BooksMapper接口及对应的BooksMapper.xml
BooksMapper接口的编写:
package com.kevin.dao;import com.kevin.pojo.Books;import org.apache.ibatis.annotations.Param;import java.util.List;public interface BooksMapper { //1.增 增加一条数据信息 int addBooks(Books books); //2.删 根据id删除一条数据信息 int deleteBooksById(@Param("bookID") int id); //3.改 修改数据信息 int updateBooks(Books books); //4.查 根据id查询对应的数据 Books queryBooksById(@Param("bookID") int id); //4.查 查询全部数据 List
BooksMapper.xml的编写:
<?xml version="1.0" encoding="UTF-8" ?>
4、service层编写BookService接口及接口实现类,用于调用dao层
BookService接口的编写,抽象方法与dao层的抽象方法类似
package com.kevin.service;import com.kevin.pojo.Books;import org.apache.ibatis.annotations.Param;import java.util.List;public interface BookService { //1.增 增加一条数据信息 int addBooks(Books books); //2.删 根据id删除一条数据信息 int deleteBooksById(int id); //3.改 修改数据信息 int updateBooks(Books books); //4.查 根据id查询对应的数据 Books queryBooksById(int id); //4.查 查询全部数据 List
BookServiceImpl:实现BookService接口,重写抽象方法,调用dao层的方法,和数据库进行交互
package com.kevin.service;import com.kevin.dao.BooksMapper;import com.kevin.pojo.Books;import java.util.List;public class BooksServiceImpl implements BookService{ // service层调用dao层,该实现类中需要定义dao层的属性 private BooksMapper booksMapper; public void setBooksMapper(BooksMapper booksMapper) { this.booksMapper = booksMapper; } @Override public int addBooks(Books books) { return booksMapper.addBooks(books); } @Override public int deleteBooksById(int id) { return booksMapper.deleteBooksById(id); } @Override public int updateBooks(Books books) { return booksMapper.updateBooks(books); } @Override public Books queryBooksById(int id) { return booksMapper.queryBooksById(id); } @Override public List
5、Mybatis核心配置文件,完成相关项的配置,包括起别名、添加mapper映射等
<?xml version="1.0" encoding="UTF-8" ?>
该层主要完成与dao 、service 层的配置,上接MVC和前端的交互,下接Mybatis和数据库的交互,起到一个承上启下,进行中间连接整合的作用
1、spring和dao层的整合:spring-dao.xml,并将其导入到总的spring配置文件中
绑定数据源配置创建dataSource的bean创建sqlSessionFactory的bean(创建sqlSessionTemplate)
<?xml version="1.0" encoding="UTF-8"?>
2、spring和service层的整合:spring-service.xml
扫描service包,自动注入service包中的实现类注入到bean配置事务管理器配置aop织入事务
<?xml version="1.0" encoding="UTF-8"?>
该层主要负责controller层和前端的交互
1、编写web.xml
注册dispatcherServlet:此处需要注意,绑定的spring配置文件为总的配置文件解决乱码问题
<?xml version="1.0" encoding="UTF-8"?>
3、跳转到了allBooks页面,在WEB-INF下新建jsp包,创建allBooks.jsp:
(查询所有书籍信息)
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %> 书籍编号 书籍名字 书籍数量 书籍价格 书籍详情 操作 <%--书籍从数据库中查询出来,从这个list中遍历出来:foreach遍历--%> <%-- foreach遍历,会在文件头部导入:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> --%>
4、将所有的spring配置文件均导入到总的spring配置文件applicationContext.xml中
<?xml version="1.0" encoding="UTF-8"?>
5、index.jsp:
<%-- Created by IntelliJ IDEA. User: DCH Date: 2022/2/2 Time: 16:53 To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %>
6、配置tomcat,启动运行(启动tomcat之前需要将所有的依赖在artifact中建立lib包)
tomcat成功启动之后,跳转到首页index.jsp:
2.6 Controller和jsp的完善完成对数据库的增删改查操作
1、新增书籍:controller层:
@RequestMapping("/toAddBooksPages")public String toAddBooksPages(){ return "addBooks";}@RequestMapping("/addBooks")public String addBooks(Books books){ System.out.println("新添加的书籍:" + books); bookService.addBooks(books); // 新增书籍之后,重定向到书籍列表显示页面 return "redirect:/books/getAllBooks";}
编写addBooks.jsp:
<%-- Created by IntelliJ IDEA. User: DCH Date: 2022/2/2 Time: 21:42 To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %>
点击书籍列表显示页面的新增书籍按钮,跳转:
点击添加按钮后,操作数据库完成新增,随后重定向到显示书籍列表页:
2、修改书籍信息:
@RequestMapping("/toUpdateBooksPages")public String toUpdateBooksPages(int id, Model model){ Books books = bookService.queryBooksById(id); System.out.println("根据id查询到的数据为:" + books); // 通过model将获取到的数据传回给前端 model.addAttribute("queryResult",books); return "updateBooks";}@RequestMapping("/updateBooks")public String updateBooks(Books books){ System.out.println("修改的书籍:" + books); // service层调用方法更新 bookService.updateBooks(books); // 修改后,重定向到书籍列表显示页面 return "redirect:/books/getAllBooks";}
编写updateBooks.jsp:
<%-- Created by IntelliJ IDEA. User: DCH Date: 2022/2/3 Time: 9:07 To change this template use File | Settings | File Templates.--%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %>
点击书籍列表页的修改按钮,跳转至修改页面,对选中的书籍编号进行修改,会先查询出该条数据显示出来:
点击修改之后,后端dao层完成对数据的update操作,修改成功之后,重定向到显示所有列表页面:
3、删除书籍:删除之后,跳转到获取所有书籍信息页面:
//通过restFul风格@RequestMapping("/deleteBooks/{bookID}")public String deleteBooks(@PathVariable("bookID") int id){ // service 层调用删除方法 bookService.deleteBooksById(id); // 删除之后,重定向到书籍列表显示页面 return "redirect:/books/getAllBooks";}
在书籍列表页面,点击右侧的删除按钮,直接完成删除,删除后重定向到书籍列表显示页面:
4、查询书籍信息(ByName):
查询结果无论单个或者多个均用list存储,在展示给前端时可以复用allBooks.jsp显示。
// 查询书籍@RequestMapping("queryBooks")public String queryBooks(String queryBookName, Model model){ List
根据指定名字查询书籍:
若没有查到该信息,显示未找到,并返回所有书籍信息:
查询到了对应的书籍:
至此,整合项目搭建完毕。完成了通过前端实现对后端的访问:项目分层结构如下所示:
controller层接收前端请求,调用service层,service层调用dao层,dao层负责完成和数据库的交互,并将处理结果沿路返回至controller层,controller层接收到处理后的数据,通过Model给前端进行解析并展示出来。