用ssm(Springmvc、Spring、Mybaits)框架开发项目的一般流程

一、了解什么是ssm框架?
指的是Spring、SpringMVC和Mybaits三个框架组合在一起,相互之间共同协作的框架。
Spring,是一个开发企业级应用的开源框架,常说是程序员的春天,因为他的出现,大大简化了程序员在项目开发当中的很多繁琐的细节,使得程序员能够花费更多的精力在程序的设计之上。主要由Spring Core、Spring AOP、Spring Web MVC、SpringDAO、SpringORM、Spring Context、Spring Web七大模块组成。
其中Spring IOC容器和Spring AOP是两大核心。
1.Spring IOC容器,叫做控制反转,其实Spring IOC只是一个思想,具体的实现由他下面的Spring DI完成。【控制反转的理解:这里会涉及到工厂模式,例如,原来有一个人的这个对象想要吃一个炸鸡汉堡,他得去想创建一个炸鸡汉堡的这个对象才能吃到;而现在有了Spring之后,你不需要自己再去创建这个炸鸡汉堡的对象了,当你想吃的时候由Spring工厂创建之后丢给你。前后之间的角色反转了,你以前是主动创建一个炸鸡汉堡对象之后再吃,现在是被动的,SpringIOC容器给你创建炸鸡汉堡对象丢给你吃】,这就是Spring的好处之一解耦
2.Spring AOP面向切面的开发,面向切面开发理解:这里会涉及到代理模式以前想要解决程序的代码冗余,提高编写代码质量和代码的复用,出现了java继承(java继承是类级别的操作);但是,假如现在我的每一个方法方法里面都有一段重复的,执行相同操作的代码,每个方法都写一遍,代码不仅冗余,代码质量也不高,而要解决这一问题,显然继承就不能够完成我们的需求,因此产生了Spring AOP,我们要想使用的时候只需在调用这个方法时,使用Spring AOP技术切就行了;具体实现,可在引用JUnit测试框架下面使用 @Before在…之前切,@After在…会后切,@Round在…周围切(在之前和在之后切)】
SpringMVC,前后端交互的框架,代替之前的servlet,底层是对servlet进行了封装
Mybaits(手动的/半自动,要写大量SQL语句,灵活,便于优化),持久层框架,与之相对应的还有Hibernate(关系型映射框架全自动的,移植性比Mybaits高)框架 ,底层对JDBC进行了封装,对数据库进行CRUD一系列操作。【持久层框架理解:先了解一个概念,数据的持久性保存有两种方式,一种是保存在文件,另一种是保存在数据库(其实,数据库底层也是文件);而使用Mybaits框架就是对数据在数据库的保存,所以叫做持久层框架】
二、开发流程
1)、创建Maven项目(mvc开发模式为例)**
2)、创建static文件【放前端页面的文件夹】,建在WEB—INF文件下(放前端代码,前端以Element UI + Vue框架为例,暂不阐述)
在这里插入图片描述

3)、实体层 entity
4)、 前后台交互控制层 controller
5)、数据库访问层 mapper
6)、业务层 service
在这里插入图片描述

7)、 HttpResponse对象【返回给前端的统一的json对象,js的内置对象,js接收到这个对象时并且得到对象中的数据会去渲染前端页面)】
8)、 辅助类 Util
2.pom.xml文件依赖注入
Spring-webmvc 前后端交互
mybaits 持久层框架
mybaits-Spring 组合框架
jackson-databind json对象
mysql 数据库
lombok 不用写Set、Get、有参和无参构造方法
druid 数据源
spring-orm 对象关系型模型(Mybaits和hibernate都分别属于他的一种)
junit 测试框架

<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-3.1.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>edu.xufe.pet</groupId>
  <artifactId>pet</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <description>宠物商城管理系统</description>
  
  <dependencies>
		<!-- spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>5.1.8.RELEASE</version>
		</dependency>
		
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>5.1.8.RELEASE</version>
		</dependency>

		<!-- aop -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>1.9.4</version>
		</dependency>

		<!-- mybatis -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>2.0.1</version>
		</dependency>
		
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.5.1</version>
		</dependency>
		
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.47</version>
		</dependency>
		
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.1.17</version>
		</dependency>


		<!-- json -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.9.9</version>
		</dependency>

		<!-- log -->
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>

		<!-- lombok -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.8</version>
			<scope>provided</scope>
		</dependency>

		<!-- 上传 -->
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.4</version>
		</dependency>
		
        <dependency>
            <groupId>javax.annotation</groupId>
            <artifactId>javax.annotation-api</artifactId>
            <version>1.3.1</version>
         </dependency>
        <dependency>
        	<groupId>org.springframework</groupId>
        	<artifactId>spring-web</artifactId>
        	<version>5.1.8.RELEASE</version>
        </dependency>
  </dependencies>
</project>

!在这里插入图片描述

3. 数据源配置,dataSource.configration
URL,root(UserName),password,driveClassName

