eclipse简单搭建SSM框架

1、基本概念:

1.1、Spring:

  • 是个开源框架
  • 轻量级java开发框架(2003年兴起)
  • 使用基本的javaBean完成原来EJB的事情
  • 不限于服务器开发,任何应用都可以使用

1.1.1、核心功能:如下图

eclipse简单搭建SSM框架_第1张图片

  • Core模块:构建应用的核心,主要提供了依赖注入的特性,其中一个最抽象的接口为BeanFactory,实现该结构的具体类可以通过读取一些bean的元数据例如xml文件和注解的形式配置加载到容器进行管理。
  • Aop模块:提供了切面编程的支持,它主要能够做到方法级别的动态代理,在编译阶段它是跳过的,是在运行时进行修改字节码或则动态实现代理类进行代理,它也使事务的管理变得简单,让事务的控制与业务代码隔离。
  • Dao模块:能够管理对于数据库的操作,打开连接池与释放连接池,也支持了声明事务与编程式事务。
  • ORM模块:提供流程的框架的ORM框架的组建.
  • J2EE模块:提供一些流程的J2EE组建,例如JDBC, JMX.
  • Web模块:提供对于常见mvc框架的支持,例如Struts和JSF。

核心的依赖关系是 core包为最基础的模块,beans包依赖core模块。aop又依赖于core和beans模块。context是一个独立的模块依赖于context-expression模块。context-support模块依赖于beans,context,core模块。tx模块依赖于beans与core, jdbc又依赖于tx。

其他的包可以自己去网上搜索下,了解一下。

1.2、SpringMvc

  • 是属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面
  • 分离了控制器、模型对象、分派器、处理程序对象的角色

1.3、Mybatis

  • 来源于是apache的开源产品
  • 基于Java持久层框架
  • 消除了几乎所有的JDBC代码和参数的手机设置,以及结果集的检索
  • 使用xml或者注解用于配置和原始映射,把接口和Pojo映射成数据库中的记录

2、开发环境搭建

Eclipse+jdk+tomcat+maven+svn

3、SSM整合

2个配置文件:spring-mybatis.xml,spring-mvc.xml
2个资源文件:jdbc.properties,log4j.properties

3.1、新建一个maven项目:

eclipse简单搭建SSM框架_第2张图片
eclipse简单搭建SSM框架_第3张图片
如果上述列表是空的:

1.切换Catalog试一下。
2.如果切换Catalog无效:进入doc界面,执行:mvn archetype:generate,成功后(可能比较慢),重新进来,并切换Catalog,就可以了。

eclipse简单搭建SSM框架_第4张图片
新建的项目一般没有问题。

3.2、新增文件目录:

src/main/java
src/main/resources
src/test/java
src/test/resources

eclipse简单搭建SSM框架_第5张图片

配置build path:

eclipse简单搭建SSM框架_第6张图片

3.3、maven引入jar包:

eclipse简单搭建SSM框架_第7张图片

1)、版本号:
    <properties>
		<!-- spring版本号 -->
		<spring.version>4.0.2.RELEASE</spring.version>
		<!-- mybatis版本号 -->
		<mybatis.version>3.2.6</mybatis.version>
		<!-- log4j日志文件管理包版本 -->
		<slf4j.version>1.7.7</slf4j.version>
		<log4j.version>1.2.17</log4j.version>
	</properties>
2)、Spring配置:
        <!-- spring核心包 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-oxm</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${spring.version}</version>
		</dependency>
3)、mybatis包
		<!-- mybatis核心包 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>${mybatis.version}</version>
		</dependency>
		<!-- mybatis/spring包 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.2.2</version>
		</dependency>
