IDEA集成SSM框架(SpringMVC+Spring+MyBatis)


前言

学习完MyBatis,Spring,SpringMVC之后,我们需要做的就是将这三者联系起来,Spring实现业务对象管理,Spring MVC负责请求的转发和视图管理, MyBatis作为数据对象持久化引擎。这样搭配的优点是:轻量、自由度高、Spring与Spring MVC契合度更好。通过一个图书管理示例完成SSM框架的集成。

本章目标

通过图书管理系统完成SSM框架的集成。

项目构建

一.父模块

1.我们打开idea选择create new project,然后选择Maven项目,我们暂时先不要选择maven骨架,等我们的视图层(WEB-UI层)的时候再选择maven骨架

2.这一步输入组织名,模块名称

Groupld:组织名

artifactId:模块名称

version:版本号

在Maven世界中,每个工程都有它唯一的 组织名模块名版本 ,这三个就是maven项目的坐标。一个maven工程可以打包成jar、war、pom等形式,但是它们都是拥有上述三个坐标的。我们在项目过程中导入的jar包就是通过上述坐标值唯一确定的。因此,我们在创建一个maven工程时会要求指定具体的 组织名、模块名、版本、打包方式。

二.子模块(common层)

1.创建子模块common层,然后点击next

 

三.子模块(Dao层)

1.子模块Dao层和Comon一样,这里就不再做过多的描述了

2.直接完成最后一步

四.子模块(Service层)

1.同理,如上

五.子模块(Entity层)

1.实体层和mmon层一样都是同样的操作步骤,这里我们就不进行截图了,操作步骤都一样

六.子模块(WEB-UI层)

1.子模块web-ui层需要讲一下,因为我们这一层是视图层,所以我们需要选择maven骨架。

2.然后点击next,输入模块名之后finish就可以了,在这里我们需要选择自己本地的中央仓库。自此我们的多模块项目已经搭建好了

3.完整的项目结构如下:

4.在这里我们发现视图层多了webapp这个文件夹,以后的开发过程中我们的视图都是放在WEB_INF目录下的

common模块:通用模块,不依赖其它任何模块,主要有utils、可以在多个不同项目中使用

entitie模块:POJO、VO、DTO

dao模块:数据持久化,访问数据库,这里使用Mybatis

service模块:业务模块,处理业务逻辑

webui模块:B/S结构的表示层,主要用于在浏览器中显示数据,提供用户接口

模块依赖

(1)父模块依赖

1.接下来我们去父模块的pom.xml文件进行统一的模块管理,为了方便管理版本和后续添加依赖不那么繁琐,我们在父模块pom.xml文件中只对依赖进行统一管理起来,而不进行依赖,当我们需要哪一个依赖的时候,我们只需要引入即可。

