学习记录(二)——ssm项目的搭建与简单测试

1 构建maven项目

构建maven项目,在我之前的学习记录里已经描述了如何构建,在这里就不在重复叙述。如果构建maven项目请点击这里:构建maven项目

2 添加jar包依赖

构架ssm框架需要添加springMvc、mybatis、spring等依赖,除此之外还可以添加如数据库连接、连接池、日志、json等jar包的依赖以及jetty插件。

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 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.ssm</groupId>
  <artifactId>ssm-demo</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>ssm-demo Maven Webapp</name>
  <url>http://maven.apache.org</url>
  
  <properties>
  	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  	<spring.version>4.3.17.RELEASE</spring.version>
  </properties>
  
  <dependencies>
  	<!-- 单元测试 -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    
    <!-- springMVC 相关jar -->
	<!-- 记录程序运行时的活动的日志记录 -->
	<dependency>
	    <groupId>commons-logging</groupId>
	    <artifactId>commons-logging</artifactId>
	    <version>1.2</version>
	</dependency>
	<!-- SpringMVC框架相关,包括Servlets,Web MVC框架以及控制器和视图支持 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-webmvc</artifactId>
	</dependency>
	<!-- Spring 框架基本的核心工具类 -->
    <dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-core</artifactId>
	</dependency>
	<!-- 为Spring 核心提供了大量扩展 -->
    <dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-context</artifactId>
	</dependency>
	<!-- 使用Spring 的AOP 特性时所需的类和源码级元数据支持 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-aop</artifactId>
	</dependency>
	<!-- 包含访问配置文件、创建和管理bean 以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-beans</artifactId>
	</dependency>
	<!-- spring表达式语言 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-expression</artifactId>
	</dependency>
	<!-- 包含Web 应用开发时,用到Spring 框架时所需的核心类 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-web</artifactId>
	</dependency>
	<!-- Spring 对JDBC 数据访问进行封装的所有类 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-jdbc</artifactId>
	</dependency>
	<!-- spring 事务处理 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-tx</artifactId>
	</dependency>
	<!-- Spring对于object/xml映射的支持 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-oxm</artifactId>
	</dependency>
	<!-- Spring Context的支持,用于MVC方面 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-context-support</artifactId>
	</dependency>
	<!-- 对象关系映射 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-orm</artifactId>
	</dependency>
	<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>1.10.1.RELEASE</version>
    </dependency>
	
	<!-- mybatis -->
	<!-- 实现mybatis框架的工具包 -->
	<dependency>
	    <groupId>org.mybatis</groupId>
	    <artifactId>mybatis</artifactId>
	    <version>3.4.6</version>
	</dependency>
	<!-- 集合spring与mybatis框架的工具包 -->
	<dependency>
	    <groupId>org.mybatis</groupId>
	    <artifactId>mybatis-spring</artifactId>
	    <version>1.3.2</version>
	</dependency>
	<!-- mysql数据库连接包 -->
	<dependency>
	    <groupId>mysql</groupId>
	    <artifactId>mysql-connector-java</artifactId>
	    <version>5.1.46</version>
	</dependency>
	<!-- c3p0数据库连接池 -->
	<dependency>
	    <groupId>com.mchange</groupId>
	    <artifactId>c3p0</artifactId>
	    <version>0.9.5.2</version>
	</dependency>
	
	<!-- 日志 -->
	<dependency>
	    <groupId>org.slf4j</groupId>
	    <artifactId>slf4j-log4j12</artifactId>
	    <version>1.7.25</version>
	    <scope>test</scope>
	</dependency>
	<dependency>  
        <groupId>log4j</groupId>  
        <artifactId>log4j</artifactId>  
        <version>1.2.17</version>  
    </dependency>
    
    <!-- json -->
    <dependency>
	    <groupId>com.fasterxml.jackson.core</groupId>
	    <artifactId>jackson-databind</artifactId>
	    <version>2.9.5</version>
	</dependency>
	<dependency>
	    <groupId>com.fasterxml.jackson.core</groupId>
	    <artifactId>jackson-annotations</artifactId>
	    <version>2.9.5</version>
	</dependency>
	<dependency>
	    <groupId>com.fasterxml.jackson.core</groupId>
	    <artifactId>jackson-core</artifactId>
	    <version>2.9.5</version>
	</dependency>
	
  </dependencies>
  
  <dependencyManagement>
  	<dependencies>
  	<!-- 解决spring依赖的版本问题 -->
  		<dependency>
	  		<groupId>org.springframework</groupId>
			<artifactId>spring-framework-bom</artifactId>
			<version>${spring.version}</version>
			<type>pom</type>
			<scope>import</scope>
  		</dependency>
  	</dependencies>
  </dependencyManagement>
  
  <build>
    <finalName>ssm-demo</finalName>
    <plugins>
    	<plugin>
    		<groupId>org.apache.maven.plugins</groupId>
    		<artifactId>maven-compiler-plugin</artifactId>
    		<version>3.0</version>
    		<configuration>
    			<source>1.7</source>
    			<target>1.7</target>
    		</configuration>
    	</plugin>
    	<plugin>
    		<groupId>org.eclipse.jetty</groupId>
		    <artifactId>jetty-maven-plugin</artifactId>
		    <version>9.2.2.v20140723</version>
    	</plugin>
    	<plugin>
    		<artifactId>maven-war-plugin</artifactId>
    		<version>2.6</version>
    		<configuration>
    			<warSourceDirectory>WebContent</warSourceDirectory>
    			<failOnMissingWebXml>false</failOnMissingWebXml>
    		</configuration>
    	</plugin>
    </plugins>
  </build>
