技术准备

  • 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

最新文章

  1. 一些Unity基础操作的性能测试
  2. 4412开发板升级4.2之后改了logo开机后屏幕闪解决办法
  3. pom 详解
  4. 彻底解决Spring MVC 中文乱码 问题
  5. 用提交按钮提交form问题验证没通过依然提交表单
  6. js 图片切换效果
  7. 域名转化到IP地址的实现
  8. 非常好的Demo网站
  9. Linux sed命令常用方法
  10. 使用 trait 时报PHP Parse error: syntax error, unexpected &#39;use&#39; (T_USE) 这个错误
  11. rsa 密钥和公钥的生成
  12. Spring Boot--war发布
  13. WinSock 异步I/O模型-2
  14. 大数据技术生态圈形象比喻(Hadoop、Hive、Spark 关系)
  15. redis jedis使用
  16. Java 问题定位工具 -- jps
  17. 20秒教你如何写maven2的pom文件的依赖包
  18. python的for循环、while循环
  19. 【Java】接口(interface)VS抽象类
  20. 04_web基础(八)之车票实现增删改查初级版本

热门文章

  1. CSS3 box-shadow阴影
  2. 序列标注(BiLSTM-CRF/Lattice LSTM)
  3. 1. SOFAJRaft源码分析— SOFAJRaft启动时做了什么?
  4. 【Tomcat】tomcat7 设置成系统服务启动
  5. Android Studio 优秀插件: Parcelable Code Generator
  6. Mysql高手系列 - 第24篇:如何正确的使用索引?【高手进阶】
  7. HashMap底层数据结构详解
  8. python编程基础之二十二
  9. 【POJ2001】Shortest Prefixes
  10. pc vue 项目中的菜单权限控制