父模块pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>com.ssm.booksystemgroupId>
    <artifactId>BookSystemartifactId>
    <packaging>pompackaging>
    <version>1.0-SNAPSHOTversion>
    <modules>
        <module>Book-Commonmodule>
        <module>Book-Daomodule>
        <module>Book-Servicemodule>
        <module>Book-WEBUImodule>
        <module>Book-Entitymodule>
    modules>
    <properties>
        
        <Book-Common.version>1.0-SNAPSHOTBook-Common.version>
        <Book-Dao.version>1.0-SNAPSHOTBook-Dao.version>
        <Book-Service.version>1.0-SNAPSHOTBook-Service.version>
        <Book-Entity.version>1.0-SNAPSHOTBook-Entity.version>
        <Book-WEBUI.version>1.0-SNAPSHOTBook-WEBUI.version>
        
        <jackson.version>2.7.4jackson.version>
        <commons-lang3.version>3.4commons-lang3.version>
        
        <log4j.version>2.6.1log4j.version>
        <junit.version>4.12junit.version>
        <spring-test.version>4.3.18.RELEASEspring-test.version>
        
        <spring.version>4.3.0.RELEASEspring.version>
        <aspectjweaver.version>1.8.9aspectjweaver.version>
        <cglib.version>3.2.4cglib.version>
        
        <mybatis-spring.version>1.3.0mybatis-spring.version>
        <mysql-connector-java.version>5.1.38mysql-connector-java.version>
        <mybatis.version>3.4.1mybatis.version>
        <c3p0.version>0.9.1.2c3p0.version>
        
        <jstl.version>1.2jstl.version>
        <servlet-api.version>4.0.1servlet-api.version>
        <jsp-api.version>2.1jsp-api.version>
        <hibernate.version>5.2.2.Finalhibernate.version>
        <commons-io.version>2.4commons-io.version>
        <commons-fileupload.version>1.3.1commons-fileupload.version>
        <freemarker.version>2.3.23freemarker.version>

    properties>
    
    <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>com.ssm.booksystemgroupId>
                    <artifactId>Book-CommonartifactId>
                    <version>${Book-Common.version}version>
                dependency>
                <dependency>
                    <groupId>com.ssm.booksystemgroupId>
                    <artifactId>Book-DaoartifactId>
                    <version>${Book-Dao.version}version>
                dependency>
                <dependency>
                    <groupId>com.ssm.booksystemgroupId>
                    <artifactId>Book-ServiceartifactId>
                    <version>${Book-Service.version}version>
                dependency>
                <dependency>
                    <groupId>com.ssm.booksystemgroupId>
                    <artifactId>Book-EntityartifactId>
                    <version>${Book-Entity.version}version>
                dependency>
                <dependency>
                    <groupId>com.ssm.booksystemgroupId>
                    <artifactId>Book-WEBUIartifactId>
                    <version>${Book-WEBUI.version}version>
                dependency>
                
                
                <dependency>
                    <groupId>com.fasterxml.jackson.coregroupId>
                    <artifactId>jackson-databindartifactId>
                    <version>${jackson.version}version>
                dependency>

                <dependency>
                    <groupId>com.fasterxml.jackson.coregroupId>
                    <artifactId>jackson-coreartifactId>
                    <version>${jackson.version}version>
                dependency>

                <dependency>
                    <groupId>com.fasterxml.jackson.coregroupId>
                    <artifactId>jackson-annotationsartifactId>
                    <version>${jackson.version}version>
                dependency>
                
                <dependency>
                    <groupId>org.apache.commonsgroupId>
                    <artifactId>commons-lang3artifactId>
                    <version>${commons-lang3.version}version>
                dependency>

                
                <dependency>
                    <groupId>org.apache.logging.log4jgroupId>
                    <artifactId>log4j-coreartifactId>
                    <version>${log4j.version}version>
                dependency>
                
                <dependency>
                    <groupId>junitgroupId>
                    <artifactId>junitartifactId>
                    <version>${junit.version}version>
                dependency>
                <dependency>
                    <groupId>org.springframeworkgroupId>
                    <artifactId>spring-testartifactId>
                    <version>${spring-test.version}version>
                dependency>
                
                <dependency>
                    <groupId>org.springframeworkgroupId>
                    <artifactId>spring-contextartifactId>
                    <version>${spring.version}version>
                dependency>
                
                <dependency>
                    <groupId>org.aspectjgroupId>
                    <artifactId>aspectjweaverartifactId>
                    <version>${aspectjweaver.version}version>
                dependency>
                <dependency>
                    <groupId>cglibgroupId>
                    <artifactId>cglibartifactId>
                    <version>${cglib.version}version>
                dependency>
                
                <dependency>
                    <groupId>org.mybatisgroupId>
                    <artifactId>mybatis-springartifactId>
                    <version>${mybatis-spring.version}version>
                dependency>
                
                <dependency>
                    <groupId>org.springframeworkgroupId>
                    <artifactId>spring-jdbcartifactId>
                    <version>${spring.version}version>
                dependency>
                
                <dependency>
                    <groupId>mysqlgroupId>
                    <artifactId>mysql-connector-javaartifactId>
                    <version>${mysql-connector-java.version}version>
                dependency>
                
                <dependency>
                    <groupId>org.mybatisgroupId>
                    <artifactId>mybatisartifactId>
                    <version>${mybatis.version}version>
                dependency>
                
                <dependency>
                    <groupId>c3p0groupId>
                    <artifactId>c3p0artifactId>
                    <version>${c3p0.version}version>
                dependency>

                
                <dependency>
                    <groupId>org.springframeworkgroupId>
                    <artifactId>spring-webmvcartifactId>
                    <version>${spring.version}version>
                dependency>
                <dependency>
                    <groupId>org.springframeworkgroupId>
                    <artifactId>spring-context-supportartifactId>
                    <version>${spring.version}version>
                dependency>
                
                <dependency>
                    <groupId>javax.servletgroupId>
                    <artifactId>jstlartifactId>
                    <version>${jstl.version}version>
                dependency>
                
                <dependency>
                    <groupId>javax.servletgroupId>
                    <artifactId>javax.servlet-apiartifactId>
                    <version>${servlet-api.version}version>
                dependency>
                
                <dependency>
                    <groupId>javax.servlet.jspgroupId>
                    <artifactId>jsp-apiartifactId>
                    <version>${jsp-api.version}version>
                dependency>
                
                <dependency>
                    <groupId>org.hibernategroupId>
                    <artifactId>hibernate-validatorartifactId>
                    <version>${hibernate.version}version>
                dependency>
                
                <dependency>
                    <groupId>commons-iogroupId>
                    <artifactId>commons-ioartifactId>
                    <version>${commons-io.version}version>
                dependency>
                <dependency>
                    <groupId>commons-fileuploadgroupId>
                    <artifactId>commons-fileuploadartifactId>
                    <version>${commons-fileupload.version}version>
                dependency>
                
                <dependency>
                    <groupId>org.freemarkergroupId>
                    <artifactId>freemarkerartifactId>
                    <version>${freemarker.version}version>
                dependency>
            dependencies>

    dependencyManagement>