4)、其他包
        <!-- 导入java ee jar 包 -->
		<dependency>
			<groupId>javax</groupId>
			<artifactId>javaee-api</artifactId>
			<version>7.0</version>
		</dependency>
		<!-- 导入Mysql数据库链接jar包 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.39</version>
		</dependency>
		<!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 -->
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
			<version>1.2.2</version>
		</dependency>
		<!-- JSTL标签类 -->
		<dependency>
			<groupId>jstl</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
		<!-- 日志文件管理包 -->
		<!-- log start -->
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>${log4j.version}</version>
		</dependency>


		<!-- 格式化对象,方便输出日志 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.1.41</version>
		</dependency>


		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${slf4j.version}</version>
		</dependency>

		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${slf4j.version}</version>
		</dependency>
		<!-- log end -->
		
		<dependency>
           <groupId>org.codehaus.jackson</groupId>
           <artifactId>jackson-mapper-asl</artifactId>
           <version>1.9.13</version>
     	</dependency>
5)、修改build
	<build>
		<plugins>
       		<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.0</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin> 
   		</plugins>
	</build>
6)、修改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">
</web-app>
7)、修改TestSsm项目.settings目录下org.eclipse.wst.common.project.facet.core.xml文件
         修改为
         确认为1.8

eclipse简单搭建SSM框架_第8张图片

8)、maven更新项目:
     (1)点击项目,右键-》Run As-》Maven clean
     (2)点击项目,右键-》maven-》Update Project....,选中项目,选择“Force Update of Snapshots/Releases”,点击“OK”
     (3)重新编译TestSsm项目,选择“Project”-》“Clean”-》勾选TestSsm-》点击“Clean”,如图:

eclipse简单搭建SSM框架_第9张图片

9)、编译后,可能存在以下错误:

eclipse简单搭建SSM框架_第10张图片

重复操作8)可以解决报错。

eclipse简单搭建SSM框架_第11张图片

3.4、两个资源文件(src/main/resources目录下):

jdbc.properties:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/testSsm
username=root
password=Test123456!
#定义初始连接数  
initialSize=0
#定义最大连接数  
maxActive=20
#定义最大空闲  
maxIdle=20
#定义最小空闲  
minIdle=1
#定义最长等待时间  
maxWait=60000
log4j.properties
#定义LOG输出级别(发布到服务器,另外控制台不输出(只输出warn或者error信息))
log4j.rootLogger=INFO,console,dailyFile

#控制台日志
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.encoding=UTF-8
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%l] - [%p] %m%n
#mybatis显示SQL语句日志配置  
#打印mybatis  debug日志(一般没必要)
#log4j.logger.org.mybatis=DEBUG
#log4j.logger.com.testSsm.web.mapper=DEBUG  

# 定期滚动日志文件,每天都会生成日志
log4j.appender.dailyFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyFile.encoding=UTF-8
log4j.appender.dailyFile.Threshold=INFO
log4j.appender.dailyFile.File=D:/logs/TestSsm.log
log4j.appender.dailyFile.MaxFileSize = 5MB
log4j.appender.dailyFile.DatePattern='.'yyyy-MM-dd
log4j.appender.dailyFile.layout=org.apache.log4j.PatternLayout
log4j.appender.dailyFile.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%l] - [%p] %m%n

3.5、两个配置文件(src/main/resources目录下):

spring-mybatis.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: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/mvc    
                            http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
	<!-- 自动扫描 -->
	<context:component-scan base-package="com.testSsm.web" />
	<!-- 引入配置文件 -->
	<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location" value="classpath:jdbc.properties" />
	</bean>

	<bean id="dataSource"
		class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="${driver}" />
		<property name="url" value="${url}" />
		<property name="username" value="${username}" />
		<property name="password" value="${password}" />
		<!-- 初始化连接大小 -->
		<property name="initialSize" value="${initialSize}"></property>
		<!-- 连接池最大数量 -->
		<property name="maxActive" value="${maxActive}"></property>
		<!-- 连接池最大空闲 -->
		<property name="maxIdle" value="${maxIdle}"></property>
		<!-- 连接池最小空闲 -->
		<property name="minIdle" value="${minIdle}"></property>
		<!-- 获取连接最大等待时间 -->
		<property name="maxWait" value="${maxWait}"></property>
	</bean>

	<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<!-- 自动扫描mapping.xml文件 -->
		<property name="mapperLocations" value="classpath:mapper/*.xml"></property>
	</bean>

	<!-- DAO接口所在包名,Spring会自动查找其下的类 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.testSsm.web.mapper" />
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
	</bean>

	<!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>
