SSM整合

首先准备环境 对图书的CRUD

新建一个maven项目 添加web支持 添加pom.xml依赖


    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.4</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.2.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.25</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.6</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.6</version>
        </dependency>
    </dependencies>

创建一张图书的表

编写环境所需要的相关包 

 首先编写实体类 pojo

package com.cong.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Books {
    private int bookID;
    private String bookName;
    private int bookCounts;
    private String detail;

}

编写mapper接口也叫dao层

利用注解开发 就不用了编写mapper的映射文件了 后面mybatis的核心文件也不要 了 

全权交给spring配置文件去做

package com.cong.dao;

import com.cong.pojo.Books;
import org.apache.ibatis.annotations.*;

import java.util.List;

public interface BooksMapper {
//    z增加一本书
    @Insert("insert into books (bookName,bookCounts,detail) values (#{bookName},#{bookCounts},#{detail})")
    int addBook(Books books);

    //删除一本书
    @Delete("delete from books where bookName=#{bookName}")
    int delete(Books books);

    //更新修改一本书
    @Update("update books set bookName=#{bookName},bookCounts=#{bookCounts},detail=#{detail} where bookID=#{bookID}")
    int update(Books books);

    //查询一本书
    @Select("select * from books where bookName=#{bookName}")
    Books queryBookById(String bookName);

    //查询全部的书
    @Select("select * from books")
    List<Books> queryAllBook();

}

编写service接口

package com.cong.service;

import com.cong.pojo.Books;
import org.apache.ibatis.annotations.*;

import java.util.List;

public interface BooksService {

    //    z增加一本书
    int addBook(Books books);

    //删除一本书
    int delete(Books books);

    //更新一本书
    int update(Books books);

    //查询一本书
    Books queryBookById(String bookName);

    //查询全部的书
    List<Books> queryAllBook();
}

创建service的实现类 

利用注解

package com.cong.service.impl;

import com.cong.dao.BooksMapper;
import com.cong.pojo.Books;
import com.cong.service.BooksService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class BooksServiceImpl implements BooksService {
//    调用dao层

    @Autowired
    private BooksMapper booksMapper;


    @Override
    public int addBook(Books books) {
        return booksMapper.addBook(books);
    }

    @Override
    public int delete(Books books) {
        return booksMapper.delete(books);
    }

    @Override
    public int update(Books books) {
        return booksMapper.update(books);
    }

    @Override
    public Books queryBookById(String bookName) {
        Books books = booksMapper.queryBookById(bookName);
        return books;
    }

    @Override
    public List<Books> queryAllBook() {
        return booksMapper.queryAllBook();
    }
}

创建Controller层

这里包含了所有方法 用到那个说那个

package com.cong.controller;


import com.cong.pojo.Books;
import com.cong.service.BooksService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@org.springframework.stereotype.Controller
public class Controller {

    //测试
    @RequestMapping(value = "/test", produces = "application/json;charset=utf-8")
    @ResponseBody
    public String test() {
        return "成功";
    }

    //调用service层
    @Autowired
    private BooksService booksService;

    //查询书籍功能
    @RequestMapping("/allBook")
    public String findAll(Model model) {
        List<Books> booksList = booksService.queryAllBook();
        model.addAttribute("booksList", booksList);
        System.out.println(booksList.toString());
        return "allBooks";
    }

    //跳转到书籍添加界面
    @RequestMapping("/addBook")
    public String add() {
        return "addBooks";
    }

    //添加书籍
    @RequestMapping("/addBookOne")
    public String addBook(Books books, Model model) {
        int book = booksService.addBook(books);
        System.out.println("添加了一本书名叫:" + book);
        return "redirect:/allBook";//重定向到查询所有的状态
    }

    //跳转到修改书籍页面
    @RequestMapping("/update")
    public String update(String bookName, Model model) {
        Books books = booksService.queryBookById(bookName);
        model.addAttribute("books", books);
        return "updateBooks";
    }

    //修改书籍 根据 相应的名字查询
    @RequestMapping("/updateBook")
    public String updateBook(Books books, Model model) {
        int update = booksService.update(books);
        return "redirect:/allBook";//重定向到查询所有的状态
    }

    //删除一本书 根据名字删除
    @RequestMapping("/delete")
    public String delete(Books books, Model model) {
        int delete = booksService.delete(books);
        return "redirect:/allBook";//重定向到查询所有的状态

    }


}

准备配置文件的编写

1.applicationContext.xml

包括了 整合dao层和service层 添加了

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--    导入springmvc的配置文件-->
    <import resource="classpath:springmvc-servlet.xml"/>


<!--    开启注解 dao和service层-->
    <!--配置注解扫描-->
    <context:component-scan base-package="com.cong">
<!--        除去对controller层的扫描-->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>



<!--                                整合dao mapper 层                 -->
    <!--扫描mapper所在的包 为mapper创建实现类-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.cong.dao"/>
    </bean>
<!--加载jdbc.properties文件 -->
    <context:property-placeholder location="classpath:jdbc.properties"/>
<!--    配置数据源对象 这里用的是德鲁伊 Druid-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean>

    <!--配置sessionFactory-->
    <bean class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
    </bean>



<!--                                 spring整和service层                     -->
    <!--声明式事务控制-->
    <!--平台事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--配置事务增强-->
    <tx:advice id="txAdvice">
        <tx:attributes>
            <tx:method name="*"/>
        </tx:attributes>
    </tx:advice>

    <!--事务的aop织入-->
    <aop:config>
        <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.cong.service.impl.*.*(..))"/>
    </aop:config>


</beans>

编写spring-MVC的配置文件