project>

(2)子模块Comon层模块依赖

common模块中的pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>BookSystemartifactId>
        <groupId>com.ssm.booksystemgroupId>
        <version>1.0-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>

    <artifactId>Book-CommonartifactId>
    <dependencies>
        
        <dependency>
            <groupId>com.fasterxml.jackson.coregroupId>
            <artifactId>jackson-databindartifactId>
        dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.coregroupId>
            <artifactId>jackson-coreartifactId>
        dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.coregroupId>
            <artifactId>jackson-annotationsartifactId>
        dependency>
        
        <dependency>
            <groupId>org.apache.commonsgroupId>
            <artifactId>commons-lang3artifactId>
        dependency>
    dependencies>

project>

(3)子模块Dao层模块依赖

Dao模块中的pom.xml文件,这一层中我们需要依赖common层和实体层,因为在这一层中我们涉及到和数据库打交道,一张表就对应一个POJO

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>BookSystemartifactId>
        <groupId>com.ssm.booksystemgroupId>
        <version>1.0-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>

    <artifactId>Book-DaoartifactId>
    <dependencies>
        <dependency>
            <groupId>com.ssm.booksystemgroupId>
            <artifactId>Book-CommonartifactId>
        dependency>
        <dependency>
            <groupId>com.ssm.booksystemgroupId>
            <artifactId>Book-EntityartifactId>
        dependency>
        
        <dependency>
            <groupId>org.apache.logging.log4jgroupId>
            <artifactId>log4j-coreartifactId>
        dependency>
        
        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
        dependency>

        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-testartifactId>
        dependency>
        
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-contextartifactId>
        dependency>
        
        <dependency>
            <groupId>org.aspectjgroupId>
            <artifactId>aspectjweaverartifactId>
        dependency>
        <dependency>
            <groupId>cglibgroupId>
            <artifactId>cglibartifactId>
        dependency>

        
        <dependency>
            <groupId>org.mybatisgroupId>
            <artifactId>mybatis-springartifactId>
        dependency>
        
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-jdbcartifactId>
        dependency>
        
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
        dependency>
        
        <dependency>
            <groupId>org.mybatisgroupId>
            <artifactId>mybatisartifactId>
        dependency>
        
        <dependency>
            <groupId>c3p0groupId>
            <artifactId>c3p0artifactId>
        dependency>
    dependencies>

project>

(4)子模块Service层模块依赖

Service模块中的pom.xml文件,这一层中我们需要依赖dao层

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>BookSystemartifactId>
        <groupId>com.ssm.booksystemgroupId>
        <version>1.0-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>

    <artifactId>Book-ServiceartifactId>
    <dependencies>
        <dependency>
            <groupId>com.ssm.booksystemgroupId>
            <artifactId>Book-DaoartifactId>
        dependency>
    dependencies>

project>

(5)子模块Entity层模块依赖

实体层暂时不需要依赖任何的模块,Entity模块中的pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>BookSystemartifactId>
        <groupId>com.ssm.booksystemgroupId>
        <version>1.0-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>

    <artifactId>Book-EntityartifactId>


project>

