一.了解SSM框架
SSM框架是spring、spring MVC 、和mybatis框架的整合,是标准的MVC模式。标准的SSM框架有四层,分别是dao层(mapper),service层,controller层和View层。使用spring实现业务对象管理,使用spring MVC负责请求的转发和视图管理,mybatis作为数据对象的持久化引擎。
1.持久层:dao层(mapper)层
作用:主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此。
Dao层首先设计的是接口,然后再Spring的配置文件中定义接口的实现类。
然后可以在模块中进行接口的调用来进行数据业务的处理。(不在关心接口的实现类是哪个类)
数据源的配置以及有关数据库连接的参数都在Spring的配置文件中进行配置。
2.业务层:Service层
作用:Service层主要负责业务模块的逻辑应用设计。
先设计接口然后再设计实类,然后再在Spring的配置文件中配置其实现的关联。(业务逻辑层的实现具体要调用到自己已经定义好的Dao的接口上)这样就可以在应用中调用Service接口来进行业务处理。
建立好Dao之后再建立service层,service层又要在controller层之下,因为既要调用Dao层的接口又要提供接口给controller层。每个模型都有一个service接口,每个接口分别封装各自的业务处理的方法。
3.表现层:Controller层(Handler层)
作用:负责具体的业务模块流程的控制。
配置也同样是在Spring的配置文件里面进行,
调用Service层提供的接口来控制业务流程。
业务流程的不同会有不同的控制器,在具体的开发中可以将我们的流程进行抽象的归纳,设计出可以重复利用的子单元流程模块。
4.View层
作用:主要和控制层紧密结合,主要负责前台jsp页面的表示。
各层之间的联系
DAO层,Service层这两个层次都可以单独开发,互相的耦合度很低,完全可以独立进行,这样的一种模式在开发大项目的过程中尤其有优势,Controller,View层因为耦合度比较高,因而要结合在一起开发,但是也可以看作一个整体独立于前两个层进行开发。这样,在层与层之前我们只需要知道接口的定义,调用接口即可完成所需要的逻辑单元应用,一切显得非常清晰简单。
二.SSM框架搭建
1.新建maven工程
勾选从archetype创建选项
再选中org.apache.maven.arcetypes:maven-archetype-webapp
自己选择填写工件的名称和其组ID以及其所存放的位置
maven主路径,用户设置文件,本地仓库都选中apache-maven包里的文件,repositiory是自己创建的。
2.导入poml依赖
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <!--<scope>test</scope>--> </dependency> <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 --> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.2</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging --> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.25</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>4.2.6.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.2.6.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.2.6.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-core --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.2.6.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-expression --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>4.2.6.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-test --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.2.6.RELEASE</version> <!--<scope>test</scope>--> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>4.2.6.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.aspectj/com.springsource.org.aspectj.weaver --> <!--<dependency>--> <!--<groupId>org.aspectj</groupId>--> <!--<artifactId>com.springsource.org.aspectj.weaver</artifactId>--> <!--<version>1.6.8.RELEASE</version>--> <!--</dependency>--> <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.6.8</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.2.6.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-web --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.2.6.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.2.6.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.2.1</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/taglibs/standard --> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.1.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-servlet-api --> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-servlet-api</artifactId> <version>7.0.78</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.1.5</version> </dependency>
覆盖掉 <dependencies></dependencies>中的内容。
3.创建xml文件
3.1创建database.properties文件
在java包中创建resources文件,并将其设置为资源根目录
在resources中创建database.properties文件,其中放置的是与数据连接的ip,用户信息
mysqldriver=com.mysql.cj.jdbc.Driver mysqlurl=jdbc:mysql://192.168.61.141:3306/exam?allowMultiQueries=true mysqluser=root mysqlpwd=root oracleDriver=oracle.jdbc.driver.OracleDriver oracleUrl=jdbc:oracle:thin:@192.168.61.143:1521:prod oracleuser=scott oraclepwd=scott
3.2创建applicationContext.xml文件
依旧是在resources中创建applicationContext.xml文件,这其中放的是配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd"> <!-- 包的注解扫描 --> <context:component-scan base-package="nj.zb.kb21"></context:component-scan> <!--数据库配置信息 --> <context:property-placeholder location="classpath:database.properties"></context:property-placeholder> <!--加载数据 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="jdbcUrl" value="${mysqlurl}"/> <property name="driverClass" value="${mysqldriver}"/> <property name="user" value="${mysqluser}"/> <property name="password" value="${mysqlpwd}"/> </bean> <!--配置SqlSessionFactory工厂对象--> <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!--加载数据源--> <property name="dataSource" ref="dataSource"></property> <!--扫描实体类包--> <property name="typeAliasesPackage" value="nj.zb.kb21.pojo"></property> <!--扫描Sql的配置文件(dao接口的实现xml文件)--> <property name="mapperLocations" value="classpath:mappers/ExamDao.xml"></property> </bean> <!--完成映射类--> <bean id="scannerConFigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactoryBeanName" value="sessionFactory"/> <property name="basePackage" value="nj.zb.kb21.dao"></property> </bean> <!--事务管理--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven> <mvc:annotation-driven/> </beans>
3.3创建mappers目录,映射dao层接口 (这个步骤要放在dao层对象接口完成后)
<?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="nj.zb.kb21.dao.ExamDao"> <insert id="addStudent"> insert into exam.student (id,name,age,gender,telephone,email,classId) values (null,#{name},#{age},#{gender},#{telephone},#{email},#{classId}) </insert> <select id="getAllClasses" resultType="nj.zb.kb21.pojo.Classes"> select id, name from exam.classes; </select> <select id="getAllStudent" resultType="nj.zb.kb21.pojo.Student"> select s.id, s.name, s.age, s.gender, s.telephone, s.email, s.classid from exam.student s left join classes c on s.classid = c.id </select> </mapper>
4、创建controller,dao,pojo,service,test文件夹
5.创建dao层,实现需求方法
6.创建service层,调用dao层,实现业务逻辑
通过new dao层接口,创建对象,来实现接管dao层
再创建service java类来实现方法
7.controller控制层,通过new Service层接口对象,调用方法,实现web界面增删改查
8.全部创建完后,在webapp.WEB-INF的web.xml文件中完成文件配置
<?xml version="1.0" encoding="UTF-8"?> <web-app 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" version="2.5"> <display-name>Archetype Created Web Application</display-name> <welcome-file-list> <welcome-file>index1.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>Dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>Dispatcher</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <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> </web-app>
9.测试类测试
package test; import nj.zb.kb21.dao.ExamDao; import nj.zb.kb21.pojo.Classes; import nj.zb.kb21.pojo.Student; import nj.zb.kb21.service.ExamService; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import java.util.List; public class ExamTest { @Test public void testGetAllStudent(){ // System.out.println("hello java"); ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); System.out.println(context); ExamDao examDao = (ExamDao)context.getBean("examDao"); System.out.println(examDao); List<Classes> allClasses = examDao.getAllClasses(); for (Classes cls:allClasses){ System.out.println(cls); } System.out.println("------------------------"); List<Student> allStudent = examDao.getAllStudent(); for (Student stu:allStudent){ System.out.println(stu); } } @Test public void testGetAllClasses(){ // System.out.println("hello getClasses"); ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); System.out.println(context); ExamService examService = (ExamService)context.getBean("examService"); System.out.println(examService); } }
10.tomcat运行
运行需要主要:
http://192.168.1.101:8080/loadstu.do
http://192.168.1.101:8080/loadcla.do
http://192.168.1.101:8080/savestu.doname=zhh&age=21&gender=1&telephone=12345532222&email=zhh@qq.com&classid=1