脚手架之SSM框架集成
2018-01-08 00:00
375 查看
摘要:作为脚手架最基础的部分,搭建SSM框架,后续的博客会陆续添加上日志、参数校验等等
SSM框架目前依然还是流行的框架,之前看别人做了一下基本的框架,这里打算从零开始做这个框架,闲话少说,开始出手。
成功后,生成文件目录如下:
用idea导入project
这里请指定maven坐标的scope为provided,否则,后面用tomcat插件启动的时候,会报错
首先添加tomcat7maven插件
修改web.xml文件,拷贝servlet3.0头,在tomcat7以上版本中,打开${tomcat_home}/webapps/ROOT/WEB-INF/目录下的web.xml
拷贝里面的内容到我们工程的web.xml文件中即可,编码修改为UTF-8
打开浏览器http://localhost:8888/看到helloWorld输出,表明成功了
这里我们使用mysql数据库,如果要使用
在src/main/resources/目录下创建mybatis文件,进一步创建mybatis-config.xml配置文件
文件内容如下:
版本匹配要求如下:
从图中,可以看出spring框架包括CoreContainer、AOPandInstrumentation、Messaging、Web、DataAccess/Integration、Test等6个模块
4.1、spring配置文件
在src/main/resources/spring文件夹下,创建spring-mybatis.xml文件
内容如下:
在src/main/resources/spring文件夹下,创建applicationContext.xml文件,内容如下:
在src/main/resources文件夹下,创建jdbc.properties文件,内容如下:
根据提示创建package,
com.mxsoft.ssmdemo.mapper
com.mxsoft.ssmdemo.service
com.mxsoft.ssmdemo.web
根据提示在src/main/resources目录下创建*mapper.xml文件的目录,com/mxsoft/ssmdemo/mappers/
修改web.xml文件,内容如下:
在包com.mxsoft.ssmdemo.model里面创建Foo.java,内容如下:
在包com.mxsoft.ssmdemo.mapper下面,创建接口FooMapper.java,内容如下:
在src/main/resources/com/mxsoft/ssmdemo/mappers目录下,创建FooMapper.xml文件,内容如下:
在包com.mxsoft.ssmdemo.service下,创建IFooService.java接口:
在包com.mxsoft.ssmdemo.service.impl下,创建FooServiceImpl.java,内容如下:
在包com.mxsoft.ssmdemo.web.controller下,创建FooController.java,内容如下:
在src/test/java目录下,创建测试用例FooTestCase.java,内容如下:
补充:
这里为了转换json,加了三个依赖包,如下:
代码链接地址:https://gitee.com/zyx870805/ssm-demo
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打开浏览器
2、添加mybatis依赖
2.1、添加jdbc依赖
mysqlgroupId> mysql-connector-javaartifactId> 5.1.6version> dependency>
这里我们使用mysql数据库,如果要使用
2.2、添加mybatis依赖
org.mybatisgroupId> mybatisartifactId> 3.4.5version> dependency>
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/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvc http://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>
代码链接地址:
相关文章推荐
- SSM框架搭建(Spring+SpringMVC+MyBatis)与easyui集成并实现增删改查实现
- SSM框架集成mysql读写分离,动态加载数据源
- ssm框架下redis的集成
- ssm框架集成Activiti应用开发经验(记录点滴)
- SSM框架快速集成redis
- Java高并发秒杀系统API之SSM框架集成swagger与AdminLTE
- SSM框架搭建(Spring+SpringMVC+MyBatis)与easyui集成并实现增删改查实现
- ssm 框架集成memcached 缓存服务器
- SSM框架集成PageHelper插件,实现分页功能
- SSM 框架集成redis
- 基于JavaEE的SSM框架集成Redis
- SSM框架集成
- ssm(spring+springMVC+Mybatis)框架集成Mongodb
- 脚手架之SSM-demo集成swagger
- 【SSM框架】Spring集成Dubbo服务(附带源码)
- 【持久化框架】SpringMVC+Spring4+Mybatis3集成,开发简单Web项目以及SSM框架下载
- [札记]SSM开发框架集成问题,Spring4.3.x+Mybatis3.4.x+SpringMVC集成时遇到的jason转换问题
- SSM框架搭建(Spring+SpringMVC+MyBatis)与easyui集成并实现增删改查实现
- 关于SSM(Spring+SpringMVC+Mybatis)三大框架集成验证码插件Kaptcha简单方法
- Java做的Kaptcha图片验证码,集成在ssm框架中