您的位置:首页 > 其它

脚手架之SSM框架集成

2018-01-08 00:00 375 查看
摘要:作为脚手架最基础的部分,搭建SSM框架,后续的博客会陆续添加上日志、参数校验等等

SSM框架目前依然还是流行的框架,之前看别人做了一下基本的框架,这里打算从零开始做这个框架,闲话少说,开始出手。

1、mavenweb工程初始化

mvnarchetype:generate-DgroupId=com.mxsoft-DartifactId=ssm-demo-DarchetypeArtifactId=maven-archetype-webapp-DinteractiveMode=false

成功后,生成文件目录如下:

用idea导入project

1.1、设置文件编码

UTF-8
UTF-8

UTF-8
properties>



1.2、设置jdk版本




1.3、添加servlet-api依赖,这里servlet-api版本,我们使用3.0版本

javax.servletgroupId>
javax.servlet-apiartifactId>
3.0.1version>
providedscope>
dependency>


这里请指定maven坐标的scope为provided,否则,后面用tomcat插件启动的时候,会报错


1.4、插件tomcat运行项目

首先添加tomcat7maven插件

org.apache.tomcat.mavengroupId>
tomcat7-maven-pluginartifactId>
2.2version>

/path>
8888port>
configuration>
plugin>


修改web.xml文件,拷贝servlet3.0头,在tomcat7以上版本中,打开${tomcat_home}/webapps/ROOT/WEB-INF/目录下的web.xml
拷贝里面的内容到我们工程的web.xml文件中即可,编码修改为UTF-8

1.5、运行项目

mvn-Ucleantomcat7:run

打开浏览器http://localhost:8888/看到helloWorld输出,表明成功了

2、添加mybatis依赖

2.1、添加jdbc依赖

mysqlgroupId>
mysql-connector-javaartifactId>
5.1.6version>
dependency>

这里我们使用mysql数据库,如果要使用

2.2、添加mybatis依赖

org.mybatisgroupId>
mybatisartifactId>
3.4.5version>
dependency>

在src/main/resources/目录下创建mybatis文件,进一步创建mybatis-config.xml配置文件 文件内容如下:
settings>

configuration>



2.3、添加spring-mybatis依赖

官方文档地址:http://www.mybatis.org/spring/zh/

版本匹配要求如下:



org.mybatisgroupId>
mybatis-springartifactId>
1.3.1version>
dependency>


3、添加spring依赖

spring分为几个模块,分别如下:



从图中,可以看出spring框架包括CoreContainer、AOPandInstrumentation、Messaging、Web、DataAccess/Integration、Test等6个模块

3.1.1、CoreContainer

org.springframeworkgroupId>
spring-coreartifactId>
4.3.13.RELEASEversion>
dependency>

org.springframeworkgroupId>
spring-beansartifactId>
4.3.13.RELEASEversion>
dependency>

org.springframeworkgroupId>
spring-contextartifactId>
4.3.13.RELEASEversion>
dependency>

org.springframeworkgroupId>
spring-context-supportartifactId>
4.3.13.RELEASEversion>
dependency>

org.springframeworkgroupId>
spring-expressionartifactId>
4.3.13.RELEASEversion>
dependency>


3.1.2、AOPandInstrumentation

org.springframeworkgroupId>
spring-aopartifactId>
4.3.13.RELEASEversion>
dependency>

org.springframeworkgroupId>
spring-aspectsartifactId>
4.3.13.RELEASEversion>
dependency>

org.aspectjgroupId>
aspectjweaverartifactId>
1.8.11version>
dependency>

org.aspectjgroupId>
aspectjrtartifactId>
1.8.11version>
dependency>

org.springframeworkgroupId>
spring-instrumentartifactId>
4.3.13.RELEASEversion>
dependency>


3.1.3、Messaging

org.springframeworkgroupId>
spring-messagingartifactId>
4.3.13.RELEASEversion>
dependency>

org.springframeworkgroupId>
spring-jmsartifactId>
4.3.13.RELEASEversion>
dependency>


3.1.4、Web

org.springframeworkgroupId>
spring-webartifactId>
4.3.13.RELEASEversion>
dependency>

