一、准备工作
第一步:创建数据库
在Navicat
中创建数据库"edu
"。
CREATE DATABASE IF NOT EXISTS `edu` DEFAULT CHARACTER SET utf8;
mysql> USE `edu`;
CREATE TABLE `score` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`stuName` VARCHAR(20) DEFAULT NULL,
`gender` CHAR(1) DEFAULT NULL,
`courseName` VARCHAR(50) DEFAULT NULL,
`courseScore` INT(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
Database changed
第二步:在Eclipse中配置tomcat和JRE
二、搭建开发环境
第一步:创建maven项目
项目名 | 项目描述 |
---|---|
edusys | 该项目采用spring 、springMVC 、MyBatis 框架实现学生成绩的增、删、改、查的功能。 |
- 至此,
Maven
项目创建完成,但是其会报错,如下图所示:
解决办法:
- 选中项目,右击鼠标显示如图所示:
- 问题已解决,如图所示:
第二步:导入jar包依赖(pom.xml文件)
序号 | jar包名 | 解释 | groupId &artifactId |
---|---|---|---|
1 | pageHelper | MyBatis分页插件 | com.github.pagehelper & pagehelper |
2 | mybatis-generator-core | mybatis生成器核心 | org.mybatis.generator & mybatis-generator-core |
3 | spring mvc | spring mvc框架 | org.springframework & spring-webmvc |
4 | jackson-databind | jackson数据绑定 | com.fasterxml.jackson.core & jackson-databind |
5 | JSR303 | JSR303数据校验支持 | org.hibernate & hibernate-validator |
6 | Spring-Jdbc | Spring-Jdbc | org.springframework & spring-jdbc |
7 | Spring-test | Spring-test | org.springframework & spring-test |
8 | spring-aop | Spring面向切面编程 | org.springframework & spring-aop |
9 | aspectjrtr | org.aspectj & aspectjrt | |
10 | MyBatis | MyBatis框架 | org.mybatis&mybatis |
11 | mybatis-spring | MyBatis与Spring的整合包 | org.mybatis & mybatis-spring |
12 | mysql | MySQL数据库驱动 | mysql & mysql-connector-java |
13 | 数据库连接池 | 数据库连接池 | com.mchange & c3p0 |
14 | JSTL | javax.servlet & jstl | |
15 | servlet-api可以来自于tomcat,也可以来自于pom,二者任选其 | javax.servlet & javax.servlet-api | |
16 | jsp-api | javax.servlet.jsp & jsp-api | |
17 | 上传文件组件 | commons-fileupload & commons-fileupload | |
18 | junit | junit & junit |
pom.xml
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>edu</groupId>
<artifactId>edusys</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<!-- 1、pageHelper分页插件 -->
<!-- <dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.11</version>
</dependency> -->
<!-- 2、mybatis逆向工程 -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.4.0</version>
</dependency>
<!-- 3、spring mvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<!-- 4、返回json字符串的支持 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.1</version>
</dependency>
<!--5、JSR303数据校验支持 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.0.Final</version>
</dependency>
<!--6、 Spring-Jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<!--7、Spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.0.RELEASE</version>
<scope>test</scope>
</dependency>
<!-- 8、Spring面向切面编程 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<!-- 9. -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.9.5</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.5</version>
</dependency>
<!--10、MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!-- 11、MyBatis与Spring的整合包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.3</version>
</dependency>
<!--12、 数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
</dependency>
<!-- 13、数据库连接池 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.4</version>
</dependency>
<!-- 14、JSTL -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- 15、servlet-api可以来自于tomcat,也可以来自于pom,二者任选其一 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<!-- 16、jsp-api可以来自于tomcat,也可以来自于pom,二者任选其一 -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
<!-- 17、上传文件组件 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<!-- 18、junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
第三步:启动spring容器(web.xml文件)
启动spring
容器就是启动下图中最大框所示的spring
容器。
在web.xm
l中添加监听器来启动spring容器
,启动代码是固定写法。
在web.xml
中alt+/
打开提示面板,选择倒数第三项用于配置启动spring
容器。
添加完成之后如下图所示:
1、配置代码如下
<!-- 1、启动spring容器 -->
<!-- needed for ContextLoaderListener -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- Bootstraps the root web application context before servlet initialization -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
2、代码解析
- (1)
param-value
用于设置spring
框架的配置文件。 - (2)
classpath:
表示类路径,classpath
对应到maven
骨架的src/main/resources
目录。 - (3)
applicationContext.xml
是spring
框架的配置文件,spring
在运行期间就会按照applicationContext.xml
配置的内容运行。
3、创建spring框架的配置文件
在src/main/resources
目录下创建spring
配置文件,名称为applicationContext.xml
选择:aop、beans、context、tx
目录结构:
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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/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">
</beans>
第四步:启动SpringMVC框架(web.xml文件)
启动springMVC
就是启动如下图控制器部分。
启动springMVC
是在web.xml
中通过配置启动的。
在web.xml
中alt +/
在提示面板中选择倒数第二项,如下图所示
目录结构:
1、配置代码
web.xml
<!-- 2、启动springMVC -->
<!-- The front controller of this Spring Web application, responsible for handling all application requests -->
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>location</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Map all requests to the DispatcherServlet for handling -->
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>url</url-pattern>
</servlet-mapping>
对默认的配置做如下改动
1:修改springmvc
配置文件的存储位置和文件名称
2:设置映射路径的入口
修改后的配置如下
<!-- 2、启动springMVC -->
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
2.代码解析
(1)param-value
用于设置springMVC
框架的配置文件。
(2)classpath:
表示类路径,classpath
对应到maven
骨架的src/main/resources
目录
(3)springmvc.xml
是springMVC
框架的配置文件,springMVC
在运行期间就会按照springmvc.xml
配置的内容运行。
3.创建springmvc的配置文件
在src/main/resources
目录下创建springMVC
配置文件,名称为springmvc.xml
选择:benas、context、mvc
目录结构
springMVC配置文件原码:
<?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">
</beans>
第五步:设置编码过滤器(web.xml文件)
Spring
框架提供了一个过滤器,名称是org.springframework.web.filter. CharacterEncodingFilter
这个过滤器专门用于控制乱码的情况,我们只需要在web.xml
中对这个监听器配置即可。
<!-- 3、编码过滤器 -->
<filter>
<filter-name>character</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>character</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
第六步:创建数据库连接字符串配置文件
在src/main/resourcs
目录下创建名称为db.properties
文件,该文件用于配置数据库连接信息。
具体配置如下
目录结构:
数据库连接字符串配置文件原码:
db.properties
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc\:mysql\://localhost\:3306/luasedu1?characterEncoding=utf-8
jdbc.user=root
jdbc.password=root
jdbc.initialPoolSize=10
jdbc.maxPoolSize=100
jdbc.minPoolSize=10
jdbc.acquireIncrement=10
第七步:配置spring框架的配置文件
spring框架
的配置文件为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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/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">
<!-- 第一项配置:创建service的bean对象,创建dao的bean对象 -->
<context:component-scan base-package="cn.edu.services;cn.edu.dao"></context:component-scan>
<!-- 第二项配置:加载数据库连接字符串,创建数据源 -->
<context:property-placeholder location="classpath:db.properties"/>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
<!-- 初始化时的连接数,取值应该在maxPoolSize和minPoolSize之间,默认是3 -->
<property name="initialPoolSize" value="${jdbc.initialPoolSize}"></property>
<!-- 连接池中保留的最大连接数量,默认15 -->
<property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
<!-- 连接池中保留的最小连接数量,默认3 -->
<property name="minPoolSize" value="${jdbc.minPoolSize}"></property>
<!-- 当连接池中的连接耗尽的时候,c3p0一次同时获取的连接数,默认3 -->
<property name="acquireIncrement" value="${jdbc.acquireIncrement}"></property>
</bean>
<!-- 第三项配置:spring整合mybatis -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 3.1注入数据源 -->
<property name="dataSource" ref="dataSource"></property>
<!-- 3.2注入配置文件 -->
<property name="configLocation" value="classpath:mybatisConfig.xml"></property>
<!-- 3.3注入映射文件 -->
<property name="mapperLocations" value="classpath:mapper/*.xml"></property>
</bean>
<!-- 将mybatis生成的dao的代理对象交给spring容器管理 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.edu.dao"></property>
</bean>
<!-- 第四项配置:声明式事务 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<aop:config>
<aop:pointcut expression="execution(* cn.edu.services..*(..))" id="txPoint"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint"/>
</aop:config>
<tx:advice id="txAdvice">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED"/>
<tx:method name="select*" read-only="true"/>
</tx:attributes>
</tx:advice>
</beans>
</beans>
第八步:配置springMVC的配置文件
Springmvc框架
的配置文件`springmvc.xml``的包含如下:
- (1)负责创建
Controller
对象 - (2)配置注解驱动
- (3)配置视图解析器
- (4)配置静态资源访问
<?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">
<!-- 配置1:负责创建Controller对象 -->
<context:component-scan base-package="cn.edu.controller"></context:component-scan>
<!-- 配置2:配置注解驱动-->
<mvc:annotation-driven />
<!-- 配置3:配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 配置4:配置静态资源访问 -->
<mvc:default-servlet-handler/>
</beans>
第九步:mybatis框架的配置文件
Mybatis
配置文件在classpath
目录下,名称为mybatisConfig.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>
<typeAliases>
<package name="cn.edu.models"/>
</typeAliases>
</configuration>
第十一步:mybatis的映射文件
Mybatis
的映射文件都存放在classpath(rc/main/rescources)
目录下的mapper
目录下。
目前项目中有一张表,名称是score
,因此为score
表创建一个映射文件,命名为score.xml
。
目录结构:
Score.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="org.mybatis.example.BlogMapper">
</mapper>
第十二步:配置日志文件
首先创建log4j
日志的配置文件,放在src/main/rescources
目录下,命名为log4j.properties
。
目录结构
log4j.properties
配置内容如下:
log4j.properties
log4j.rootLogger=debug,stdout,file
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.appender.file = org.apache.log4j.FileAppender
log4j.appender.file.File = d\:/logs/ssm.log
log4j.appender.file.Encoding=UTF-8
log4j.appender.file.name = fileLogDemo
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}[ %p ]%m%n
log4j.appender.file.append = true
第十三步:分包
根据包的规范,将所有的包都创建出来
控制器包 | 业务包 | Dao包 | Models包 |
---|---|---|---|
cn.edu.controller | cn.edu.services | cn.edu.dao | cn.edu.models |
注意:
- 到此为止,项目的架构搭建完成,后续的添加学生成绩,查询成绩等业务都需要在这个基础上进行开发。
- 分包时是按照功能分类的。
测试搭建是否成功
创建一个helloworld
程序,根据helloword
运行结果判断搭建是否成功
第一步:在cn.edu.controller
包中创建控制器类,命名为HelloWorld
。代码如下
package cn.edu.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloWorld {
@RequestMapping("/hello")
public String hello(Model model) {
model.addAttribute("message", "hello world");
return "hello";
}
}
第二步:在WEB-INF/views
目录中创建hello.jsp
文件,hello.jsp
文件内容如下
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
您好!${message}
</body>
</html>
第三步:在浏览器中测试hello
,
输入网址如下
http://localhost:8080/luas/hello
三、业务开发
3.1、保存成绩业务
SSM项目
如何连接数据库
连接数据库的信息都在db.properties
配置文件中,要保证配置正确。
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc\:mysql\://localhost\:3306/luasedu1?characterEncoding=utf-8
jdbc.user=root
jdbc.password=root
jdbc.initialPoolSize=10
jdbc.maxPoolSize=100
jdbc.minPoolSize=10
jdbc.acquireIncrement=10
业务实现流程:
界面上需要填写4个数据,分别是学生姓名,性别,课程名称,课程成绩。
这四个数据需要从界面传递到controller
,从controller
传递到services
,从services
传递到dao
,dao
调用mybatis
,由mybatis
将数据添加入库。
数据传递
最优设计是使用实体类的对象进行传输。你可以将实体类对象理解为一个箱子,我们将要传输的数据放到箱子中,然后你只需要将这个箱子传递到dao就实现了将四个数据都传递到dao了。
在编程的领域中将这个专门传输数据的箱子称为实体类
,通常实体类的类名与表名一致,实体类的属性名称和属性类型与表的列名称和列类型一致。
存放实体类的包通常叫做models
或者叫做entity
。
实体类的类名建议使用表名+Model
,或者表名+Entity
。
第1步:创建实体类
数据使用实体类从界面传输到dao
创建实体类ScoreModel.java
:
package cn.edu.models;
public class ScoreModel {
private int id;
private String stuName;
private String gender;
private String courseName;
private String courseScore;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getCourseName() {
return courseName;
}
public void setCourseName(String courseName) {
this.courseName = courseName;
}
public String getCourseScore() {
return courseScore;
}
public void setCourseScore(String courseScore) {
this.courseScore = courseScore;
}
}
注意:实体类的属性要与数据库中score表
的列要相互对应。
第2步:声明dao的接口
在cn.edu.dao
包中定义接口,命名为ScoreDao
,该接口专门与用于操作score表
。例如向score表中添加成绩,查询成绩,删除成绩,修改成绩。
现在在ScoreDao
接口中定义添加成绩的方法。
ScoreDao接口
原码:
package cn.edu.dao;
import cn.edu.models.ScoreModel;
public interface ScoreDao {
// 添加成绩
public abstract void insert(ScoreModel scoreModel);
}
解析:
接口中insert
方法表示向score表
添加成绩
Insert方法
的参数ScoreModel
表示从界面传递过来的数据.
第3步:定义mybatis映射文件
Mybatis
的映射文件被存放在resources
目录下的mapper
目录下,名称为score.xml
。
score.xml
在配置添加成绩时,必须保证四个规范与接口完全对应。
- (1)
mapper
的namespace
的值必须是接口的完全限定名一致 - (2)
insert
标签的id的值必须与接口中方法的名称一致 - (3)
insert
标签中的parameterType
的值必须与接口中方法的参数类型一致 - (4)
insert
标签中的resultType
的值必须与接口中方法的返回值一致
score.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="cn.edu.dao.ScoreDao">
<insert id="insert" parameterType="cn.edu.models.ScoreModel">
INSERT INTO score(stuName,gender,courseName,courseScore)VALUES (#{stuName,},#{gender},#{courseName},#{courseScore})
</insert>
</mapper>
第4步:创建业务类ScoreService
业务类的类名应该是 表名+Service
因此score表
的业务类名称为ScoreServices
该类定义如下:
package cn.edu.services;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.edu.dao.ScoreDao;
import cn.edu.models.ScoreModel;
@Service
public class ScoreService {
@Autowired
private ScoreDao scoreDao;
public void insert(ScoreModel scoreModel) {
scoreDao.insert(scoreModel);
}
}
解析
(1)业务类上必须标注@Service
注解,只有标注了@Service
注解了类,spring
才认为是业务类。
(2)ScoreService
需要ScoreDao
来保存数据,因此将ScoreDao
定义为ScoreService
的属性,该属性需要从spring
中注入对象,因此在该属性上标注@Autowired
即可。
第5步:定义Controller
控制器类建议使用 表名+Controller
命名。因此Score表
的控制器定义为ScoreController
。
代码如下:
package cn.edu.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import cn.edu.models.ScoreModel;
import cn.edu.services.ScoreService;
@Controller
@RequestMapping("/score")
public class ScoreController {
@Autowired
private ScoreService scoreService;
//用于显示添加界面的方法
@RequestMapping("/preparedInsert")
public String preparedInsert() {
return "score/insert";
}
//用于添加成绩的方法
@RequestMapping("/insert")
public String insert(@Validated ScoreModel scoreModel,BindingResult br,Model model) {
System.out.println(scoreModel.getStuName());
if(br.hasErrors()) {
List<FieldError> errors = br.getFieldErrors();
for(int i = 0;i<errors.size();i++) {
String fielId = errors.get(i).getField();
String message = errors.get(i).getDefaultMessage();
model.addAttribute(fielId,message);
}
model.addAttribute("scoreModel", scoreModel);
return "score/insert";
}
scoreService.insert(scoreModel);
return "redirect:/score/preparedInsert";//成绩添加完成后,跳转到添加成绩界面
}
}
第6步:界面的代码
WEB-INF/score/insert.jsp
是添加成绩的界面
代码如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert</title>
</head>
<body>
添加学生成绩
<br>
<form action="${pageContext.request.contextPath }/score/insert" method="post">
学生姓名<input type="text" name="stuName" /><br />
学生性别<input type="radio" name="gender" value="男">男
<input type="radio" name="gender" value="女">女<br>
课程名称<input type="text" name="courseName"><br>
课程成绩<input type="number" name="courseScore"><br>
<input type="submit" value="保存成绩">
</form>
</body>
</html>
单元测试:
在Tomcat服务其中启动项目edusys.
在浏览器中输入:
http://localhost:9090/edusys/score/preparedInsert