zoukankan      html  css  js  c++  java
  • SSM简易版

    技术准备

    • Java:

      基础知识

    • 框架: 

      Spring,SpringMVC,Mybatis 

    • 数据库:

      Mysq

    • 开发工具:

      Eclipse,Maven

    项目结构

     

    数据库设计

      

      

    • 创建数据库:student
    SET NAMES utf8mb4;
    SET FOREIGN_KEY_CHECKS = 0;
    
    -- ----------------------------
    -- Table structure for student
    -- ----------------------------
    DROP TABLE IF EXISTS `student`;
    CREATE TABLE `student`  (
      `id` int(11) NOT NULL,
      `studentName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      `studentSex` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      `studentAge` int(255) NULL DEFAULT NULL,
      `school` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      `className` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
    
    -- ----------------------------
    -- Records of student
    -- ----------------------------
    INSERT INTO `student` VALUES (1, '小明', '', 14, '第一中学', '高三1班');
    INSERT INTO `student` VALUES (2, '小红', '', 15, '第一中学', '高三2班');
    INSERT INTO `student` VALUES (3, '小黄', '', 14, '第一中学', '高三1班');
    INSERT INTO `student` VALUES (4, '小蓝', '', 14, '第一中学', '高三2班');
    
    SET FOREIGN_KEY_CHECKS = 1;

    依赖引入

    •  pom.xml文件
    <dependencies>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>3.6</version>
            </dependency>
            
            
            
            <!-- commons Start -->
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>2.5</version>
            </dependency>
            <!-- 文件上传支持(commons-io) -->
            <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>1.3.3</version>
            </dependency>
            
            <!-- Logback相关依赖 Start(slf4j-api) -->
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>1.2.3</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>1.2.3</version>
            </dependency>
            <!-- Logback相关依赖 Ends -->
            
            <!-- Fastjson -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.46</version>
            </dependency>
            
            <!-- Spring相关依赖 Start -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jcl</artifactId>
                <version>5.0.5.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>5.0.5.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>5.0.5.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-expression</artifactId>
                <version>5.0.5.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>5.0.5.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.0.5.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>5.0.5.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>5.0.5.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>5.0.5.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-orm</artifactId>
                <version>5.0.5.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>5.0.5.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>5.0.5.RELEASE</version>
            </dependency>
            <!-- Spring相关依赖 Ends -->
            
            <!-- Druid(数据库连接池) -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.6</version>
            </dependency>
            
            <!-- MyBatis相关依赖 Start -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.4.5</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>1.3.1</version>
            </dependency>
            <!-- MyBatis相关依赖 Ends -->
            
            <!-- jstl -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
            </dependency>
            
            <!-- servlet-api -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>4.0.0</version>
                <scope>provided</scope>
            </dependency>
            
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.47</version>
            </dependency>
            
            
    </dependencies>

    配置文件

    • config.properties(数据库连接配置)
    # 配置说明
    #     driverClassName    : 数据库驱动的名称
    #     url                : 数据库的地址
    #     username        : 用户名
    #     password        : 密码
    #     maxActive        : 最大激活连接数
    #     initialSize        : 连接池启动时创建的初始化连接数量
    jdbc.mysql.driverClassName=com.mysql.jdbc.Driver
    jdbc.mysql.url=jdbc:mysql:///shiro?useUnicode=true&characterEncoding=utf8
    jdbc.mysql.username=root
    jdbc.mysql.password=root
    jdbc.mysql.maxActive=20
    jdbc.mysql.initialSize=5
    •  applicationContext.xml(Spring配置)
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:p="http://www.springframework.org/schema/p"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:util="http://www.springframework.org/schema/util"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xmlns:task="http://www.springframework.org/schema/task"
        xmlns:cache="http://www.springframework.org/schema/cache"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/util
            http://www.springframework.org/schema/util/spring-util.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
            http://www.springframework.org/schema/task
            http://www.springframework.org/schema/task/spring-task.xsd
            http://www.springframework.org/schema/cache
            http://www.springframework.org/schema/cache/spring-cache.xsd">
            
        <!-- 加载相关资源文件 -->
        <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="locations">
                <list>
                    <value>classpath:config.properties</value>
                </list>
            </property>
            <property name="fileEncoding" value="UTF-8"></property>
        </bean>
        
        <!-- 开启注解扫描 -->
        <context:annotation-config/>
    
        <!-- 自动扫描的包名 -->
        <context:component-scan base-package="org.zyu">
            <!-- 不控制 Controller注解,即与 Controller分离 -->
            <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        </context:component-scan>
        
        <!-- 配置数据源 -->
        <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
            <property name="driverClassName"     value="${jdbc.mysql.driverClassName}"></property>
            <property name="url"                 value="${jdbc.mysql.url}"></property>
            <property name="username"             value="${jdbc.mysql.username}"></property>
            <property name="password"             value="${jdbc.mysql.password}"></property>
        </bean>
    
        <!-- SqlSessionFactory -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!-- 数据库连接池 -->
            <property name="dataSource" ref="dataSource"/>
            <!-- 加载MyBatis的全局配置文件 -->
            <property name="mapperLocations">
                <list>
                    <value>classpath*:**/dao/**/*Mapper.xml</value>
                </list>
            </property>
        </bean>
    
        <!-- Mapper扫描器 -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <!-- 扫描包路径,如果需要扫描多个包,中间使用半角逗号隔开 -->
            <!-- 对**.dao包内进行扫描 -->
            <property name="basePackage" value="**.dao"/>
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        </bean>
        
        <!-- 事务管理器,对MyBatis操作数据库事务控制,Spring使用jdbc的事务控制类 -->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" scope="singleton">
            <!-- 数据源dataSource在applicationContext-mybatis.xml中配置了 -->
            <property name="dataSource" ref="dataSource"/>
        </bean>
        
        <!-- 注解的事务管理@Transactional -->
        <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
    
    </beans>
    • springMVC-servlet.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
        xmlns:context="http://www.springframework.org/schema/context" xmlns:util="http://www.springframework.org/schema/util"
        xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:task="http://www.springframework.org/schema/task"
        xmlns:cache="http://www.springframework.org/schema/cache"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/util
            http://www.springframework.org/schema/util/spring-util.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
            http://www.springframework.org/schema/task
            http://www.springframework.org/schema/task/spring-task.xsd
            http://www.springframework.org/schema/cache
            http://www.springframework.org/schema/cache/spring-cache.xsd">
    
        <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
            <!-- @ResponseBody返回JSON数据中文乱码解决,注意,此配置一定要在<mvc:annotation-driven/>配置前面 -->
            <property name="messageConverters">
                <list>
                    <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                        <property name="supportedMediaTypes">
                            <list>
                                <value>text/html;charset=UTF-8</value>
                                <value>application/json;charset=UTF-8</value>
                            </list>
                        </property>
                    </bean>
                    <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                        <property name="supportedMediaTypes">
                            <list>
                                <value>text/html;charset=UTF-8</value>
                            </list>
                        </property>
                    </bean>
                </list>
            </property>
        </bean>
    
        <!-- 静态资源映射(通用) -->
        <mvc:resources mapping="/css/**" location="/WEB-INF/css/" />
        <mvc:resources mapping="/js/**" location="/WEB-INF/js/" />
        <mvc:resources mapping="/img/**" location="/WEB-INF/img/" />
        <mvc:resources mapping="/3rd/**" location="/WEB-INF/3rd/" />
    
        <!-- 当上面要访问的静态资源不包括在上面的配置中时,则根据此配置来访问 -->
        <mvc:default-servlet-handler />
    
        <!-- 默认的注解映射的支持 -->
        <mvc:annotation-driven />
    
        <!-- 开启Controller注解支持 -->
        <!-- use-default-filters="false"只扫描指定的注解 -->
        <context:component-scan base-package="**.controller">
            <!-- 不控制 Service 注解的事务.即与Service事务分离 -->
            <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />
        </context:component-scan>
        
        <!-- SpringMVC上传文件时,需配置MultipartResolver处理器 -->
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
    
        <!-- 视图解析器 -->
        <bean id="jspViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
            <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
            <property name="prefix" value="/WEB-INF/views/" />
            <property name="suffix" value=".jsp" />
        </bean>
    
    
        <!-- 拦截器配置 -->
        <mvc:interceptors>
            <!-- 可配多个拦截器,顺序执行 -->
            <mvc:interceptor>
                <!-- [/**]表示所有url包括子url路径 -->
                <mvc:mapping path="/**"/>
                <!-- 不拦截静态资源路径下的请求 -->
                <mvc:exclude-mapping path="/css/**"/>
                <mvc:exclude-mapping path="/fonts/**"/>
                <mvc:exclude-mapping path="/img/**"/>
                <mvc:exclude-mapping path="/js/**"/>
                <mvc:exclude-mapping path="/plugins/**"/>
                <mvc:exclude-mapping path="/upload/**"/>
                <bean class="org.zyu.intercepter.BaseHandlerInterceptor"/>
            </mvc:interceptor>
        </mvc:interceptors>
    
    </beans>
    • logback.xml(打印日志信息)
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <!-- 基本信息配置 -->
        <property name="localAppName"     value="org.xujun"/>
        <property name="logHomeDir"     value="${user.dir}/logs/logback"/>
        <property name="logbackLevel"     value="DEBUG"/>
        <contextName>default</contextName>
    
        <!-- 控制台输出配置 -->
        <appender name="ConsoleAppender" class="ch.qos.logback.core.ConsoleAppender">
            <target>System.out</target>
            <encoder>
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg %n</pattern>
            </encoder>
        </appender>
    
        <!-- 针对本项目配置的日志 Start -->
        <appender name="LOCALAPP_DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <Encoding>UTF-8</Encoding>
            <Prudent>false</Prudent>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>DEBUG</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <FileNamePattern>${logHomeDir}/${localAppName}/debug/debug-%d{yyyy-MM-dd}.log</FileNamePattern>
                <MaxHistory>10</MaxHistory> <!-- 日志保留的个数 -->
            </rollingPolicy>
            <layout class="ch.qos.logback.classic.PatternLayout">
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
            </layout>
        </appender>
    
        <appender name="LOCALAPP_WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <Encoding>UTF-8</Encoding>
            <Prudent>false</Prudent>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>WARN</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <FileNamePattern>${logHomeDir}/${localAppName}/warn/warn-%d{yyyy-MM-dd}.log</FileNamePattern>
                <MaxHistory>10</MaxHistory> <!-- 日志保留的个数 -->
            </rollingPolicy>
            <layout class="ch.qos.logback.classic.PatternLayout">
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
            </layout>
        </appender>
    
        <appender name="LOCALAPP_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <Encoding>UTF-8</Encoding>
            <Prudent>false</Prudent>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>INFO</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <FileNamePattern>${logHomeDir}/${localAppName}/info/info-%d{yyyy-MM-dd}.log</FileNamePattern>
                <MaxHistory>10</MaxHistory> <!-- 日志保留的个数 -->
            </rollingPolicy>
            <layout class="ch.qos.logback.classic.PatternLayout">
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
            </layout>
        </appender>
    
        <appender name="LOCALAPP_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <Encoding>UTF-8</Encoding>
            <Prudent>false</Prudent>
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>ERROR</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <FileNamePattern>${logHomeDir}/${localAppName}/error/error-%d{yyyy-MM-dd}.log</FileNamePattern>
                <MaxHistory>10</MaxHistory> <!-- 日志保留的个数 -->
            </rollingPolicy>
            <layout class="ch.qos.logback.classic.PatternLayout">
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
            </layout>
        </appender>
        <!-- 针对本项目配置的日志 Ends -->
    
        <!-- 针对第三方配置的日志 Start -->
        <appender name="THIRDPART_DEFAULT" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <Encoding>UTF-8</Encoding>
            <Prudent>false</Prudent>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <FileNamePattern>${logHomeDir}/${localAppName}/thirdpart/thirdpart-%d{yyyy-MM-dd}.log</FileNamePattern>
                <MaxHistory>10</MaxHistory> <!-- 日志保留的个数 -->
            </rollingPolicy>
            <layout class="ch.qos.logback.classic.PatternLayout">
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
            </layout>
        </appender>
        <!-- 针对第三方配置的日志 Ends -->
    
        <!-- 针对指定包配置的日志 Start -->
        <logger name="test" addtivity="false" level="${logbackLevel}">
            <appender-ref ref="ConsoleAppender"/>
        </logger>
    
        <logger name="org" addtivity="false" level="${logbackLevel}">
            <appender-ref ref="ConsoleAppender"/>
            <appender-ref ref="THIRDPART_DEFAULT"/>
        </logger>
    
        <logger name="com" addtivity="false" level="${logbackLevel}">
            <appender-ref ref="ConsoleAppender"/>
            <appender-ref ref="THIRDPART_DEFAULT"/>
        </logger>
    
        <!-- log4jdbc 专用配置 -->
        <logger name="jdbc.sqltiming" addtivity="false" level="${logbackLevel}">
            <appender-ref ref="ConsoleAppender"/>
        </logger>
    
        <logger name="jdbc.resultsettable" level="INFO"></logger>
        <logger name="jdbc.sqlonly" level="OFF"></logger>
        <logger name="jdbc.audit" level="OFF"></logger>
        <logger name="jdbc.resultset" level="OFF"></logger>
        <logger name="jdbc.connection" level="OFF"></logger>
        <!-- 针对指定包配置的日志 Ends -->
    
        <!-- 根logger<root>此标签必须设置在最后面方可正常读取,否则系统将识别为无输出控制. 
             只有一个level属性,用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF, 
             不能设置为INHERITED或者同义词NULL. 默认是DEBUG. <root>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个loger. -->
        <root level="WARN">
            <!-- <appender-ref ref="ConsoleAppender"/> -->
        </root>
    
    </configuration>
    • web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    
        <!-- Spring的配置 Start -->
        <context-param>
            <description>配置spring读取的xml文件,param-name是spring规定,spring自动加载以下内容.</description>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml</param-value>
        </context-param>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <!-- Spring的配置 Ends -->
    
        <!-- SpringMVC 配置 Start -->
        
        <!-- Web请求编码过滤器,POST中文乱码解决方案 -->
        <filter>
            <filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    
        <!-- DispatcherServlet 配置加载 -->
        <servlet>
            <servlet-name>springMVC</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <!-- 以下配置springmvc-servlet.xml放在包内或部署的classes目录下的对应目录下皆可. -->
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:springMVC-servlet.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>
    
        <!-- SpringMVC 配置 Ends -->
        <session-config>
            <session-timeout>30</session-timeout>
        </session-config>
    </web-app>

     好了,基本配置完成,接下来开始写代码。

    ① 实体类设计

    实体类的字段名需要和数据库的一一对应

    • 在Package【org.zyu.bean】下创建Student类
    package org.zyu.bean;
    
    public class Student {
    
        private Integer id;
        private String studentName;
        private String studentSex;
        private Integer studentAge;
        private String school;
        private String className;
    
        public Student() {
        }
    
        public Student(Integer id, String studentName, String studentSex, Integer studentAge, String school,
                String className) {
            this.id = id;
            this.studentName = studentName;
            this.studentSex = studentSex;
            this.studentAge = studentAge;
            this.school = school;
            this.className = className;
        }
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getStudentName() {
            return studentName;
        }
    
        public void setStudentName(String studentName) {
            this.studentName = studentName;
        }
    
        public String getStudentSex() {
            return studentSex;
        }
    
        public void setStudentSex(String studentSex) {
            this.studentSex = studentSex;
        }
    
        public Integer getStudentAge() {
            return studentAge;
        }
    
        public void setStudentAge(Integer studentAge) {
            this.studentAge = studentAge;
        }
    
        public String getSchool() {
            return school;
        }
    
        public void setSchool(String school) {
            this.school = school;
        }
    
        public String getClassName() {
            return className;
        }
    
        public void setClassName(String className) {
            this.className = className;
        }
    
        @Override
        public String toString() {
            StringBuilder builder = new StringBuilder();
            builder.append("Student [id=");
            builder.append(id);
            builder.append(", studentName=");
            builder.append(studentName);
            builder.append(", studentSex=");
            builder.append(studentSex);
            builder.append(", studentAge=");
            builder.append(studentAge);
            builder.append(", school=");
            builder.append(school);
            builder.append(", className=");
            builder.append(className);
            builder.append("]");
            return builder.toString();
        }
    
    }

    ② DAO类设计

    DAO,即 Date Access Object,数据库访问对象,就是对数据库相关操作的封装,让其他地方看不到 JDBC 的代码。

    在【org.zyu.dao】下创建【StudentMapper】接口(注意:接口的方法名需要和映射文件的id一致

    package org.zyu.dao;
    
    import java.util.List;
    
    import org.zyu.bean.Student;
    
    public interface StudentMapper {
    
        /**
         * 获取学生列表
         * @return List<Bean>
         */
        List<Student> getStudentList();
    
    }

    在【org.zyu.dao】下创建【StudentMapper.xml】映射文件(注意:namespace:对应接口的相对路径

    <?xml version="1.0" encoding="UTF-8" ?>  
    <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" 
    "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
    <mapper namespace="org.zyu.dao.StudentMapper">
        
        <!-- 查询学生列表 -->
        <select id="getStudentList" resultType="org.zyu.bean.Student">
            SELECT * FROM student
        </select>
    
    </mapper>

    ③ 业务类设计

    • 问题:为什么不直接使用 Dao 类而是还要在上面封装一层 Service 层呢?
    • 回答:
      基于责任分离的原则,Dao 层就应该专注于对数据库的操作,而在 Service 层我们可以增加一些非 CRUD 的方法去更好的完成本身抽离出来的 service 服务(业务处理)。

    在【org.zyu.service】包下创建【StudentService】接口:

    package org.zyu.service;
    
    import java.util.List;
    
    import org.zyu.bean.Student;
    
    public interface StudentService {
        /**
         * 获取所有学生列表
         * @return
         */
        List<Student> getStudentList();
    
    }

    在【org.zyu.service.impl】下创建【StudentServiceImpl】:

    package org.zyu.service.impl;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.zyu.bean.Student;
    import org.zyu.dao.StudentMapper;
    import org.zyu.service.StudentService;
    
    @Service
    public class StudentServiceImpl implements StudentService {
    
        @Autowired
        private StudentMapper mapper;
    
        public List<Student> getStudentList() {
            return mapper.getStudentList();
        }
    
    }

    ④ 功能开发

    在【org.zyu.controller】包下创建【StudentController】控制器:

    package org.zyu.controller;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.zyu.service.StudentService;
    
    import com.alibaba.fastjson.JSONObject;
    
    @Controller
    public class StudentController {
    
        @Autowired
        public StudentService studentService;
    
        @RequestMapping("/showList")
        @ResponseBody
        public JSONObject getStudentList() {
            JSONObject data = new JSONObject();
            data.put("list", studentService.getStudentList());
            return data;
        }
    
    }

    运行项目。。。

    输入网址:http://localhost:8080/java_Excel/showList

    项目地址:https://pan.baidu.com/s/1mg9AZUzMVomqRxduCWNE0Q     密码:8z6j

  • 相关阅读:
    快速创建MockAPI
    Eolinker SaaS 7.5 版本更新
    【翻译】几个优质的REST API工具
    建立RESTful API测试程序的基础
    Ubuntu下gcc安装及使用
    c++转化成delphi的代码
    VCL组件的属性和方法详解
    Delphi组件开发教程指南目录
    FASM 第一章 简介
    (一)SQL 基础知识
  • 原文地址:https://www.cnblogs.com/zyulike/p/9836452.html
Copyright © 2011-2022 走看看