</project>

3 ssm框架的相关配置文件

3.1 ssm项目的目录结构


其中,xml文件夹是存放所有xml的配置文件,properties存放所有.properties文件。

3.2 spring.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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"  
    xmlns:mvc="http://www.springframework.org/schema/mvc"  
    xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd  
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd  
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd  
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
     
    <!-- 引入注解 -->
    <context:annotation-config /> 
    
	<!-- 注解驱动 -->
    <mvc:annotation-driven/>
        
    <!-- class annotation -->
	<context:component-scan base-package="com.f.*.controller"/>
    
    <!-- 视图解释器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
    </bean>
</beans>

3.3 mybatis-db.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:aop="http://www.springframework.org/schema/aop"   
    xmlns:tx="http://www.springframework.org/schema/tx"
    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.xsd
       http://www.springframework.org/schema/aop 
       http://www.springframework.org/schema/aop/spring-aop.xsd 
       http://www.springframework.org/schema/tx 
       http://www.springframework.org/schema/tx/spring-tx.xsd 
       ">

	<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    	<property name="locations">
    		<list>
    			<!-- 支持classpath和file寻址方式: -->
    			<value>classpath:config/properties/jdbc.properties</value>
    		</list>
    	</property>
    </bean>

	<!-- 配置数据源 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    	<property name="driverClass" value="com.mysql.jdbc.Driver"/>
    	<property name="jdbcUrl" value="jdbc:mysql://${jdbc.host}:${jdbc.port}/${jdbc.database}?useSSL=false&useUnicode=true&characterEncoding=utf8" />  
        <property name="user" value="${jdbc.username}" />  
        <property name="password" value="${jdbc.password}" />  
        <!-- 当连接池中的连接耗尽的时候c3p0一次同时获取的连接数 -->
        <property name="acquireIncrement" value="${acquireIncrement}" />  
        <!-- 初始化连接数-->
        <property name="initialPoolSize" value="${initialPoolSize}" />  
        <!-- 连接池保留的最大连接数 -->
        <property name="maxPoolSize" value="${maxPoolSize}" />  
        <!-- 连接池保留的最小连接数 -->
        <property name="minPoolSize" value="${minPoolSize}" />  
        <!-- PreparedStatements缓存的大小 -->
        <property name="maxStatements" value="${maxStatements}" />  
        <!-- 为true,每次从连接池中获取一个连接时就进行测试,如果测试连接有问题就关闭重新获取 -->
        <property name="testConnectionOnCheckout" value="true" />
    </bean>
    
    <!-- 配置sqlSessionFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    	<property name="dataSource" ref="dataSource"/><!-- 实例化sqlSessionFactory时需要使用上述配置好的数据源以及SQL映射文件 -->
    	<property name="configLocation" value="classpath:config/xml/mybatis-config.xml"/>
    </bean>
    
    <!-- Mapper动态代理开发   扫描 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 基本包 -->
        <property name="basePackage" value="com.f.ssm.mapper"/>
    </bean>
    
    <!-- 定义SqlSessionTemplate -->
    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
    	<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>
    
    <!-- 事务管理 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    	<property name="dataSource" ref="dataSource"></property>
    </bean>