</beans>
spring-mvc.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: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/mvc    
                            http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
                            
	<!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->
	<context:component-scan base-package="com.testSsm.web.controller" />

	<!--避免IE执行AJAX时,返回JSON出现下载文件 -->
	<bean id="mappingJacksonHttpMessageConverter"
		class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
		<property name="supportedMediaTypes">
			<list>
				<value>text/html;charset=UTF-8</value>
			</list>
		</property>
	</bean>
	<!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 -->
	<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
		<property name="messageConverters">
			<list>
				<ref bean="mappingJacksonHttpMessageConverter" /> <!-- JSON转换器 -->
			</list>
		</property>
	</bean>
	<!-- 定义跳转的文件的前后缀 ,视图模式配置 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->
		<property name="prefix" value="/WEB-INF/jsp/" />
		<property name="suffix" value=".jsp" />
	</bean>

</beans>  

3.6、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>
	<!-- Spring和mybatis的配置文件 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			classpath*:spring-mybatis.xml
		</param-value>
	</context-param>
	<!-- 编码过滤器 -->
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<async-supported>true</async-supported>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*
	
	
	
		org.springframework.web.context.ContextLoaderListener
	
	
	
		org.springframework.web.util.IntrospectorCleanupListener
	

	
	
		SpringMVC
		org.springframework.web.servlet.DispatcherServlet
		
			contextConfigLocation
			classpath:spring-mvc.xml
		
		1
		true
	
	
		SpringMVC
		*.do	
	
	
		SpringMVC
		*.html	
	
	
		SpringMVC
		*.action	
	

	
		default
		*.jpg
	
	
		default
		*.png
	
	
		default
		*.js
	
	
		default
		*.css
	
	
		default
		*.gif
	
	
		default
		*.ttf
	
	
		default
		*.woff
	
	
		default
		*.woff2
	

	
		/index.jsp
	


到这里项目加入tomcat起始可以运行了。

3.7、Eclipse集成mybatis的generator插件

新建包:
  com.testSsm.web.controller
  com.testSsm.web.mapper
  com.testSsm.web.model
  com.testSsm.web.service
  com.testSsm.web.service.impl
  Resources下建立mapper目录

eclipse简单搭建SSM框架_第12张图片

