mybatis层

  1. 新建数据库

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    CREATE DATABASE `ssmbuild`;

    USE `ssmbuild`;

    DROP TABLE IF EXISTS `books`;

    CREATE TABLE `books` (
    `bookID` INT(10) NOT NULL AUTO_INCREMENT COMMENT '书id',
    `bookName` VARCHAR(100) NOT NULL COMMENT '书名',
    `bookCounts` INT(11) NOT NULL COMMENT '数量',
    `detail` VARCHAR(200) NOT NULL COMMENT '描述',
    KEY `bookID` (`bookID`)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8

    INSERT INTO `books`(`bookID`,`bookName`,`bookCounts`,`detail`)VALUES
    (1,'Java',1,'从入门到放弃'),
    (2,'MySQL',10,'从删库到跑路'),
    (3,'Linux',5,'从进门到进牢');
  2. 导入maven相关依赖及资源过滤

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    <dependencies>
    <!--Junit-->
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    </dependency>
    <!--数据库驱动-->
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
    </dependency>
    <!-- 数据库连接池 -->
    <dependency>
    <groupId>com.mchange</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.5.2</version>
    </dependency>

    <!--Servlet - JSP -->
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    </dependency>
    <dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.2</version>
    </dependency>
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
    </dependency>

    <!--Mybatis-->
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.2</version>
    </dependency>
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.2</version>
    </dependency>

    <!--Spring-->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.1.9.RELEASE</version>
    </dependency>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.1.9.RELEASE</version>
    </dependency>

    </dependencies>

    <build>
    <resources>
    <resource>
    <directory>src/main/java</directory>
    <includes>
    <include>**/*.properties</include>
    <include>**/*.xml</include>
    </includes>
    <filtering>false</filtering>
    </resource>
    <resource>
    <directory>src/main/resources</directory>
    <includes>
    <include>**/*.properties</include>
    <include>**/*.xml</include>
    </includes>
    <filtering>false</filtering>
    </resource>
    </resources>
    </build>
  3. 在idea连接数据库并编写数据库相关配置databoase.properties

    1
    2
    3
    4
    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=true&useUnicode=true&characterEncoding=utf8
    jdbc.username=root
    jdbc.password=123456
  4. 编写mybatis配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
    <typeAliases>
    <package name="com.sise.pojo"/>
    </typeAliases>
    </configuration>
  5. 编写实体类

    1
    2
    3
    4
    5
    6
    public class Books {
    private int bookID;
    private String bookName;
    private int bookCounts;
    private String detail;
    }
  6. 编写接口

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public interface BookMapper {
    //增
    int addBook(Books books);
    //删
    int deleteBook(int id);
    //改
    int updateBook(Books books);
    //查
    Books selectBook(int id);

    List<Books> selectAllBook();
    }
  7. 编写接口的映射文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?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.sise.dao.BookMapper">
    <insert id="addBook" parameterType="Books">
    insert into ssmbuild.books (bookName,bookCounts,detail) values (#{bookName},#{bookCounts},#{detail});
    </insert>

    <delete id="deleteBook" parameterType="int">
    delete from ssmbuild.books where bookID=#{id};
    </delete>
    <update id="updateBook" parameterType="Books">
    update ssmbuild.books set bookName=#{bookName},bookCounts=#{bookCounts},detail=#{detail} where bookID=#{bookID};
    </update>
    <select id="selectBook" resultType="Books">
    select * from ssmbuild.books where bookID=#{id};
    </select>
    <select id="selectAllBook" resultType="Books">
    select * from ssmbuild.books;
    </select>

    </mapper>
  8. 去mybatis配置文件注册mapper

    1
    2
    3
    <mappers>
    <mapper class="com.sise.dao.BookMapper"/>
    </mappers>
  9. 编写service层

    1. 接口

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      public interface BookService {
      //增
      int addBook(Books books);
      //删
      int deleteBook(int id);
      //改
      int updateBook(Books books);
      //查
      Books selectBook(int id);

      List<Books> selectAllBook();
      }
    2. 实现类

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      public class BookServiceImpl implements BookService {
      //service层调dao层
      private BookMapper bookMapper;

      public void setBookMapper(BookMapper bookMapper) {
      this.bookMapper = bookMapper;
      }

      public int addBook(Books books) {
      return bookMapper.addBook(books);
      }

      public int deleteBook(int id) {
      return bookMapper.deleteBook(id);
      }

      public int updateBook(Books books) {
      return bookMapper.updateBook(books);
      }

      public Books selectBook(int id) {
      return bookMapper.selectBook(id);
      }

      public List<Books> selectAllBook() {
      return bookMapper.selectAllBook();
      }
      }

spring层

  1. spring-dao

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <!--1、关联数据库配置文件-->
    <context:property-placeholder location="classpath:database.properties"/>
    <!--2、连接池-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="${jdbc.driver}"/>
    <property name="jdbcUrl" value="${jdbc.url}"/>
    <property name="user" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
    <!-- c3p0连接池的私有属性 -->
    <property name="maxPoolSize" value="30"/>
    <property name="minPoolSize" value="10"/>
    <!-- 关闭连接后不自动commit -->
    <property name="autoCommitOnClose" value="false"/>
    <!-- 获取连接超时时间 -->
    <property name="checkoutTimeout" value="10000"/>
    <!-- 当获取连接失败重试次数 -->
    <property name="acquireRetryAttempts" value="2"/>
    </bean>
    <!--3、sqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <!--绑定mybatis配置文件-->
    <property name="configLocation" value="classpath:mybatis-config.xml"/>
    </bean>

    <!--4、配置dao接口扫描包,动态实现dao接口可以注入到spring容器中-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!--注入sqlSessionFactory-->
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    <!--要扫描的dao包-->
    <property name="basePackage" value="com.sise.dao"/>
    </bean>
  2. spring-service

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <!--扫描service下的包-->
    <context:component-scan base-package="com.sise.service"/>
    <!--将我们的所有业务类,注入到spring,通过配置或者注解实现-->
    <bean id="bookServiceImpl" class="com.sise.service.BookServiceImpl">
    <property name="bookMapper" ref="bookMapper"/>
    </bean>
    <!--声明式事务配置-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <!--注入数据源-->
    <property name="dataSource" ref="dataSource"/>
    </bean>
    <!--aop事务支持-->

springMVC层

  1. 添加web支持和添加lib目录

  2. 编写web.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <!--DispatcherServlet-->
    <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
    </servlet-mapping>
    <!--乱码过滤-->
    <filter>
    <filter-name>encoding</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>utf-8</param-value>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>encoding</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!--session-->
    <session-config>
    <session-timeout>15</session-timeout>
    </session-config>
  3. 编写spring-mvc.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <!--1、开启注解支持-->
    <mvc:annotation-driven/>
    <!--2、静态资源过滤-->
    <mvc:default-servlet-handler/>
    <!--3、要扫描的包-->
    <context:component-scan base-package="com.sise.controller"/>
    <!--4、视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
    </bean>
  4. 到此,底层也全部编写完,然后编写controller层

查询书籍功能

  1. 编写control层

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @Controller
    @RequestMapping("/book")
    public class BookController {

    @Autowired
    private BookService bookService;

    @RequestMapping("/allBook")
    public String allBook(Model model){
    List<Books> list = bookService.selectAllBook();
    model.addAttribute("list",list);
    return "allBook";
    }
    }
  2. 编写jsp界面

    1. 首页

      1
      2
      3
      4
      5
      6
      7
      8
      9
      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
      <title>$Title$</title>
      </head>
      <body>
      <a href="${pageContext.request.contextPath}/book/allBook">跳转到书籍展示页面</a>
      </body>
      </html>
    2. 展示书籍界面

      1
      2
      3
      4
      5
      6
      7
      8
      9
      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
      <title>Title</title>
      </head>
      <body>
      <h1>书籍展示页面</h1>
      </body>
      </html>
    3. 测试成功,进行完善

  3. 编写控制层

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    @Controller
    @RequestMapping("/book")
    public class BookController {

    @Autowired
    private BookService bookService;


    @RequestMapping("/allBook")
    public String allBook(Model model){
    List<Books> list = bookService.selectAllBook();
    model.addAttribute("list",list);
    return "allBook";
    }
    }
  4. 跳转jsp页面

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
    <head>
    <title>Title</title>
    <!-- 引入 Bootstrap -->
    <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>

    <div class="container">

    <div class="row clearfix">
    <div class="col-md-12 column">
    <div class="page-header">
    <h1>
    <small>书籍列表 —— 显示所有书籍</small>
    </h1>
    </div>
    </div>
    </div>
    <div class="row clearfix">
    <div class="col-md-12 column">
    <table class="table table-hover table-striped">
    <thead>
    <tr>
    <th>书籍编号</th>
    <th>书籍名字</th>
    <th>书籍数量</th>
    <th>书籍详情</th>
    </tr>
    </thead>
    <c:forEach var="book" items="${list}">
    <tr>
    <td>${book.bookID}</td>
    <td>${book.bookName}</td>
    <td>${book.bookCounts}</td>
    <td>${book.detail}</td>
    </tr>
    </c:forEach>
    </tbody>
    </table>
    </div>
    </div>
    </div>

    </body>
    </html>

    注意:记得导入foreach命名空间(大坑)

    1
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  5. 完善首页样式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
    <title>首页</title>
    <style type="text/css">
    a {
    text-decoration: none;
    color: black;
    font-size: 18px;
    }
    h3 {
    width: 180px;
    height: 38px;
    margin: 100px auto;
    text-align: center;
    line-height: 38px;
    background: deepskyblue;
    border-radius: 4px;
    }
    </style>
    </head>
    <body>
    <h3>
    <a href="${pageContext.request.contextPath}/book/allBook">跳转到书籍展示页面</a>
    </h3>
    </body>
    </html>

添加书籍功能

  1. 编写allBook.jsp跳转到添加书籍界面

    1
    2
    3
    4
    5
    <div class="row">
    <div class="col-md-4 column">
    <a class="btn btn-primary" href="${pageContext.request.contextPath}/book/toAddBook">新增书籍</a>
    </div>
    </div>
  2. 编写bookController层

    1. 跳转添加书籍界面

      1
      2
      3
      4
      @RequestMapping("/toAddBook")
      public String toAddBook(){
      return "addBook";
      }
    2. 添加书籍功能

      1
      2
      3
      4
      5
      6
      7
      //添加书籍
      @RequestMapping("/addBook")
      public String addBook(Books books){
      System.out.println("添加书籍"+books);
      bookService.addBook(books);
      return "redirect:/book/allBook";
      }
  3. 添加书籍界面addBook

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
    <title>Title</title>
    <!-- 引入 Bootstrap -->
    <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>
    <div class="container">

    <div class="row clearfix">
    <div class="col-md-12 column">
    <div class="page-header">
    <h1>
    <small>新增书籍</small>
    </h1>
    </div>
    </div>
    </div>
    <form action="${pageContext.request.contextPath}/book/addBook" method="post">
    <div class="form-group">
    <label>书籍名称:</label>
    <input type="text" name="bookName" class="form-control" required>
    </div>

    <div class="form-group">
    <label>书籍数量:</label>
    <input type="text" name="bookCounts" class="form-control" required>
    </div>

    <div class="form-group">
    <label>书籍详情:</label>
    <input type="text" name="detail" class="form-control" required>
    </div>
    <div class="form-group">
    <input type="submit" class="form-control" value="添加">
    </div>
    </form>
    </div>
    </body>
    </html>

修改删除书籍功能

  1. 在allBook.jsp编写修改删除操作

    1
    2
    3
    4
    <td><a href="${pageContext.request.contextPath}/book/toUpdateBook?id=${book.bookID}">修改</a>
    &nbsp;|&nbsp;
    <a href="${pageContext.request.contextPath}/book/deleteBook?id=${book.bookID}">删除</a>
    </td>
  2. 编写跳转到修改书籍界面

    1
    2
    3
    4
    5
    6
    7
    //跳转到修改书籍
    @RequestMapping("/toUpdateBook")
    public String toUpdateBook(int id,Model model){
    Books books = bookService.selectBook(id);
    model.addAttribute("Books",books);
    return "updateBook";
    }
  3. 编写updateBook.jsp

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
    <title>Title</title>
    <!-- 引入 Bootstrap -->
    <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>
    <div class="container">

    <div class="row clearfix">
    <div class="col-md-12 column">
    <div class="page-header">
    <h1>
    <small>修改书籍</small>
    </h1>
    </div>
    </div>
    </div>
    <form action="${pageContext.request.contextPath}/book/updateBook" method="post">
    <%--隐藏域--%>
    <input type="hidden" name="bookID" value="${Books.bookID}">
    <div class="form-group">
    <label>书籍名称:</label>
    <input type="text" name="bookName" class="form-control" value="${Books.bookName}" required>
    </div>

    <div class="form-group">
    <label>书籍数量:</label>
    <input type="text" name="bookCounts" class="form-control" value="${Books.bookCounts}" required>
    </div>

    <div class="form-group">
    <label>书籍详情:</label>
    <input type="text" name="detail" class="form-control" value="${Books.detail}" required>
    </div>
    <div class="form-group">
    <input type="submit" class="form-control" value="修改">
    </div>
    </form>
    </div>
    </body>
    </html>
  4. 编写修改书籍功能

    1
    2
    3
    4
    5
    @RequestMapping("/updateBook")
    public String updateBook(Books books){
    bookService.updateBook(books);
    return "redirect:/book/allBook";
    }
  5. 编写删除书籍功能

    1
    2
    3
    4
    5
    @RequestMapping("/deleteBook")
    public String deleteBook(int id){
    bookService.deleteBook(id);
    return "redirect:/book/allBook";
    }

新增搜索功能

  1. allBook.jsp新增搜索框

    1
    2
    3
    4
    5
    6
    7
    8
    <div class="col-md-8 column">
    <%--查询书籍--%>
    <form class="form-inline" action="${pageContext.request.contextPath}/book/queryBook" method="post" style="float: right">
    <span style="color: red;font-weight: bold">${error}</span>
    <input type="text" name="queryBookName" class="form-control" placeholder="请输入要查询的书籍名称">
    <input type="submit" value="查询" class="btn btn-primary">
    </form>
    </div>
  2. 编写底层业务

    1. 接口

      1
      Books queryBookByName(String bookName);
    2. 映射文件

      1
      2
      3
      <select id="queryBookByName" resultType="Books">
      select * from ssmbuild.books where bookName=#{bookName};
      </select>
    3. service层接口

      1
      Books queryBookByName(String bookName);
    4. service层实现类

      1
      2
      3
      public Books queryBookByName(String bookName) {
      return bookMapper.queryBookByName(bookName);
      }
  3. controller层

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @RequestMapping("/queryBook")
    public String queryBook(String queryBookName,Model model){
    Books books = bookService.queryBookByName(queryBookName);
    List<Books> list = new ArrayList<Books>();
    list.add(books);
    if (books==null){
    list= bookService.selectAllBook();
    model.addAttribute("error","未查到");
    }
    model.addAttribute("list",list);
    return "allBook";

    }

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!