</beans>

3.4 mybatis-config.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>  
    <settings>
    	<!--打开延迟加载的开关  -->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!--将积极加载改为消极加载及按需加载  -->
        <setting name="aggressiveLazyLoading" value="false"/>
        <!-- 开启驼峰规则与下划线间的映射关系 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>  
    </settings>
   	<!-- 别名配置 -->
	<typeAliases>
		<package name="com.f.ssm.model"/>
	</typeAliases>
</configuration>

3.5 properties文件配置

jdbc.properties:
jdbc.host=127.0.0.1
jdbc.database=school
jdbc.port=3306
jdbc.username=root
jdbc.password=root
acquireIncrement=1
initialPoolSize=10
maxPoolSize=50
minPoolSize=5
maxStatements=100

log4j.properties:

# Global logging configuration  
log4j.rootLogger = DEBUG,Console,Stdout
#  控制台输出
log4j.appender.Console = org.apache.log4j.ConsoleAppender  
log4j.appender.Console.layout = org.apache.log4j.PatternLayout  
log4j.appender.Console.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c:%L - %m%n  
#[Level]  DEBUG
log4j.logger.java.sql.ResultSet = INFO  
log4j.logger.org.apache = INFO  
log4j.logger.java.sql.Connection = DEBUG  
log4j.logger.java.sql.Statement = DEBUG  
log4j.logger.java.sql.PreparedStatement = DEBUG 

# log  
log4j.logger.com.fx.springRedis.mapper = DEBUG  
log4j.logger.com.fx.springRedis.controller = DEBUG  
log4j.logger.com.fx.springRedis.service = DEBUG

#输出到文件 
log4j.appender.Stdout = org.apache.log4j.DailyRollingFileAppender    
log4j.appender.Stdout.File = E://logs/log.log    
log4j.appender.Stdout.Append = true    
log4j.appender.Stdout.Threshold = DEBUG     
log4j.appender.Stdout.layout = org.apache.log4j.PatternLayout    
log4j.appender.Stdout.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c:%L - %m%n

3.6 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: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/mvc 
       http://www.springframework.org/schema/mvc/spring-mvc.xsd 
       http://www.springframework.org/schema/context 
       http://www.springframework.org/schema/context/spring-context.xsd 
       http://www.springframework.org/schema/aop 
       http://www.springframework.org/schema/aop/spring-aop.xsd 
       http://www.springframework.org/schema/tx 
       http://www.springframework.org/schema/tx/spring-tx.xsd
       ">
       
    <!-- 采用注释的方式配置bean -->
    <context:annotation-config />
    <!-- 自动扫描注解 -->
    <context:component-scan base-package="com.f.ssm" />
    <!-- 在bean容器中配置log4j -->
	<bean id="log4jInitialization"  
	 class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">  
	  <property name="targetClass"  
	      value="org.springframework.util.Log4jConfigurer" />  
	   <property name="targetMethod" value="initLogging" />  
	  <property name="arguments">  
	      <list>  
	         <value>classpath:config/properties/log4j.properties</value>  
	      </list>  
	   </property>  
	</bean>
       
    <!--导入mybatis配置  -->
    <import resource="config/xml/mybatis-db.xml"/>
       
</beans>


3.7 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" version="3.0">
  <display-name>Archetype Created Web Application</display-name>
  <filter>
    <filter-name>encodingFilter</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>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <context-param>
    <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>
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:config/xml/springmvc.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>
</web-app>

4 项目测试