新建schema:TestSsm
新建表Test:
CREATE TABLE `NewTable` (
`id`  bigint(10) NOT NULL AUTO_INCREMENT ,
`a1`  varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`a2`  varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=4
ROW_FORMAT=COMPACT
;
新建文件:generatorConfig.xml

eclipse简单搭建SSM框架_第13张图片

内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>

    <!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包-->
    <classPathEntry location="D:\\java\\lib\\mysql-connector-java-5.1.39.jar"/>
    
    <!-- 一个数据库一个context -->
    <context id="DB2Tables"  targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressDate" value="true"/>			<!-- 是否生成注释代时间戳-->
            <property name="suppressAllComments" value="true"/>		<!-- 是否去除自动生成的注释 true:是 : false:-->
        </commentGenerator>

        <!--数据库链接URL,用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"  connectionURL="jdbc:mysql://localhost:3306/testSsm" userId="root" password="Test123456!"></jdbcConnection>
        
        <!-- 类型转换 -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>		<!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.-->
        </javaTypeResolver>
        
        <!-- 生成模型的包名和位置-->
        <javaModelGenerator targetPackage="com.testSsm.web.model" targetProject="TestSsm/src/main/java">
        	<!-- 是否在当前路径下新加一层schema,eg:false路径com.oop.eksp.user.model, true:com.oop.eksp.user.model.[schemaName] -->
            <property name="enableSubPackages" value="true"/>
            <!-- 是否针对string类型的字段在set的时候进行trim调用 -->
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        
        <!-- 生成映射文件的包名和位置-->
        <sqlMapGenerator targetPackage="mapper" targetProject="TestSsm/src/main/resources">
        	<!-- 是否在当前路径下新加一层schema,eg:fase路径com.oop.eksp.user.model, true:com.oop.eksp.user.model.[schemaName] -->
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        
        <!-- 生成DAO的包名和位置-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.testSsm.web.mapper" targetProject="TestSsm/src/main/java">
        	<!-- 是否在当前路径下新加一层schema,eg:fase路径com.oop.eksp.user.model, true:com.oop.eksp.user.model.[schemaName] -->
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        
        <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
        <!-- 
        	tableName:指定要生成的表名,可以使用SQL通配符匹配多个表。
        	schema:数据库的schema,可以使用SQL通配符匹配。如果设置了该值,生成SQL的表名会变成如schema.tableName的形式。
        	catalog:数据库的catalog,如果设置了该值,生成SQL的表名会变成如catalog.tableName的形式。
        	alias:如果指定,这个值会用在生成的select查询SQL的表的别名和列名上。 列名会被别名为 alias_actualColumnName(别名_实际列名) 这种模式。
			domainObjectName:生成对象的基本名称。如果没有指定,MBG会自动根据表名来生成名称。
			enableXXX:XXX代表多种SQL方法,该属性用来指定是否生成对应的XXX语句。
			selectByPrimaryKeyQueryId:DBA跟踪工具会用到,具体请看详细文档。
			selectByExampleQueryId:DBA跟踪工具会用到,具体请看详细文档。
			modelType:<context>的defaultModelType含义一样,这里可以针对表进行配置,这里的配置会覆盖<context>的defaultModelType配置。
			escapeWildcards:这个属性表示当查询列,是否对schema和表名中的SQL通配符 ('_' and '%') 进行转义。 对于某些驱动当schema或表名中包含SQL通配符时(例如,一个表名是MY_TABLE,有一些驱动需要将下划线进行转义)是必须的。默认值是false。
			delimitIdentifiers:是否给标识符增加**分隔符**。默认false。当catalog,schema或tableName中包含空白时,默认为true。
			delimitAllColumns:是否对所有列添加**分隔符**。默认false。
			
			该元素包含多个可用的<property>子元素,可选属性为:
				constructorBased:<javaModelGenerator>中的属性含义一样。
				ignoreQualifiersAtRuntime:生成的SQL中的表名将不会包含schema和catalog前缀。
				immutable:<javaModelGenerator>中的属性含义一样。
				modelOnly:此属性用于配置是否为表只生成实体类。如果设置为true就不会有Mapper接口。如果配置了<sqlMapGenerator>,并且modelOnly为true,那么XML映射文件中只有实体对象的映射元素(<resultMap>)。如果为true还会覆盖属性中的enableXXX方法,将不会生成任何CRUD方法。
				rootClass:<javaModelGenerator>中的属性含义一样。
				rootInterface:<javaClientGenerator>中的属性含义一样。
				runtimeCatalog:运行时的catalog,当生成表和运行环境的表的catalog不一样的时候可以使用该属性进行配置。
				runtimeSchema:运行时的schema,当生成表和运行环境的表的schema不一样的时候可以使用该属性进行配置。
				runtimeTableName:运行时的tableName,当生成表和运行环境的表的tableName不一样的时候可以使用该属性进行配置。
				selectAllOrderByClause:该属性值会追加到selectAll方法后的SQL中,会直接跟order by拼接后添加到SQL末尾。
				useActualColumnNames:如果设置为true,那么MBG会使用从数据库元数据获取的列名作为生成的实体对象的属性。 如果为false(默认值),MGB将会尝试将返回的名称转换为驼峰形式。 在这两种情况下,可以通过 元素显示指定,在这种情况下将会忽略这个(useActualColumnNames)属性。
				useColumnIndexes:如果是true,MBG生成resultMaps的时候会使用列的索引,而不是结果中列名的顺序。
				useCompoundPropertyNames:如果是true,那么MBG生成属性名的时候会将列名和列备注接起来. 这对于那些通过第四代语言自动生成列(例如:FLD22237),但是备注包含有用信息(例如:"customer id")的数据库来说很有用. 在这种情况下,MBG会生成属性名FLD2237_CustomerId。
				除了<property>子元素外,<table>还包含以下子元素:
				
				<generatedKey> (0个或1)
				<columnRenamingRule> (0个或1)
				<columnOverride> (0个或多个)
				<ignoreColumn> (0个或多个)
         -->
        <table tableName="test" domainObjectName="Test" ></table>
        
    </context>
</generatorConfiguration>
自动生成代码:
    generatorConfig.xml文件,确认数据库可以链接,数据表已经建立;
    在xml中根据注解配置好了以后,直接右键,选择generator就可以生成代码。

eclipse简单搭建SSM框架_第14张图片

在Test.java后面增加如下代码:输出Test的String
    public String getTestString() {
    	return "{" + "id:" + id 
    	     + "," + "a1:" + a1
    	     + "," + "a2:" + a2 + "}";
    }
修改TestMapper.xml文件中的insertSelective方法,在后面增加,插入后返回主键,如下图
 <insert id="insertSelective" parameterType="com.testSsm.web.model.Test">
    <!-- 获取最近一次插入记录的主键值的方式 -->
	<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
		SELECT LAST_INSERT_ID() as id
	</selectKey>
    insert into test
    <trim prefix="(" suffix=")" suffixOverrides=",">
编写service接口和实现类:

eclipse简单搭建SSM框架_第15张图片

package com.testSsm.web.service;

import com.testSsm.web.model.Test;

public interface TestService {
	
	/**
	 * 根据ID查询Test
	 * @param id
	 * @return Test
	 */
	public Test getTestById(long id);
	
	/**
	 * 插入保存Test
	 * @param Test
	 * @return void
	 */
	public long insert(Test test);
	
	/**
	 * 根据ID更新Test
	 * @param Test
	 * @return void
	 */
	public void updateByPrimaryKeySelective(Test test);
	
	/**
	 * 根据ID删除
	 * @param id
	 * @return void
	 */
	public void deleteByPrimaryKey(long id);
}

package com.testSsm.web.service.impl;

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

import com.testSsm.web.mapper.TestMapper;
import com.testSsm.web.model.Test;
import com.testSsm.web.service.TestService;

@Service
public class TestServiceImpl implements TestService {
	
	@Autowired
	private TestMapper testMapper;

	/**
	 * 根据ID查询Test
	 * @param id
	 * @return Test
	 */
	@Override
	public Test getTestById(long id) {

		return testMapper.selectByPrimaryKey(id);
	}

	/**
	 * 插入保存Test
	 * @param Test
	 * @return void
	 */
	@Override
	public long insert(Test test) {
		
		testMapper.insertSelective(test);
		return test.getId();
	}

	/**
	 * 根据ID更新Test
	 * @param Test
	 * @return void
	 */
	@Override
	public void updateByPrimaryKeySelective(Test test) {
		
		testMapper.updateByPrimaryKeySelective(test);
	}

	/**
	 * 根据ID删除
	 * @param id
	 * @return void
	 */
	@Override
	public void deleteByPrimaryKey(long id) {
		
		testMapper.deleteByPrimaryKey(id);
	}

}

3.8、编写controller类:

eclipse简单搭建SSM框架_第16张图片

package com.testSsm.web.controller;

import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.testSsm.web.model.Test;
import com.testSsm.web.service.TestService;

@Controller
@RequestMapping("test")
public class TestController {

	private Logger logger = LoggerFactory.getLogger(TestController.class);

	@Autowired
	private TestService testService;

	/**
	 * 根据id返回test信息
	 * @param request
	 * @param model
	 * @return
	 */
	@RequestMapping("showDetail")
	public String showDetail(HttpServletRequest request, @RequestParam(required = false, defaultValue = "0")long id, Model model){

		logger.info("开始执行方式:showDetail");
		if(id == 0) {
			model.addAttribute("context", "出错,输入的id为空");
		}else {
			Test test = testService.getTestById(id);
			if(test == null) 
				model.addAttribute("context", "不存在id="+ id + "的记录");
			else
				model.addAttribute("context", test.getTestString());
		}
		return "test/message";
	}
	
	/**
	 * 插入test信息
	 * @param request
	 * @param test
	 * @param model
	 * @return
	 */
	@RequestMapping("insert")
	public String insert(HttpServletRequest request, Test test, Model model){

		logger.info("开始执行方式:insert");
		long id = testService.insert(test);
		model.addAttribute("id", id);
		model.addAttribute("context", "插入成功,返回主键:id="+id);
		return "test/message";
	}
	
	/**
	 * 更新test信息
	 * @param request
	 * @param test
	 * @param model
	 * @return
	 */
	@RequestMapping("update")
	public String update(HttpServletRequest request, Test test, Model model){

		logger.info("开始执行方式:update");
		Test testParam = testService.getTestById(test.getId());
		if(testParam == null) {
			model.addAttribute("context", "更新失败,id="+test.getId() +"不存在");
		}else {
			testService.updateByPrimaryKeySelective(test);
			model.addAttribute("context", "更新成功");
		}
		return "test/messsage";
	}
	
	/**
	 * 根据id删除test信息
	 * @param request
	 * @param id
	 * @param model
	 * @return
	 */
	@RequestMapping("delete")
	public String delete(HttpServletRequest request, @RequestParam(required = false, defaultValue = "0")Long id, Model model){

		logger.info("开始执行方式:delete");
		Test testParam = testService.getTestById(id);
		if(testParam == null) {
			model.addAttribute("updateState", "0");
			model.addAttribute("context", "删除失败,id="+id +"不存在");
		}else {
			testService.deleteByPrimaryKey(id);
			model.addAttribute("isNull", "1");
			model.addAttribute("context", "删除成功");
		}
		return "test/messsage";
	}
	
}

3.9添加jsp文件

新建目录WEB-INF/jsp/test,在下面添加message.jsp文件,如图:
添加jsp文件:

eclipse简单搭建SSM框架_第17张图片

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE>
<html>
	<head>
		<title>测试</title>
	</head>

	<body>
		${context}
	</body>
</html>

3.10、启动项目

把项目添加到tomcat下面,直接运行:
eclipse简单搭建SSM框架_第18张图片

启动项目,在控制台查看日志,都没有报错,返回结果如下,表示启动成功:

eclipse简单搭建SSM框架_第19张图片

3.11测试

web.xml中配置了三种请求方式:.do、.html、.action;我们下面以.do为例

1)、测试insert:
   执行:http://localhost:8080/TestSsm/test/insert.do?a1=0000&a2=1111,返回主键

eclipse简单搭建SSM框架_第20张图片

2)、测试showDetail:
   执行:http://localhost:8080/TestSsm/test/showDetail.do

eclipse简单搭建SSM框架_第21张图片

   执行:http://localhost:8080/TestSsm/test/showDetail.do?id=1

eclipse简单搭建SSM框架_第22张图片

   执行:http://localhost:8080/TestSsm/test/showDetail.do?id=27

eclipse简单搭建SSM框架_第23张图片

3)、测试update:
    执行:http://localhost:8080/TestSsm/test/update.do?id=27&a1=9999

eclipse简单搭建SSM框架_第24张图片

   执行:http://localhost:8080/TestSsm/test/showDetail.do?id=27  

eclipse简单搭建SSM框架_第25张图片

3)、测试delete:
    执行:http://localhost:8080/TestSsm/test/delete.do?id=27

eclipse简单搭建SSM框架_第26张图片

   执行:http://localhost:8080/TestSsm/test/showDetail.do?id=27  

eclipse简单搭建SSM框架_第27张图片

到此SSM框架搭建完成

你可能感兴趣的:(eclipse简单搭建SSM框架)