(6)子模块WEB-UI层模块依赖

 Service模块中的pom.xml文件,这一层中我们需要依赖service层

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>BookSystemartifactId>
        <groupId>com.ssm.booksystemgroupId>
        <version>1.0-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>

    <artifactId>Book-WEBUIartifactId>
    <packaging>warpackaging>

    <name>Book-WEBUI Maven Webappname>
    
    <url>http://www.example.comurl>

    <properties>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <maven.compiler.source>1.7maven.compiler.source>
        <maven.compiler.target>1.7maven.compiler.target>
    properties>

    <dependencies>
        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>4.11version>
            <scope>testscope>
        dependency>
        <dependency>
            <groupId>com.ssm.booksystemgroupId>
            <artifactId>Book-ServiceartifactId>
        dependency>
        
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-webmvcartifactId>
        dependency>

        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-context-supportartifactId>
        dependency>
        
        <dependency>
            <groupId>javax.servletgroupId>
            <artifactId>javax.servlet-apiartifactId>
        dependency>
        
        <dependency>
            <groupId>commons-iogroupId>
            <artifactId>commons-ioartifactId>
        dependency>

        <dependency>
            <groupId>commons-fileuploadgroupId>
            <artifactId>commons-fileuploadartifactId>
        dependency>
        <dependency>
            <groupId>javax.servlet.jspgroupId>
            <artifactId>jsp-apiartifactId>
        dependency>
        <dependency>
            <groupId>javax.servletgroupId>
            <artifactId>jstlartifactId>
        dependency>
    dependencies>

    <build>
        <finalName>Book-WEBUIfinalName>
        <pluginManagement>
            <plugins>
                <plugin>
                    <artifactId>maven-clean-pluginartifactId>
                    <version>3.1.0version>
                plugin>
                
                <plugin>
                    <artifactId>maven-resources-pluginartifactId>
                    <version>3.0.2version>
                plugin>
                <plugin>
                    <artifactId>maven-compiler-pluginartifactId>
                    <version>3.8.0version>
                plugin>
                <plugin>
                    <artifactId>maven-surefire-pluginartifactId>
                    <version>2.22.1version>
                plugin>
                <plugin>
                    <artifactId>maven-war-pluginartifactId>
                    <version>3.2.2version>
                plugin>
                <plugin>
                    <artifactId>maven-install-pluginartifactId>
                    <version>2.5.2version>
                plugin>
                <plugin>
                    <artifactId>maven-deploy-pluginartifactId>
                    <version>2.8.2version>
                plugin>
            plugins>
        pluginManagement>
    build>
project>

(7)最终的依赖效果

这里只展示了common层中的依赖,剩下的依赖也一样

连接数据库

1.这是navicat的操作界面,前面的一些连接配置我在这里就不进行过多的描述了。

  

2.右键localhost_3306选择新建数据库,输入数据的名称,字符集我们选择倒数第二个,也就是utf-8的然后确定就可了

3.数据库脚本

create table book(
    bid int auto_increment primary key not null COMMENT'图书编号',
    bname varchar(50) not null COMMENT'图书名称',
    bauthor VARCHAR(50) COMMENT'图书作者'
)
INSERT into book(bname,bauthor)VALUES
('斗罗大陆','唐家三少'),
('假如给我三天光明','海伦凯勒'),
('斗破苍穹','天蚕土豆'),
('雪鹰领主','我吃西红柿')
SELECT * from book

文件配置

文件配置是一项非常繁琐的工作内容,稍有不慎整个项目就废了,所以需要非常的细心才有可能将这一整个项目搭建成功,否则将会一夜之间回到解放前。所以我所操作的每一个不大家都需要谨慎再谨慎。

1.首先我们先移除父模块的src目录,其实移不移除都无所谓,在这里我主要是为了影响干扰,移除之后目录如下

2.我们需要在每一个子模块添加对应的包名和配置文件

子模块common层

R.java

package com.booksystem.common;

import java.util.HashMap;
import java.util.Map;

/**
 * 返回数据封装
 */
public class R extends HashMap {
    private static final long serialVersionUID = 1L;
    
    public R() {
        put("code", 1);
        put("msg", "success");
    }

    //错误时
    public static R error() {
        return error(500, "未知异常,请联系管理员");
    }
    
    public static R error(String msg) {
        return error(500, msg);
    }
    
    public static R error(int code, String msg) {
        R r = new R();
        r.put("code", code);
        r.put("msg", msg);
        return r;
    }

    //成功时
    public static R ok(String msg) {
        R r = new R();
        r.put("msg", msg);
        return r;
    }
    
    public static R ok(Map map) {
        R r = new R();
        r.putAll(map);
        return r;
    }
    