包括静态资源过滤器 视图解析器 乱码问题

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">


    <!--    下面所有东西就不用动了 以后也不用动了 -->


    <context:component-scan base-package="com.cong.controller"/>

    <!--    让Spring mvc 不处理静态资源-->
    <mvc:default-servlet-handler/>
    <mvc:annotation-driven/>

    <!--    视图解析器 -->

    <!--    视图解析器 :DispatcherServlet给他的ModelAndView-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>


</beans>

 环境配好了 接下里该写实现了

实现查询所有的图书 Controller层

    //调用service层
    @Autowired
    private BooksService booksService;

    //查询书籍功能
    @RequestMapping("/allBook")
    public String findAll(Model model) {
        List<Books> booksList = booksService.queryAllBook();
        model.addAttribute("booksList", booksList);
        System.out.println(booksList.toString());
        return "allBooks";
    }

service层


    @Override
    public List<Books> queryAllBook() {
        return booksMapper.queryAllBook();
    }

dao层

    //查询全部的书
    @Select("select * from books")
    List<Books> queryAllBook();

查询出所有的书籍 转跳到展示书籍页面 

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
  Created by IntelliJ IDEA.
  User: lsc1999
  Date: 2022/1/25
  Time: 20:47
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>书籍展示页面</title>
</head>
<body>

<h1>展示账户数据列表</h1>
<table border="1">
    <tr>
        <th>书籍id</th>
        <th>书籍名称</th>
        <th>书籍数量</th>
        <th>书籍描述</th>
        <th>操作</th>
    </tr>

    <c:forEach items="${booksList}" var="account">
        <tr>
            <td>${account.bookID}</td>
            <td>${account.bookName}</td>
            <td>${account.bookCounts}</td>
            <td>${account.detail}</td>
            <td>
                <a href="${pageContext.request.contextPath}/update?bookName=${account.bookName}">修改 </a>
                &nbsp;|&nbsp;
                <a href="${pageContext.request.contextPath}/delete?bookName=${account.bookName}">删除 </a>
            </td>
        </tr>
    </c:forEach>

    <form action="/index.jsp" method="post">
        <input type="submit" value="返回首页">
    </form>
    <br>
    <br>

    <a href="${pageContext.request.contextPath}/addBook">书籍添加</a>
    <br>
    <br>

</table>
</body>
</html>

 

 实现添加书籍页面功能

 首先进入首页


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
hello
<br>
<h2><a href="${pageContext.request.contextPath}/allBook" >进入书籍展示界面</a></h2>
<br>
<br>
<h2><a href="${pageContext.request.contextPath}/addBook" >进入书籍添加界面</a></h2>
  </body>
</html>

转跳到添加书籍页面 

controller层


    //跳转到书籍添加界面
    @RequestMapping("/addBook")
    public String add() {
        return "addBooks";
    }

 添加书籍页面


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="/addBookOne" method="post">
    <label>书籍名称</label><br>
    <input type="text" name="bookName"/>
    <br>
    <br>
    <label>书籍数量</label><br>
    <input type="text" name="bookCounts"/>
    <br>
    <br>
    <label>书籍描述</label><br>
    <input type="text" name="detail"/>
    <br>
    <br>
    <h3><input type="submit" value="提交"></h3>


</form>

</body>
</html>

 

添加的功能

    //添加书籍
    @RequestMapping("/addBookOne")
    public String addBook(Books books, Model model) {
        int book = booksService.addBook(books);
        System.out.println("添加了一本书名叫:" + book);
        return "redirect:/allBook";//重定向到查询所有的状态
    }

添加完成之后跳转到 重新查新的首页 用的是重定向

修改和删除书籍的功能

从前端修改一本书 首先的获取这本书 

    <c:forEach items="${booksList}" var="account">
        <tr>
            <td>${account.bookID}</td>
            <td>${account.bookName}</td>
            <td>${account.bookCounts}</td>
            <td>${account.detail}</td>
            <td>
                <a href="${pageContext.request.contextPath}/update?bookName=${account.bookName}">修改 </a>
                &nbsp;|&nbsp;
                <a href="${pageContext.request.contextPath}/delete?bookName=${account.bookName}">删除 </a>
            </td>
        </tr>
    </c:forEach>

这样就查到了 并且修改 完后之后也返回到重新查询的首页

    //修改书籍 根据 相应的名字查询
    @RequestMapping("/updateBook")
    public String updateBook(Books books, Model model) {
        int update = booksService.update(books);
        return "redirect:/allBook";//重定向到查询所有的状态
    }

    //删除一本书 根据名字删除
    @RequestMapping("/delete")
    public String delete(Books books, Model model) {
        int delete = booksService.delete(books);
        return "redirect:/allBook";//重定向到查询所有的状态

    }

修改书籍页面

<%--
  Created by IntelliJ IDEA.
  User: lsc1999
  Date: 2022/1/25
  Time: 22:05
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>修改书书籍页面</title>
</head>
<body>

<form action="${pageContext.request.contextPath}/updateBook" method="post">
<%--    前端传递隐藏域 ${books.bookID} 没有这个就提交失败--%>
    <input type="hidden" name="bookID" value="${books.bookID}">


    <label>书籍名称</label><br>
    <input type="text" name="bookName" value="${books.bookName}"/>
    <br>
    <br>
    <label>书籍数量</label><br>
    <input type="text" name="bookCounts" value="${books.bookCounts}"/>
    <br>
    <br>
    <label>书籍描述</label><br>
    <input type="text" name="detail" value="${books.detail}"/>
    <br>
    <br>
    <h3><input type="submit" value="修改提交"></h3>


</form>

</body>
</html>

 

删除功能 就没什么说的了 直接删

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值