org.springframeworkgroupId>
spring-webmvcartifactId>
4.3.13.RELEASEversion>
dependency>

org.springframeworkgroupId>
spring-websocketartifactId>
4.3.13.RELEASEversion>
dependency>

org.springframeworkgroupId>
spring-webmvc-portletartifactId>
4.3.13.RELEASEversion>
dependency>


3.1.5、DataAccess/Integration

org.springframework
spring-jdbc
4.3.13.RELEASE

org.springframework
spring-tx
4.3.13.RELEASE

org.springframework
spring-orm
4.3.13.RELEASE

org.springframework
spring-oxm
4.3.13.RELEASE

org.springframework
spring-orm
4.3.13.RELEASE


3.1.6、Test

org.springframeworkgroupId>
spring-testartifactId>
4.3.13.RELEASEversion>
testscope>
dependency>


4、整合配置文件

在src/main/resources/目录下创建spring文件夹

4.1、spring配置文件

在src/main/resources/spring文件夹下,创建spring-mybatis.xml文件

内容如下:

settings>

configuration>


在src/main/resources/spring文件夹下,创建applicationContext.xml文件,内容如下:

context:component-scan>

bean>

bean>

property>

bean>

property>
bean>

bean>

bean>
beans>


在src/main/resources文件夹下,创建jdbc.properties文件,内容如下:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ssmdemo?useUnicode=true&characterEncoding=gbk
username=root
password=rootroot

根据提示创建package,

com.mxsoft.ssmdemo.mapper

com.mxsoft.ssmdemo.service

com.mxsoft.ssmdemo.web

根据提示在src/main/resources目录下创建*mapper.xml文件的目录,com/mxsoft/ssmdemo/mappers/

4.2、springmvc配置文件

在src/main/webapp/WEB-INF/目录下,创建dispatcher-servlet.xml

<beansxmlns="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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd"><context:component-scanbase-package="com.mxsoft.ssmdemo.web"/>

<mvc:annotation-driven/>

<beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver">
<propertyname="prefix"value="/"/>
<propertyname="suffix"value=".jsp"/>
</bean>
</beans>


修改web.xml文件,内容如下:

<?xmlversion="1.0"encoding="UTF-8"?>
<web-appxmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0"
metadata-complete="true">

<display-name>SSMdemo</display-name>
<description>
Welcometossmdemo
</description>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>throwExceptionIfNoHandlerFound</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>


5、创建测试表,贯穿前后流程

首先,创建表t_foo,脚本如下:

CREATETABLE`t_foo`(
`id`bigint(20)NOTNULLAUTO_INCREMENTCOMMENT'主键',
`version`int(11)NOTNULLDEFAULT'0'COMMENT'版本',
`create_date`timestampNULLDEFAULTNULLCOMMENT'数据库插入时间',
`create_by`varchar(30)DEFAULTNULLCOMMENT'创建人',
`username`varchar(100)DEFAULTNULLCOMMENT'用户名',
`password`varchar(100)DEFAULTNULLCOMMENT'密码',
`update_date`timestampNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMPCOMMENT'数据库更新时间',
`update_by`varchar(100)DEFAULTNULLCOMMENT'修改人',
`is_delete`varchar(10)DEFAULTNULLCOMMENT'是否删除1删除0未删除',
`memo`varchar(255)DEFAULTNULLCOMMENT'备注',
PRIMARYKEY(`id`)
)ENGINE=InnoDBDEFAULTCHARSET=utf8COMMENT='foo记录';

在包com.mxsoft.ssmdemo.model里面创建Foo.java,内容如下:

packagecom.mxsoft.ssmdemo.model;

importjava.io.Serializable;
importjava.util.Date;

