- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章详解手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
ssm(spring+springmvc+mybatis),目前较为主流的企业级架构方案。标准的mvc设计模式,将整个系统划分为显示层、controller层、service层、dao层四层,使用springmvc负责请求的转发和视图管理,spring实现业务对象管理, mybatis作为数据对象持久化引擎.
一. 框架详情 。
spring是一个轻量级的java开发框架,它是为了解决企业应用开发的复杂性而创建的。spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何java应用都可以从spring中受益。 简单来说,spring是一个轻量级的控制反转(ioc)和面向切面(aop)的容器框架 。
springmvc属于springframework的后续产品,分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制 。
mybatis是一个基于java的持久层框架。mybatis提供的持久层框架包括sql maps和data access objects(dao)它消除了几乎所有的jdbc代码和参数的手工设置以及结果集的检索。mybatis 使用简单的 xml或注解用于配置和原始映射,将接口和 java映射成数据库中的记录 。
二. 创建maven项目 。
1、eclipse中用maven创建项目 。
2、按默认next 。
3、找到maven-archetype-webapp后,点击next 。
4、填写相应的信息,groupid是项目组织唯一的标识符,实际对应java的包的结构。artifactid就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。package填了默认给你建一个包,不写也可以.
5、刚建好的目录如下 。
6、maven规定必须添加以下source folder:
src/main/resources src/main/java src/test/resources src/test/java 。
在这步之前最好先项目上右键选择properties,然后点击java build path,在librarys下,编辑jre system library,选择workspace default jre.
7、分别修改输出路径为,对应关系如下:
8、将项目转换成dynamic web project,在项目上右键properties,在左侧选择 project facets.
9、设置部署时的文件发布路径,删除test的两项,因为test是测试使用,并不需要部署.
设置将maven的jar包发布到lib下。add -> java build path entries -> maven dependencies -> finish 。
三. maven引入需要的jar包 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
<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 http://maven.apache.org/maven-v4_0_0.xsd"
>
<modelversion>
4.0
.
0
</modelversion>
<groupid>com.yingjun.test</groupid>
<artifactid>tradingstate</artifactid>
<packaging>war</packaging>
<version>
2.0
.
1
</version>
<properties>
<project.build.sourceencoding>utf-
8
</project.build.sourceencoding>
<maven.build.timestamp.format>yyyymmddhhmmss</maven.build.timestamp.format>
<spring.version>
3.2
.
9
.release</spring.version>
<mybatis.version>
3.1
.
1
</mybatis.version>
<mybatisspring.version>
1.1
.
1
</mybatisspring.version>
</properties>
<dependencies>
<dependency>
<groupid>org.springframework</groupid>
<artifactid>spring-core</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-test</artifactid>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupid>org.mybatis</groupid>
<artifactid>mybatis</artifactid>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupid>org.mybatis</groupid>
<artifactid>mybatis-spring</artifactid>
<version>${mybatisspring.version}</version>
</dependency>
<dependency>
<groupid>mysql</groupid>
<artifactid>mysql-connector-java</artifactid>
<version>
5.1
.
34
</version>
</dependency>
<dependency>
<groupid>junit</groupid>
<artifactid>junit</artifactid>
<version>
4.11
</version>
<scope>test</scope>
</dependency>
<dependency>
<groupid>c3p0</groupid>
<artifactid>c3p0</artifactid>
<version>
0.9
.
1.2
</version>
</dependency>
<dependency>
<groupid>org.aspectj</groupid>
<artifactid>aspectjweaver</artifactid>
<version>
1.8
.
1
</version>
</dependency>
<dependency>
<groupid>javax.servlet</groupid>
<artifactid>jstl</artifactid>
<version>
1.2
</version>
</dependency>
<dependency>
<groupid>javax.servlet</groupid>
<artifactid>servlet-api</artifactid>
<version>
3.0
</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupid>javax.servlet.jsp</groupid>
<artifactid>jsp-api</artifactid>
<version>
2.2
</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupid>commons-fileupload</groupid>
<artifactid>commons-fileupload</artifactid>
<version>
1.3
.
1
</version>
</dependency>
<dependency>
<groupid>commons-lang</groupid>
<artifactid>commons-lang</artifactid>
<version>
2.6
</version>
</dependency>
<dependency>
<groupid>commons-codec</groupid>
<artifactid>commons-codec</artifactid>
<version>
1.9
</version>
</dependency>
<dependency>
<groupid>org.apache.httpcomponents</groupid>
<artifactid>httpclient</artifactid>
<version>
4.5
</version>
</dependency>
<dependency>
<groupid>org.slf4j</groupid>
<artifactid>slf4j-api</artifactid>
<version>
1.7
.
10
</version>
</dependency>
<dependency>
<groupid>org.slf4j</groupid>
<artifactid>slf4j-log4j12</artifactid>
<version>
1.7
.
10
</version>
</dependency>
<dependency>
<groupid>log4j</groupid>
<artifactid>log4j</artifactid>
<version>
1.2
.
17
</version>
</dependency>
<dependency>
<groupid>com.alibaba</groupid>
<artifactid>fastjson</artifactid>
<version>
1.1
.
41
</version>
</dependency>
<dependency>
<groupid>org.codehaus.jackson</groupid>
<artifactid>jackson-mapper-asl</artifactid>
<version>
1.9
.
13
</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactid>maven-compiler-plugin</artifactid>
<version>
2.3
.
2
</version>
<configuration>
<source>
1.7
</source>
<target>
1.7
</target>
</configuration>
</plugin>
<plugin>
<artifactid>maven-war-plugin</artifactid>
<version>
2.2
</version>
<configuration>
<version>
3.0
</version>
<failonmissingwebxml>
false
</failonmissingwebxml>
</configuration>
</plugin>
</plugins>
<finalname>${project.artifactid}_${project.version}_${maven.build.timestamp}</finalname>
</build>
</project>
|
四. 相关配置文件配置,整合ssm框架 。
web.xml 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
<?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/j2ee"
xmlns:web=
"http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemalocation=
"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version=
"2.4"
>
<!-- 配置 spring -->
<context-param>
<param-name>contextconfiglocation</param-name>
<param-value>classpath:spring.xml</param-value>
</context-param>
<listener>
<listener-
class
>org.springframework.web.context.contextloaderlistener</listener-
class
>
</listener>
<!-- 防止spring内存溢出监听器 -->
<listener>
<listener-
class
>org.springframework.web.util.introspectorcleanuplistener</listener-
class
>
</listener>
<!-- 配置springmvc -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-
class
>org.springframework.web.servlet.dispatcherservlet</servlet-
class
>
<init-param>
<param-name>contextconfiglocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>
1
</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 字符集过滤器 -->
<filter>
<filter-name>encodingfilter</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>encodingfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
|
spring.xml 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
<?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:mvc=
"http://www.springframework.org/schema/mvc"
xmlns:context=
"http://www.springframework.org/schema/context"
xmlns:aop=
"http://www.springframework.org/schema/aop"
xmlns:tx=
"http://www.springframework.org/schema/tx"
xsi:schemalocation="http:
//www.springframework.org/schema/beans
http:
//www.springframework.org/schema/beans/spring-beans-3.0.xsd
http:
//www.springframework.org/schema/mvc
http:
//www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http:
//www.springframework.org/schema/context
http:
//www.springframework.org/schema/context/spring-context-3.0.xsd
http:
//www.springframework.org/schema/aop
http:
//www.springframework.org/schema/aop/spring-aop-3.0.xsd
http:
//www.springframework.org/schema/tx
http:
//www.springframework.org/schema/tx/spring-tx-3.0.xsd ">
<!-- 扫描service、dao组件 -->
<context:component-scan base-
package
=
"com.yingjun.test"
/>
<!-- 分解配置 jdbc.properites -->
<context:property-placeholder location=
"classpath:jdbc.properties"
/>
<!-- 数据源c3p0 -->
<bean id=
"datasource"
class
=
"com.mchange.v2.c3p0.combopooleddatasource"
>
<property name=
"driverclass"
value=
"${jdbc.driverclassname}"
/>
<property name=
"jdbcurl"
value=
"${jdbc.url}"
/>
<property name=
"user"
value=
"${jdbc.username}"
/>
<property name=
"password"
value=
"${jdbc.password}"
/>
<property name=
"maxpoolsize"
value=
"${c3p0.pool.size.max}"
/>
<property name=
"minpoolsize"
value=
"${c3p0.pool.size.min}"
/>
<property name=
"initialpoolsize"
value=
"${c3p0.pool.size.ini}"
/>
<property name=
"acquireincrement"
value=
"${c3p0.pool.size.increment}"
/>
</bean>
<!-- sessionfactory 将spring和mybatis整合 -->
<bean id=
"sqlsessionfactory"
class
=
"org.mybatis.spring.sqlsessionfactorybean"
>
<property name=
"datasource"
ref=
"datasource"
/>
<property name=
"configlocation"
value=
"classpath:spring-mybatis.xml"
/>
<property name=
"mapperlocations"
value=
"classpath*:com/yingjun/test/mapping/**/*.xml"
/>
</bean>
<bean
class
=
"org.mybatis.spring.mapper.mapperscannerconfigurer"
>
<property name=
"basepackage"
value=
"com,yingjun.test.dao"
/>
<property name=
"sqlsessionfactorybeanname"
value=
"sqlsessionfactory"
/>
</bean>
<bean id=
"transactionmanager"
class
=
"org.springframework.jdbc.datasource.datasourcetransactionmanager"
>
<property name=
"datasource"
ref=
"datasource"
/>
</bean>
<tx:advice id=
"transactionadvice"
transaction-manager=
"transactionmanager"
>
<tx:attributes>
<tx:method name=
"add*"
propagation=
"required"
/>
<tx:method name=
"append*"
propagation=
"required"
/>
<tx:method name=
"insert*"
propagation=
"required"
/>
<tx:method name=
"save*"
propagation=
"required"
/>
<tx:method name=
"update*"
propagation=
"required"
/>
<tx:method name=
"modify*"
propagation=
"required"
/>
<tx:method name=
"edit*"
propagation=
"required"
/>
<tx:method name=
"delete*"
propagation=
"required"
/>
<tx:method name=
"remove*"
propagation=
"required"
/>
<tx:method name=
"repair"
propagation=
"required"
/>
<tx:method name=
"delandrepair"
propagation=
"required"
/>
<tx:method name=
"get*"
propagation=
"supports"
/>
<tx:method name=
"find*"
propagation=
"supports"
/>
<tx:method name=
"load*"
propagation=
"supports"
/>
<tx:method name=
"search*"
propagation=
"supports"
/>
<tx:method name=
"datagrid*"
propagation=
"supports"
/>
<tx:method name=
"*"
propagation=
"supports"
/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id=
"transactionpointcut"
expression=
"execution(* com.yingjun.test.service..*impl.*(..))"
/>
<aop:advisor pointcut-ref=
"transactionpointcut"
advice-ref=
"transactionadvice"
/>
</aop:config>
</beans>
|
为了代替手工使用 sqlsessiondaosupport 或 sqlsessiontemplate 编写数据访问对象 (dao)的代码,mybatis-spring 提供了一个动态代理的实现:mapperfactorybean。这个类 可以让你直接注入数据映射器接口到你的 service 层 bean 中。当使用映射器时,你仅仅如调 用你的 dao 一样调用它们就可以了,但是你不需要编写任何 dao 实现的代码,因为 mybatis-spring 将会为你创建代理.
spring-mybatis.xml 。
1
2
3
4
5
|
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<!doctype configuration
public
"-//mybatis.org//dtd config 3.0//en"
"http://mybatis.org/dtd/mybatis-3-config.dtd"
>
<configuration>
<!-- 暂时不需要其他配置-->
</configuration>
|
spring-mvc.xml 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
<?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.0.xsd
http:
//www.springframework.org/schema/context
http:
//www.springframework.org/schema/context/spring-context-3.0.xsd
http:
//www.springframework.org/schema/mvc
http:
//www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<!-- 默认的注解映射的支持 -->
<mvc:annotation-driven />
<!-- 自动扫描该包,使springmvc认为包下用了
@controller
注解的类是控制器 -->
<context:component-scan base-
package
=
"com.yingjun.test.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>
<!-- 定义跳转的文件的前后缀 ,视图模式配置 -->
<bean
class
=
"org.springframework.web.servlet.view.internalresourceviewresolver"
>
<!-- 这里的配置我的理解是自动给后面action的方法
return
的字符串加上前缀和后缀,变成一个 可用的url地址 -->
<property name=
"prefix"
value=
"/web-inf/jsp/"
/>
<property name=
"suffix"
value=
".jsp"
/>
</bean>
<!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 -->
<bean id=
"multipartresolver"
class
=
"org.springframework.web.multipart.commons.commonsmultipartresolver"
>
<!-- 默认编码 -->
<property name=
"defaultencoding"
value=
"utf-8"
/>
<!-- 文件大小最大值 -->
<property name=
"maxuploadsize"
value=
"10485760000"
/>
<!-- 内存中的最大值 -->
<property name=
"maxinmemorysize"
value=
"40960"
/>
</bean>
</beans>
|
log4j.properties 。
1
2
3
4
5
6
7
8
9
|
jdbc.driverclassname=com.mysql.jdbc.driver
jdbc.url=jdbc:mysql:
//192.168.1.194:3306/test?useunicode=true&characterencoding=utf-8
jdbc.username=root
jdbc.password=root
c3p0.pool.size.max=
20
c3p0.pool.size.min=
5
c3p0.pool.size.ini=
3
c3p0.pool.size.increment=
2
|
jdbc.properties 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
log4j.rootlogger=info, console, debug, app, error
###console ###
log4j.appender.console = org.apache.log4j.consoleappender
log4j.appender.console.target = system.out
log4j.appender.console.layout = org.apache.log4j.patternlayout
log4j.appender.console.layout.conversionpattern = %d %p[%c:%l]- %m%n
### debug ###
log4j.appender.debug = org.apache.log4j.dailyrollingfileappender
log4j.appender.debug.file = log/debug.log
log4j.appender.debug.append =
true
log4j.appender.debug.threshold = debug
log4j.appender.debug.datepattern=
'.'
yyyy-mm-dd
log4j.appender.debug.layout = org.apache.log4j.patternlayout
log4j.appender.debug.layout.conversionpattern = %d %p[%c:%l] - %m%n
### app ###
log4j.appender.app = org.apache.log4j.dailyrollingfileappender
log4j.appender.app.file = log/app.log
log4j.appender.app.append =
true
log4j.appender.app.threshold = info
log4j.appender.app.datepattern=
'.'
yyyy-mm-dd
log4j.appender.app.layout = org.apache.log4j.patternlayout
log4j.appender.app.layout.conversionpattern = %d %p[%c:%l] - %m%n
### error ###
log4j.appender.error = org.apache.log4j.dailyrollingfileappender
log4j.appender.error.file = log/error.log
log4j.appender.error.append =
true
log4j.appender.error.threshold = error
log4j.appender.error.datepattern=
'.'
yyyy-mm-dd
log4j.appender.error.layout = org.apache.log4j.patternlayout
log4j.appender.error.layout.conversionpattern =%d %p[%c:%l] - %m%n
|
五. 利用mybatis generator自动创建实体类、映射文件以及dao接口 。
mybatis属于一种半自动的orm框架,所以主要的工作就是配置mapping映射文件,但是由于手写映射文件很容易出错,所以可利用mybatis生成器自动生成实体类、dao接口和mapping映射文件。这样可以省去很多的功夫,将生成的代码copy到项目工程中即可.
生成代码需要的文件和jar并建立如下目录结构:
在generatorl.xml中配置相关的数据库连接,已经数据库表:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
<?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=
"mysql-connector-java-5.1.34.jar"
/>
<context id=
"db2tables"
targetruntime=
"mybatis3"
>
<commentgenerator>
<property name=
"suppressdate"
value=
"true"
/>
<!-- 是否去除自动生成的注释
true
:是 :
false
:否 -->
<property name=
"suppressallcomments"
value=
"true"
/>
</commentgenerator>
<!--数据库链接url,用户名、密码 -->
<jdbcconnection driverclass=
"com.mysql.jdbc.driver"
connectionurl=
"jdbc:mysql://192.168.1.194:3306/noc"
userid=
"root"
password=
"root"
>
</jdbcconnection>
<javatyperesolver>
<property name=
"forcebigdecimals"
value=
"false"
/>
</javatyperesolver>
<!-- 生成模型的包名和位置 -->
<javamodelgenerator targetpackage=
"com.yingjun.test.model"
targetproject=
"src"
>
<property name=
"enablesubpackages"
value=
"true"
/>
<property name=
"trimstrings"
value=
"true"
/>
</javamodelgenerator>
<!-- 生成映射文件的包名和位置 -->
<sqlmapgenerator targetpackage=
"com.yingjun.test.mapping"
targetproject=
"src"
>
<property name=
"enablesubpackages"
value=
"true"
/>
</sqlmapgenerator>
<!-- 生成dao的包名和位置 -->
<javaclientgenerator type=
"xmlmapper"
targetpackage=
"com.yingjun.test.dao"
targetproject=
"src"
>
<property name=
"enablesubpackages"
value=
"true"
/>
</javaclientgenerator>
<!-- 要生成的表 tablename是数据库中的表名或视图名 domainobjectname是实体类名 -->
<table tablename=
"other_list"
domainobjectname=
"otherlist"
enablecountbyexample=
"fasle"
enableupdatebyexample=
"false"
enabledeletebyexample=
"false"
enableselectbyexample=
"false"
selectbyexamplequeryid=
"false"
>
</table>
</context>
</generatorconfiguration>
|
打开cmd窗口 进入该目录结构,输入命令行:
java -jar mybatis-generator-core-1.3.2.jar -configfile generator.xml -overwrite 。
运行完成后会生成相应的dao mapper 和model,是不是很爽.
六. 建立service层以及conrorller层 。
- package com.yingjun.test.service;
- public interface otherservicei {
- public string getoterlist();
- }
- package com.yingjun.test.service;
- import java.util.arraylist;
- import java.util.arrays;
- import java.util.hashset;
- import java.util.list;
- import java.util.map;
- import java.util.set;
- import org.springframework.beans.factory.annotation.autowired;
- import org.springframework.stereotype.service;
- import com.alibaba.fastjson.json;
- import com.alibaba.fastjson.serializer.serializerfeature;
- import com.yingjun.test.dao.otherlistmapper;
- import com.yingjun.test.model.otherlist;
- import com.yingjun.test.model.otherlistdomain;
- @service
- public class otherserviceimpl implements otherservicei {
- @autowired
- private otherlistmapper otherlistmapper;
- @override
- public string getoterlist() {
- set<string> set=new hashset<string>();
- list<otherlist> list=otherlistmapper.selectall();
- list<otherlistdomain> jsonlist=new arraylist<otherlistdomain>();
- for(otherlist other:list){
- string title=other.gettitle();
- if(set.contains(title)){
- continue;
- }else{
- list<otherlist> t_list=new arraylist<otherlist>();
- for(otherlist data:list){
- if(title.equals(data.gettitle())){
- t_list.add(data);
- }
- }
- otherlistdomain domain=new otherlistdomain();
- domain.settitle(title);
- domain.setitems(t_list);
- jsonlist.add(domain);
- set.add(other.gettitle());
- }
- }
- return json.tojsonstring(jsonlist, serializerfeature.writemapnullvalue);
- }
-
- }
- package com.yingjun.test.controller;
- import org.springframework.beans.factory.annotation.autowired;
- import org.springframework.stereotype.controller;
- import org.springframework.web.bind.annotation.requestmapping;
- import org.springframework.web.bind.annotation.responsebody;
- import com.alibaba.fastjson.json;
- import com.yingjun.test.service.otherservicei;
- import com.yingjun.test.service.stockstatusservicei;
- @controller
- @requestmapping(value = "/")
- public class tsscontroller {
- @autowired
- private otherservicei otherservice;
- @requestmapping(value="/getotherlist",produces="text/html;charset=utf-8" )
- @responsebody
- private string getotherlist(){
- string json=otherservice.getoterlist();
- return json;
- }
- }
七. 建立测试类 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import
java.util.list;
import
org.apache.log4j.logmanager;
import
org.apache.log4j.logger;
import
org.junit.test;
import
org.junit.runner.runwith;
import
org.springframework.beans.factory.annotation.autowired;
import
org.springframework.test.context.contextconfiguration;
import
org.springframework.test.context.junit4.springjunit4classrunner;
@runwith
(springjunit4classrunner.
class
)
@contextconfiguration
(locations = {
"classpath:spring.xml"
})
public
class
testmybatis {
@autowired
private
otherservicei service;
@test
public
void
test() {
string list=service.getoterlist();
logger.info(list);
}
}
|
八. 通过浏览器进行验证 。
http://localhost:8080/tzyjstateservice/getotherlist 。
至此,测试成功,ssm三大框架的整合就完成了,有什么其他需求可以在此基础继续添 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:http://blog.csdn.net/bhuds/article/details/52674850 。
最后此篇关于详解手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)的文章就讲到这里了,如果你想了解更多关于详解手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
从开发者的角度来看,Mac 版 Safari 和 Windows 版 Safari 有何不同? 我认为可以归结为评估两者之间的差异(如果我遗漏了什么,请更正): - 布局渲染 - Javascript
正如标题所说:Android 版 Chrome 和 iOS 版 Chrome 有什么区别。 我对两者进行了一些研究,但找不到关于该主题的任何最新信息。进行这项研究的原因是因为我正在研究某些 Web A
我有以下脚本可以获取您的地理位置并重定向您到 Google map : (function(){ navigator.geolocation.getCurrentPosition(function(p
我负责修复导航栏显示比应有的低 1 像素的问题。 查看网站后,我无法找到所报告的问题,直到我在 Mac 上进行了检查。 Firefox、Safari 等在 Mac 上运行良好,但 Chrome 是导致
我是典型的 .NET 开发人员(C# 是我的第一语言),几年前转向 ASP.NET MVC。现在是我职业生涯发生重大变化的新时期。如果我们看看 Web 开发的前景,我们可以看到新技术如何占领世界,而其
Grails 2.0 项目目前带有资源插件 1.1.5,它似乎有几个依赖问题(例如,参见 this post 的答案)。我正在使用 IntelliJ,虽然我将 BuildConfig.groovy 更
我有一个支持 android 2.3.3 的 android 项目。 但它也支持 sdk 版本 17。当我创建一个新 Activity 时,它会创建一个特定于版本 17 的 Activity 。 如何
有没有人有在 Android 设备上使用 pjsip 的经验?我看到几个非商业/测试项目使用它,所以我假设它可以完成,但没有一个有很好的记录。我认为 pjsip-jni 项目是一个不错的起点,但基本上
谁能告诉我在 Xcode (iPhone) 中执行以下操作的最佳方法是什么。 我有一个主导航屏幕,上面有一些按钮。当用户单击任何按钮时,他们将被带到带有更多选项按钮的子导航屏幕。在这里,他们单击任意一
我正在使用 JBoss Embedded beta3.SP10 版本,我正面临一个应该在某些 Hibernate 版本中修复的持久性错误。可悲的是,我不知道我的 JBoss Embedded 中使用的
我想在 android 中使用简单的 snmp get。我找到了 java 的代码并尝试在 android 中使用它。我还附加了 snmp4j.jar 文件用于 android。但是我得到了 Null
我的实现目标是: 可以通过一个或多个关键词搜索到文章。 可以通过文章的关键词列表查询到其相关文章。 查询到的结果依据相关程度降序排列。 查询速度要够快。(理论上关键词检索比全文检索要快很多的
我正在尝试创建一个允许我将视频从 iPhone 流式传输到服务器的应用程序。我目前关于如何做到这一点的理论是创建一系列 FFMpeg 文件并将它们发送到服务器。据我所知,我已经编译了 FFMpeg图书
这个问题在这里已经有了答案: Login failed in github for window (5 个回答) 7年前关闭。 当我安装 GitHub 时,我无法使用我的帐户凭据登录。 我收到错误 L
我需要在我的 iPad 项目中使用 Three20。我想知道 iPhone 版本的 Three20 项目是否可以直接在 iPad 上使用,还是应该等待这个时间线完成: http://three20.i
有人能做到吗 http://www.surina.net/soundtouch/适用于 iPhone? 简单的 Xcode 演示会很有帮助。 我只想通过一些音调操作来播放音效。谢谢克里斯 最佳答案 使
如何在iPhone中使用“speex”进行音频编码/解码?我没有在项目中添加框架。 最佳答案 这个blog entry: Compile Speex For iPhone克利夫顿·克雷格(Clifto
我想知道bonjour是公共(public)API还是私有(private)API?我们可以直接在我们的应用程序中使用它吗? 最佳答案 Bonjour 由 NSNetServices 和 CFNetS
••••• 已解决•••••该应用程序可用。只是花了一些时间才出现。我之所以将其视为测试版,是因为我的 Google 帐户用于 alpha 测试。如果您遇到同样的问题,只需从测试人员中删除您的帐户并等
我是 Android 编程初学者。 我在使用 Android 下载文件时遇到问题 我使用了 Httpost、Httpget 和 hhtpurlconnection前两个根本不起作用第三个两次无法下载
我是一名优秀的程序员,十分优秀!