    public static R ok() {
        return new R();
    }

    public static R ok(Object data) {
        return new R().put("data",data);
    }

    @Override
    public R put(String key, Object value) {
        super.put(key, value);
        return this;
    }
}

子模块dao层

BookMapper.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.booksystem.dao.BookDao">
    
    <select id="getAllBooks"  resultMap="bookMap">
        select bid,bname,bauthor from  book
    select>
    
    <resultMap id="bookMap" type="book">
        <id column="bid" property="bid"/>
        <result property="bname" column="bname"/>
        <result column="bauthor" property="bauthor"/>
    resultMap>
mapper>

applicationContext.xml

<?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:p="http://www.springframework.org/schema/p"
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">

    
    <context:property-placeholder location="classpath*:db.properties" />

    
    <bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
        destroy-method="close">
        
        <property name="driverClass" value="${mysql.driver}" />
        
        <property name="jdbcUrl" value="${mysql.url}" />
        
        <property name="user" value="${mysql.uid}" />
        
        <property name="password" value="${mysql.password}" />
        
        <property name="acquireIncrement" value="${mysql.acquireIncrement}">property>
        
        <property name="initialPoolSize" value="${mysql.initialPoolSize}">property>
        
        <property name="minPoolSize" value="${mysql.minPoolSize}">property>
        
        <property name="maxPoolSize" value="${mysql.maxPoolSize}">property>
    bean>

    
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        
        <property name="configLocation" value="classpath:mybatis.xml">property>
        
        <property name="dataSource" ref="datasource"/>
        
        <property name="mapperLocations" value="classpath*:mapper/*Mapper.xml">property>
    bean>

    
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        
        <property name="basePackage" value="com.booksystem.dao"/>
    bean>

    
    
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="datasource">property>
    bean>
    
    <tx:annotation-driven transaction-manager="transactionManager" />

    
    <context:component-scan base-package="com.booksystem.dao"/>

    
    <aop:aspectj-autoproxy/>

beans>

db.properties

##mysql连接字符串
#驱动
mysql.driver=com.mysql.jdbc.Driver
#连接字符串
mysql.url=jdbc:mysql://localhost:3306/booksystem?useUnicode=true&characterEncoding=UTF-8
#用户名
mysql.uid=root
#密码
mysql.password=123456
mysql.acquireIncrement=5
mysql.initialPoolSize=10
mysql.minPoolSize=5
mysql.maxPoolSize=20

mybatis.xml

<?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>
    <properties resource="db.properties">properties>
    <settings>
        
         <setting name="logImpl" value="STDOUT_LOGGING"/>
    settings>
    
    <typeAliases>
        <package name="com.booksystem.entity"/>
    typeAliases>
configuration>

BookDao,java

package com.booksystem.dao;

import com.booksystem.entity.Book;

import java.util.List;

public interface BookDao {
    //查询全部图书信息
    public List getAllBooks();

}

子模块entity层

Book.java

package com.booksystem.entity;
/*
*图书实体类
* */
public class Book {

  private long bid; //图书编号
  private String bname; //  图书名称
  private String bauthor; //  图书作者


  public long getBid() {
    return bid;
  }

  public void setBid(long bid) {
    this.bid = bid;
  }


  public String getBname() {
    return bname;
  }

  public void setBname(String bname) {
    this.bname = bname;
  }


  public String getBauthor() {
    return bauthor;
  }

  public void setBauthor(String bauthor) {
    this.bauthor = bauthor;
  }
  //无参构造方法
  public Book(){}
  //带参构造方法
  public Book(long bid, String bname, String bauthor) {
    this.bid = bid;
    this.bname = bname;
    this.bauthor = bauthor;
  }

  @Override
  public String toString() {
    return "Book{" +
            "bid=" + bid +
            ", bname='" + bname + '\'' +
            ", bauthor='" + bauthor + '\'' +
            '}';
  }
}

写了怎么多的东西,我们需要测试一下,减少错误,现在我们只是在做练习,代码量比较少但是到了真正项目的时候代码量肯定比现在多许多,为了养成这种习惯,我一般写到Dao层的时候就进行测试一下。

BookTest.java

package com.booksystem.dao;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;

import static org.junit.Assert.*;
//指定bean注入的配置文件
@ContextConfiguration("/applicationContext.xml")
//使用标准的junit
@RunWith(SpringJUnit4ClassRunner.class)
@Transactional    //事务管理
@Rollback(true) //是否回滚
public class BookDaoTest {
    @Autowired
    private  BookDao bookDao;
    @Test
    public void getAllBooks() {
        System.out.println(bookDao.getAllBooks());
    }
}