ssm框架搭建完毕,在这里通过学生与班级的关系进行项目的测试,分别测试学生与班级的增删改查操作。学生与班级的关系是一对多的关系,mybatis要进行一对多的配置。

4.1 创建实体类

学生(省略了构造函数与get、set方法):

private Integer id;//学生表主键
private String name;//学生名字
private String sex;//学生性别
private Integer age;//学生年龄
private String address;//学生家庭住址
private Classes classes;//班级

班级(省略了构造函数与get、set方法):

private Integer id;//班级编号
private String className;//班级名称
private List<Student> studentList;//学生集合

4.2 配置mapper及配置文件

StudentMapper.java:

package com.f.ssm.mapper;

import java.util.List;

import com.f.ssm.model.Student;

/**
* @author 作者姓名
* @version 创建时间:2018年5月30日 下午3:14:50
* 
*/
public interface StudentMapper {
	
	/**
	 * 插入student信息
	 * @param student
	 * @throws Exception
	 */
	void saveStudent(Student student) throws Exception;
	
	/**
	 * 更新student信息
	 * @param student
	 * @throws Exception
	 */
	void updateStudent(Student student) throws Exception;
	
	/**
	 * 通过id获取student信息
	 * @param id
	 * @return
	 * @throws Exception
	 */
	Student getStudentById(Integer id) throws Exception;
	
	/**
	 * 获取所有student信息
	 * @return
	 * @throws Exception
	 */
	List<Student> getAllStudent() throws Exception;
	
	/**
	 * 根据id删除学生信息
	 * @param id
	 * @throws Exception
	 */
	public void deleteStudent(Integer id) throws Exception;

}