/**
*@authorzhangyingxuan
*/
publicclassFooimplementsSerializable{
privateLongid;

privateIntegerversion;

privateStringcreateBy;

privateDatecreateDate;

privateStringupdateBy;

privateDateupdateDate;

privateStringisDelete;

privateStringmemo;

publicLonggetId(){
returnid;
}

publicvoidsetId(Longid){
this.id=id;
}

publicIntegergetVersion(){
returnversion;
}

publicvoidsetVersion(Integerversion){
this.version=version;
}

publicStringgetCreateBy(){
returncreateBy;
}

publicvoidsetCreateBy(StringcreateBy){
this.createBy=createBy;
}

publicDategetCreateDate(){
returncreateDate;
}

publicvoidsetCreateDate(DatecreateDate){
this.createDate=createDate;
}

publicStringgetUpdateBy(){
returnupdateBy;
}

publicvoidsetUpdateBy(StringupdateBy){
this.updateBy=updateBy;
}

publicDategetUpdateDate(){
returnupdateDate;
}

publicvoidsetUpdateDate(DateupdateDate){
this.updateDate=updateDate;
}

publicStringgetIsDelete(){
returnisDelete;
}

publicvoidsetIsDelete(StringisDelete){
this.isDelete=isDelete;
}

publicStringgetMemo(){
returnmemo;
}

publicvoidsetMemo(Stringmemo){
this.memo=memo;
}
}


在包com.mxsoft.ssmdemo.mapper下面,创建接口FooMapper.java,内容如下:

packagecom.mxsoft.ssmdemo.mapper;

importcom.mxsoft.ssmdemo.model.Foo;

importjava.util.List;

/**
*@authorzhangyingxuan
*/
publicinterfaceFooMapper{
intinsert(Foofoo);
intupdate(Foofoo);
intdelete(Longid);

List<Foo>selectAll();

FooselectById(Longid);
}


在src/main/resources/com/mxsoft/ssmdemo/mappers目录下,创建FooMapper.xml文件,内容如下:

<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mappernamespace="com.mxsoft.ssmdemo.mapper.FooMapper">

<!--通用查询映射结果-->
<resultMapid="BaseResultMap"type="com.mxsoft.ssmdemo.model.Foo">
<idcolumn="id"property="id"/>
<resultcolumn="version"property="version"/>
<resultcolumn="create_date"property="addTime"/>
<resultcolumn="create_by"property="createBy"/>
<resultcolumn="update_date"property="updateTime"/>
<resultcolumn="update_by"property="updateBy"/>
<resultcolumn="is_delete"property="isDelete"/>
<resultcolumn="memo"property="memo"/>
<resultcolumn="username"property="username"/>
<resultcolumn="password"property="password"/>
</resultMap>

<!--通用查询结果列-->
<sqlid="Base_Column_List">
id,version,create_date,create_by,username,password,update_date,update_by,is_delete,memo
</sql>

<selectid="findById"resultMap="BaseResultMap">
SELECT<includerefid="Base_Column_List"/>
FROMt_foo
WHEREid=#{id,jdbcType=INTEGER}
</select>

<selectid="findAll"resultMap="BaseResultMap">
SELECT<includerefid="Base_Column_List"/>
FROMt_foo
</select>