我们看到测试结果已经出来了,如果这一步你成功了的话那么你已经完成了80%了,下一步的话我们就配置service层

子模块service层

BookService

package com.booksystem.service;

import com.booksystem.entity.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
public interface BookService {
    //查询全部图书信息
    public List getAllBooks();
}

BookImple

package com.booksystem.imple;

import com.booksystem.dao.BookDao;
import com.booksystem.entity.Book;
import com.booksystem.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class BookImple  implements BookService {
    @Autowired
    public BookDao bookDao;
    public List getAllBooks() {
        return bookDao.getAllBooks();
    }
}

子模块webui层

 我们发现在这一层中没有存放源代码的文件加,所以我们需要自己添加,选择file,project structure

生成之后的目录

BookController.java

package com.book.controller;

import com.booksystem.common.R;
import com.booksystem.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/book")
public class BookController {
    @Autowired
    public BookService bookService;
    @GetMapping("/getAllBook")
    @ResponseBody
    public R getAllBook(){
        return  R.ok(bookService.getAllBooks());
    }
}

springmvc-servlet.xml

<?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
        http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">

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

    
    <mvc:default-servlet-handler />
    
    <mvc:annotation-driven enable-matrix-variables="true" />
    
    <bean
            class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
        <property name="removeSemicolonContent" value="false" />
    bean>

    
    <bean
            class="org.springframework.web.servlet.view.InternalResourceViewResolver"
            id="internalResourceViewResolver">
        
        <property name="viewClass"
                  value="org.springframework.web.servlet.view.JstlView" />
        
        <property name="prefix" value="/WEB-INF/views/" />
        
        <property name="suffix" value=".html" />
        
        <property name="contentType" value="text/html;charset=UTF-8" />
        
        <property name="order" value="1" />
    bean>

    
    
    <bean id="multipartResolver"
          class="org.springframework.web.multipart.support.StandardServletMultipartResolver">
    bean>
    <mvc:cors>
        <mvc:mapping path="/**"
                     allowed-origins="*"
                     allowed-methods="POST,GET, OPTIONS,DELETE,PUT"
                     allowed-headers="Content-Type,ContentType,Access-Control-Allow-Headers, Authorization, X-Requested-With"
                     allow-credentials="true"/>
    mvc:cors>
beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         id="WebApp_ID" version="3.0">

  <welcome-file-list>
    
    <welcome-file>index.htmlwelcome-file>
  welcome-file-list>

  <listener>
    <description>Spring容器加载监听器description>
    <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
  listener>
  <context-param>
    <description>设置Spring加载时的配置文件位置,默认位置在WEB-INF/lib目录下description>
    <param-name>contextConfigLocationparam-name>
    <param-value>classpath*:applicationContext.xmlparam-value>
  context-param>
  
  <servlet>
    <servlet-name>springmvcservlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    <init-param>
      <param-name>contextConfigLocationparam-name>
      
      <param-value>classpath*:springmvc-servlet.xmlparam-value>
    init-param>
    
    <load-on-startup>1load-on-startup>
    
    <multipart-config>
      
      <max-file-size>5242880max-file-size>
      
      <max-request-size>20971520max-request-size>
      
      <file-size-threshold>0file-size-threshold>
    multipart-config>
  servlet>
  
  <servlet-mapping>
    <servlet-name>springmvcservlet-name>
    <url-pattern>/url-pattern>
  servlet-mapping>

  
  <filter>
    <filter-name>characterEncodingFilterfilter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
    <init-param>
      <param-name>encodingparam-name>
      <param-value>UTF-8param-value>
    init-param>
    <init-param>
      <param-name>forceEncodingparam-name>
      <param-value>trueparam-value>
    init-param>
  filter>
  
  <filter-mapping>
    <filter-name>characterEncodingFilterfilter-name>
    <url-pattern>/*url-pattern>
  filter-mapping>
web-app>

3.配置tomcat

4.项目部署

在这里我们就将项目进行热部署就可以了,我们在开发阶段就暂时不进行打包,以后我们有服务器的时候就可以打包成war或者jar包

5.启动项目

index.html


="en">

    ="UTF-8">
    图书管理系统
    


图书管理系统

="myTab" cellpadding="0" cellspacing="0" border="1">
编号 名称 作者