druid.url = jdbc:mysql://localhost:3306/petManager_db?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
druid.username = root
druid.password = 888888
druid.driver =  com.mysql.jdbc.Driver

4. Mapper.xml文件配置
数据库访问接口 mapper(包名+类名)
实体类别名
对象属性与数据库字段映射(相同可以不用写)
CRUD的SQL语句设计编写

<?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="edu.xufe.ICustomerMapper">
    <resultMap type="Customer" id="CustomerMapper">
    <id property="id" column="customer_id"/>
    <result property="number" column="customer_number"/>
    <result property="pasword" column="customer_password"/>
    <result property="name" column="customer_name"/>
    <result property="age" column="customer_address"/>
    <!-- 一对多联查 -->
    <collection property="pet" column="customer_pet" resultMap="PetMapper"/>
    </resultMap>
    
    <insert id="add">
    INSERT INTO customer_tab (customer_number,customer_password,customer_name,customer_address,customer_pet)
    VALUES (#{number},#{password},#{name},#{address},#{pet})
    </insert>
    
    <delete id="delete">
    DELETE FROME customer_tab WHERE customer_number=#{number}
    </delete>
    
    <update id="update">
    UPDATE customer_tab
    <set>
      <if test="number!=null">
      customer_number=#{number}
      </if>
      <if test="password!=null">
      customer_password=#{password}
      </if>
      <if test="name!=null">
      customer_name=#{name}
      </if>
      <if test="age!=null">
      customer_address=#{address}
      </if> 
      <if test="pet!=null">
      customer_pet=#{pet}
      </if>    
    </set>
    </update>
    <sql id="QuerySql">
    SELECT * FROM customer_tab
    </sql>
    <select id="findAllCustomer" resultMap="CustomerMapper">
    <include refid="QuerySql"/> 
    </select>
    <select id="findByNumberCustomer" resultMap="CustomerMapper">
    <include refid="QuerySql"/> WHERE customer_number=#{number}
    </select>



</mapper>

5. SpringMVC的 .xml文件配置(底层含有Filter和Listenner)
扫描,拦截@Conponent,@Service,@Controller,@RestController(@Controller+@ResponseBody),@Repostory等注解的类

<?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/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
		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">
<!-- 扫描这个包下面带注解的类被spring工厂管理起来 -->
	<context:component-scan base-package="edu.xufe.controller"/>
<!-- 后端返回给前端的信息自动转化成为json对象 -->
	<mvc:annotation-driven/>
<!-- 扫描static文件下的静态资源,前端页面 -->
	<mvc:resources location="/static/**" mapping="/static/**"/>
	
	
</beans>

6. Spring和Mybaits的.xml文件配置
扫描带有@…的类(自己想要扫描的注解),注入到IOC容器中,被Spring管起来
读取数据源dataSource.configration路径
配置数据源
sqlSessionFactory工厂配置
辅助配置(利用工厂创建sessionFactory对象利用反射机制对mapper接口进行实例化,再操作数据库)
事务配置Transaction
事务提交(主动提交)

<?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:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	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">
	<!-- 扫描当前包下的所有文件,被spring工厂管理起来 -->	 
    <context:component-scan base-package="edu.xufe">
    <!-- 所有的文件中出掉带@RestController的【include是包含】 -->
      <context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.RestController"/>
    </context:component-scan>
    <!-- 读取数据源druid的配置文件 -->
    <context:property-placeholder location="classpath:mybaits/config/druid.properties"/>
   <!-- 配置数据源 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
         <property name="url" value="${druid.url}"/>
         <property name="username" value="${druid.username}"/>
         <property name="password" value="${druid.password}"/>
         <property name="driverClassName" value="${druid.driver}"/>
    </bean>
    <!-- 配置SqlSessionFactory -->
    <bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
         <property name="configLocation" value="classpath:mybaits/config/configuration.xml"/>
         <property name="dataSource" ref="dataSource"/>
         <property name="mapperLocations" value="classpath:mybaits/mapper/*.mapper.xml"/>
         
    </bean>
    <!-- 辅助配置 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
         <property name="basePackage" value="edu.xufe.mapper"/>
         <property name="sqlSessionFactoryBeanName" value="SqlSessionFactory"/>       
    </bean>
    <!-- 事务管理配置 -->
    <bean id="textManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
         <property name="dataSource" ref="dataSource"/>
    </bean>
    <tx:annotation-driven transaction-manager="textManager" proxy-target-class="true"/>
</beans>


7.日志的配置log4j

log4j.rootLogger=debug,stdout,logfile
#console output
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.appender.stdout.PatternLayout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}<-->%F<-->%p<-->%m%n 
#file output
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=D:/logs/log.log
log4j.appender.logfile.layout=org.apache.log4j.SimpleLayout
log4j.appender.logfile.PatternLayout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}<-->%F<-->%p<-->%m%n

#mybatis log 
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

7 . 程序设计及其代码的编写
8. 测试和调试
9. 项目完成打包

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值