<insertid="insert"useGeneratedKeys="true"keyProperty="id"parameterType="com.mxsoft.ssmdemo.model.Foo">
INSERTINTOt_foo(create_date,create_by,username,password)values(now(),#{createBy},#{username},#{password});
</insert>

<updateid="update"parameterType="com.mxsoft.ssmdemo.model.Foo">
UPDATEt_foosetpassword=#{password}WHEREid=#{id,jdbcType=INTEGER}
</update>

<deleteid="delete">
DELETEFROMt_fooWHEREid=#{id,jdbcType=INTEGER}
</delete>
</mapper>


在包com.mxsoft.ssmdemo.service下,创建IFooService.java接口:

packagecom.mxsoft.ssmdemo.service;

importcom.mxsoft.ssmdemo.model.Foo;

importjava.util.List;

/**
*@authorzhangyingxuan
*/
publicinterfaceIFooService{
intadd(Foofoo);

intedit(Foofoo);

intdelete(Longid);

List<Foo>findAll();

FoofindById(Longid);
}


在包com.mxsoft.ssmdemo.service.impl下,创建FooServiceImpl.java,内容如下:

packagecom.mxsoft.ssmdemo.service.impl;

importcom.mxsoft.ssmdemo.mapper.FooMapper;
importcom.mxsoft.ssmdemo.model.Foo;
importcom.mxsoft.ssmdemo.service.IFooService;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Service;

importjava.util.List;

/**
*@authorzhangyingxuan
*/
@Service
publicclassFooServiceImplimplementsIFooService{

@Autowired
privateFooMapperfooMapper;

@Override
publicintadd(Foofoo){
returnfooMapper.insert(foo);
}

@Override
publicintedit(Foofoo){
returnfooMapper.update(foo);
}

@Override
publicintdelete(Longid){
returnfooMapper.delete(id);
}

@Override
publicList<Foo>findAll(){
returnfooMapper.selectAll();
}

@Override
publicFoofindById(Longid){
returnfooMapper.selectById(id);
}
}


在包com.mxsoft.ssmdemo.web.controller下,创建FooController.java,内容如下:

packagecom.mxsoft.ssmdemo.web.controller;

importcom.mxsoft.ssmdemo.model.Foo;
importcom.mxsoft.ssmdemo.service.IFooService;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.web.bind.annotation.PathVariable;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RequestMethod;
importorg.springframework.web.bind.annotation.RestController;

importjava.util.List;

/**
*@authorzhangyingxuan
*/
@RestController
@RequestMapping("/api/foo")
publicclassFooController{

@Autowired
privateIFooServicefooService;

@RequestMapping(value="/",method=RequestMethod.POST)
publicObjectadd(Foofoo){
intadd=fooService.add(foo);
if(add>0){
returnfoo;
}
returnnull;
}

@RequestMapping(value="/",method=RequestMethod.PUT)
publicObjectedit(Foofoo){
intadd=fooService.edit(foo);
if(add>0){
returnfoo;
}
returnnull;
}

@RequestMapping(value="/{id}",method=RequestMethod.GET)
publicObjectdelete(@PathVariable("id")Longid){
intadd=fooService.delete(id);
if(add>0){
returnadd;
}
returnnull;
}

@RequestMapping(value="/",method=RequestMethod.GET)
publicObjectfindByID(){
List<Foo>fooList=fooService.findAll();
returnfooList;
}

}


在src/test/java目录下,创建测试用例FooTestCase.java,内容如下:

packagecom.mxsoft.ssmdemo.web.controller;

importcom.fasterxml.jackson.databind.ObjectMapper;
importcom.mxsoft.ssmdemo.model.Foo;
importorg.junit.Assert;
importorg.junit.Before;
importorg.junit.Test;
importorg.junit.runner.RunWith;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.http.HttpStatus;
importorg.springframework.http.MediaType;
importorg.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
importorg.springframework.test.context.ContextConfiguration;
importorg.springframework.test.context.ContextHierarchy;
importorg.springframework.test.context.junit4.SpringJUnit4ClassRunner;
importorg.springframework.test.context.web.WebAppConfiguration;
importorg.springframework.test.web.servlet.MockMvc;
importorg.springframework.test.web.servlet.MvcResult;
importorg.springframework.test.web.servlet.request.MockMvcRequestBuilders;
importorg.springframework.test.web.servlet.result.MockMvcResultMatchers;
importorg.springframework.test.web.servlet.setup.MockMvcBuilders;
importorg.springframework.web.context.WebApplicationContext;

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration(value="src/main/webapp")
@ContextHierarchy({
@ContextConfiguration(name="parent",locations="classpath:spring/applicationContext.xml"),
@ContextConfiguration(name="child",locations="file:src/main/webapp/WEB-INF/dispatcher-servlet.xml")
})
publicclassFooTestCase{

@Autowired
privateWebApplicationContextwebApplicationContext;

privateMockMvcmockMvc;

@Before
publicvoidsetUp(){
mockMvc=MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}

@Test
publicvoidtestInsert()throwsException{
Foofoo=newFoo();
foo.setUsername("testusername");
foo.setPassword("password");
MvcResultmvcResult=mockMvc.perform(MockMvcRequestBuilders.post("/api/foo").contentType(MediaType.APPLICATION_JSON).content(newObjectMapper().writeValueAsString(foo))).andExpect(MockMvcResultMatchers.status().is(HttpStatus.OK.value())).andReturn();

Assert.assertNotNull(mvcResult);
}
}


补充:

这里为了转换json,加了三个依赖包,如下:

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.0</version>
</dependency>


代码链接地址:https://gitee.com/zyx870805/ssm-demo
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SSM 脚手架