StudentMapper.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.f.ssm.mapper.StudentMapper">
	<!-- 设置结果集,映射学生的基本信息和对应的班级信息 -->
	<resultMap type="Student" id="StudentMap">
		<!-- 学生自身属性与数据库字段的映射 -->
		<id column="id" jdbcType="INTEGER" property="id" />
		<result column="name"  property="name"/>
		<result column="sex"  property="sex"/>
		<result column="age"  property="age"/>
		<result column="address"  property="address"/>
		<!-- association处理多对一或一对一关系 -->
		<!-- 注:javaType必须指定,表示classes的类型是Classes -->
		<association property="classes" javaType="Classes" >
			<!-- 班级自身属性与数据库字段的映射 -->
			<id column="class_id" property="id"/>
			<result column="class_name" property="className"/>
		</association>
	</resultMap>
	<!-- 保存学生信息 -->
	<insert id="saveStudent">
		insert into student (name,sex,age,address,class_id)
		value (#{name},#{sex},#{age},#{address},#{classes.id})
	</insert>
	<!-- 更新学生信息 -->
	<update id="updateStudent">
		update student set
			name = #{name},
			sex = #{sex},
			age = #{age},
			address = #{address},
			class_id = #{classes.id}
		where id = #{id}
	</update>
	<!-- 通过id查找学生信息 -->
	<select id="getStudentById" resultMap="StudentMap" parameterType="Integer">
		select s.id,s.name,s.sex,s.age,s.address,c.id as class_id,c.class_name
			from student s,classes c where s.id = #{id} and c.id = s.class_id
	</select>
	<!-- 获取所有学生信息 -->
	<select id="getAllStudent" resultMap="StudentMap">
		select s.*,c.id as class_id,c.class_name from student s,classes c
	</select>
	
	<delete id="deleteStudent" parameterType="Integer">
		delete from student where id = #{id}
	</delete>
</mapper>

ClassesMapper.java:

package com.f.ssm.mapper;
/**
* @author f
* @version 创建时间:2018年6月1日 上午10:50:55
* classesMapper接口
*/

import java.util.List;

import com.f.ssm.model.Classes;

public interface ClassesMapper {
	
	/**
	 * 通过id查询
	 * @param id
	 * @return
	 */
	public Classes getClassesById(Integer id);
	
	/**
	 * 获取班级信息
	 * @return
	 */
	public List<Classes> getAllClasses(Classes classes);
	
	/**
	 * 插入班级信息
	 * @param classes
	 */
	public void saveClasses(Classes classes);
	
	/**
	 * 更新班级信息
	 * @param classes
	 */
	public void updateClasses(Classes classes);
	
	/**
	 * 根据删除信息
	 * @param id
	 */
	public void delateClasses(Integer id);
	
}

ClassesMapper.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.f.ssm.mapper.ClassesMapper">
	<!-- 设置结果集,映射班级信息与学生对应信息 -->
	<resultMap type="Classes" id="ClassesMap">
		<!-- 班级自身属性与数据库字段的映射 -->
		<id column="id"  property="id" />
		<result column="class_name" jdbcType="VARCHAR" property="className"/>
		<!-- collection处理一对多关系 -->
		<collection property="studentList" ofType="Student">
			<id column="student_id" property="id"/>
			<result column="name"  property="name"/>
			<result column="sex"  property="sex"/>
			<result column="age"  property="age"/>
			<result column="address"  property="address"/>
		</collection>
	</resultMap>
	
	<sql id="Column_List">
		c.*,s.id as student_id,s.name,s.sex,s.age,s.address
	</sql>
	
	<sql id="Table_List">
		classes c left join student s on c.id = s.class_id
	</sql>
	
	<sql id="Where_Clause">
		where 1=1
		<if test="id!=null and id!=''">and c.id = #{id}</if>
		<if test="className!=null and className!=''">and c.class_name = #{className}</if>
	</sql>
	
	<!-- 通过id查找班级信息 -->
	<select id="getClassesById" resultMap="ClassesMap" parameterType="Integer">
		select <include refid="Column_List"/>
			from <include refid="Table_List"/>
			where c.id = #{id}
	</select>
	
	<!-- 条件查询班级信息 -->
	<select id="getAllClasses" resultMap="ClassesMap" parameterType="Classes">
		select <include refid="Column_List"/>
			from <include refid="Table_List"/>
			<include refid="Where_Clause"/>
	</select>
	
	<insert id="saveClasses">
		insert into classes (class_name) value(#{className})
	</insert>
	
	
	<update id="updateClasses">
		update classes set class_name = #{className} where id = #{id}
	</update>
	
	<delete id="deleteClasses">
		delete from classes where id = #{id}
	</delete>
	
</mapper>

4.3 service层

本文只贴出service的实现类,其接口不在重复贴出。

StudentServiceImpl.java:

package com.f.ssm.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.f.ssm.mapper.StudentMapper;
import com.f.ssm.model.Student;
import com.f.ssm.service.StudentService;

/**
* @author 作者姓名
* @version 创建时间:2018年5月31日 下午2:54:21
* 类说明
*/
@Service
public class StudentServiceImpl implements StudentService {
	
	@Autowired
	private StudentMapper studentMapper;

	/**
	 * 添加学生
	 */
	@Override
	public void saveStudent(Student student) throws Exception {
		studentMapper.saveStudent(student);
	}

	/**
	 * 更新学生
	 */
	@Override
	public void updateStudent(Student student) throws Exception {
		studentMapper.updateStudent(student);
	}

	/**
	 * 通过id获取学生信息
	 */
	@Override
	public Student getStudentById(Integer id) throws Exception {
		return studentMapper.getStudentById(id);
	}

	/**
	 * 获取所有学生信息
	 */
	@Override
	public List<Student> getAllStudent() throws Exception {
		return studentMapper.getAllStudent();
	}

	/**
	 * 删除学生
	 */
	@Override
	public void deleteStudent(Integer id) throws Exception {
		studentMapper.deleteStudent(id);
	}

	
}

ClassesServiceImpl.java:

package com.f.ssm.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.f.ssm.mapper.ClassesMapper;
import com.f.ssm.model.Classes;
import com.f.ssm.service.ClassesService;

/**
* @author f
* @version 创建时间:2018年6月1日 上午11:01:06
* 类说明
*/
@Service
public class ClassesServiceImpl implements ClassesService {

	@Autowired
	private ClassesMapper classesmapper;
	
	@Override
	public Classes getClassesById(Integer id) {
		return classesmapper.getClassesById(id);
	}

	@Override
	public List<Classes> getAllClasses(Classes classes) {
		return classesmapper.getAllClasses(classes);
	}

	@Override
	public void saveClasses(Classes classes) {
		classesmapper.saveClasses(classes);
	}

	@Override
	public void updateClasses(Classes classes) {
		classesmapper.updateClasses(classes);
	}

	@Override
	public void deleteClasses(Integer id) {
		classesmapper.delateClasses(id);
	}
}

4.4 controller层

StudentController.java:

package com.f.ssm.controller;

import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.f.ssm.model.Student;
import com.f.ssm.service.StudentService;

/**
* @author f
* @version 创建时间:2018年6月5日 上午8:35:18
* Student业务控制
*/
@Controller
@RequestMapping("/student")
public class StudentController {
	
	@Autowired
	private StudentService studentService;
	
	private final Log Logger = LogFactory.getLog(this.getClass());
	
	/**
	 * 添加学生信息
	 * @param student
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/save")
	@ResponseBody
	public String saveStudent(Student student) throws Exception {
		studentService.saveStudent(student);
		return student.toString();
	}
	
	/**
	 * 更新学生信息
	 * @param student
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/update")
	@ResponseBody
	public String updateStudent(Student student) throws Exception{
		studentService.updateStudent(student);
		return student.toString();
	}
	
	/**
	 * 根据id查找学生信息
	 * @param id
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/getStudentById/{id}")
	@ResponseBody
	public String getStudentById(@PathVariable("id") Integer id) throws Exception{
		return studentService.getStudentById(id).toString();
	}
	
	@RequestMapping("/getAllStudent")
	@ResponseBody
	public Object getAllStudent() throws Exception{
		List<Student> students = studentService.getAllStudent();
		for(Student s : students) {
			Logger.debug(s.toString());
		}
		return students;
	}
	
	@RequestMapping("/deleteStudent")
	@ResponseBody
	public String deleteStudent(@RequestParam("id") Integer id) throws Exception{
		studentService.deleteStudent(id);
		return "delete:" + id;
	}
	
}

ClassessController.java:

package com.f.ssm.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.f.ssm.model.Classes;
import com.f.ssm.service.ClassesService;

/**
* @author f
* @version 创建时间:2018年6月8日 下午1:06:36
* 类说明
*/
@Controller
@RequestMapping("/classes")
public class ClassessController {
	
	@Autowired
	private ClassesService classesService;
	
	/**
	 * 保存班级信息
	 * @param classes
	 * @return
	 */
	@RequestMapping("/save")
	public String saveClasses(Classes classes) {
		classesService.saveClasses(classes);
		return "forward:/classes/getAllClasses";
	}

	/**
	 * 更新班级信息
	 * @param classes
	 * @return
	 */
	@ResponseBody
	@RequestMapping("/update")
	public String updateClasses(Classes classes) {
		classesService.updateClasses(classes);
		return "forward:/classes/getAllClasses";
	}
	
	/**
	 * 根据Id查询信息
	 * @param id
	 * @return
	 */
	@ResponseBody
	@RequestMapping("/getClassesById/{id}")
	public Object getClassesById(@PathVariable Integer id) {
		return classesService.getClassesById(id);
	}
	
	/**
	 * 条件查询班级信息
	 * @param classes
	 * @return
	 */
	@ResponseBody
	@RequestMapping("/getAllClasses")
	public Object getAllClasses(Classes classes) {
		return classesService.getAllClasses(classes);
	}
	
	/**
	 * 根据id删除班级信息
	 * @param id
	 * @return
	 */
	@ResponseBody
	@RequestMapping("/delete")
	public String deleteClasses(@RequestParam Integer id) {
		classesService.deleteClasses(id);
		return "redirect:/classes/getAllClasses";
	}
	
	@RequestMapping("/test")
	public String test() {
		//return "redirect:/classes/getAllClasses";
		return "main";
	}
}

5 测试

本文采用apache jmeter进行测试,版本为3.3。选择部分功能进行测试:




源代码链接:https://github.com/yongmingyongye/ssm-demo

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值