0%

SSM搭建

前言:平时习惯用Springboot了,今天重新做一个SSM项目,发现很麻烦,所以就总结一下,方便下次搭建

配置

目录结构

image-20200103233037437

image-20200103233045968

pom.xml

properties
1
2
3
4
5
6
7
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<springVersion>5.1.5.RELEASE</springVersion>
<mybatis.version>3.4.6</mybatis.version>
</properties>
dependencies
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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- 日志 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
<scope>compile</scope>
</dependency>
<!-- spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${springVersion}</version>
</dependency>
<!-- mysql驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<!-- jdbc连接池 选择其一即可 -->
<!-- druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.20</version>
</dependency>
<!-- HikariCP -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.3.1</version>
</dependency>
<!-- 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.3.2</version>
</dependency>
<!-- servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- mybatis-generator -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
<!-- tk.mybatis -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.1.5</version>
</dependency>
<!-- fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.60</version>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
<scope>provided</scope>
</dependency>
<!-- commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>
<!-- spring-boot-devtools -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<!-- jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9</version>
</dependency>
<!-- jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.9</version>
</dependency>
<!-- jackson-annotations -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.9</version>
</dependency>
plugin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<!-- mybatis用于生成代码的配置文件 -->
<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>

<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.1.5</version>
</dependency>
</dependencies>
</plugin>

jdbc.properties

1
2
3
4
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/ssm?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
jdbc.username=root
jdbc.password=123456

spring-dao.xml

使用了hikari与tk.mybatis

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"?>
<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"
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.xsd">
<context:property-placeholder location="classpath:jdbc.properties"/>

<!-- 数据库连接池 -->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource">
<!-- 配置连接池属性 -->
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<!-- 自动提交 -->
<property name="autoCommit" value="true"/>
<!-- 连接存活时间 -->
<property name="maxLifetime" value="1800000"/>
<!-- 连接闲置最长时间 -->
<property name="idleTimeout" value="600000"/>
<!-- 连接池最大数量 -->
<property name="maximumPoolSize" value="10"/>
<!-- 超时时间-->
<property name="connectionTimeout" value="30000"/>
</bean>

<!-- 配置SqlSessionFactory对象 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource"/>
<!-- 配置MyBaties全局配置文件:mybatis-config.xml -->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!-- 扫描entity包 使用别名 -->
<property name="typeAliasesPackage" value="com.husku.dao.entity"/>
<!-- 扫描sql配置文件:mapper需要的xml文件 -->
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>

<!-- 配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 -->
<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 注入sqlSessionFactory -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!-- 给出需要扫描Dao接口包 -->
<property name="basePackage" value="com.husky.ssm.dao"/>
</bean>
</beans>

mybatis-config.xml

1
2
3
4
5
6
7
8
9
10
<?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>
<settings>
<!-- 开启驼峰命名转换 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>

generatorConfig.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
<?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="E:\repository\mysql\mysql-connector-java\8.0.16\mysql-connector-java-8.0.16.jar"/>

<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<property name="javaFileEncoding" value="UTF-8"/>
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
<!-- caseSensitive默认false,当数据库表名区分大小写时,可以将该属性设置为true -->
<property name="caseSensitive" value="true"/>
</plugin>
<commentGenerator type="org.mybatis.generator.internal.DefaultCommentGenerator">
</commentGenerator>
<!-- 配置jdbc连接信息 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3306/ssm"
userId="root"
password="123456">
<!-- 防止生成不同库的同名表 -->
<property name="nullCatalogMeansCurrent" value="true"/>
</jdbcConnection>

<!-- 配置model包名和输出路径-->
<javaModelGenerator targetPackage="com.husky.ssm.dao.entity" targetProject="src/main/java"/>

<!-- 配置mapper.xml的生成目录和输出路径, 如mybatis.mapper.matrix 代表将生成的mapper.xml -->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/>

<!-- 配置mapper.java的包名和输出路径-->
<javaClientGenerator targetPackage="com.husky.ssm.dao.mapper" targetProject="src/main/java"
type="XMLMAPPER"/>

<!-- 配置需要自动生成mapper的表名, 一个table标签配置一张表,可同时配置个table标签 -->
<table tableName="borrow"></table>
</context>
</generatorConfiguration>

image-20200103234207598

然后配置maven并运行命令,就可以自动生成entity、mapper文件

spring-service.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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"
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.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 扫描service包下所有使用注解的类型 -->
<context:component-scan base-package="com.husky.ssm.service" />

<!-- 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource" />
</bean>

<!-- 配置基于注解的声明式事务 -->
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>

spring-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
<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/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<!-- 启用注解驱动-->
<mvc:annotation-driven/>
<!-- 开启默认的Servlet处理器,用于处理静态资源URL -->
<mvc:default-servlet-handler/>
<!-- 扫描Controller -->
<context:component-scan base-package="com.husky.ssm.controller"/>

<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/templates/"/>
<property name="suffix" value=".html"/>
</bean>
</beans>

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
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring-*.xml</param-value>
</init-param>
</servlet>

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

<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>

<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>

log4j.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
log4j.rootLogger=INFO,stdout,debug,error

#输出到控制台
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %p [%t] %C.%M(%L) | %m%n

#输出DEBUG级别以上的日志到文件
log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %p [%t] %C.%M(%L) | %m%n
log4j.appender.debug.File=./logs/debug.txt
log4j.appender.debug.DatePattern=','yyyy-MM-dd
log4j.appender.debug.Threshold=DEBUG
log4j.appender.debug.Append=true
log4j.appender.debug.Encoding=UTF-8

#输出DEBUG级别以上的日志到文件
log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.layout=org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %p [%t] %C.%M(%L) | %m%n
log4j.appender.error.File=./logs/error.txt
log4j.appender.error.DatePattern=','yyyy-MM-dd
log4j.appender.error.Threshold=ERROR
log4j.appender.error.Append=true
log4j.appender.error.Encoding=UTF-8

实例

SQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-- ----------------------------
-- Table structure for book
-- ----------------------------
DROP TABLE IF EXISTS `book`;
CREATE TABLE `book` (
`id` bigint(20) NOT NULL COMMENT 'ID',
`book_id` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图书编号',
`book_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图书名称',
`status` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '状态\r\nPURCHASE:采购中\r\nAVAILABLE:可借\r\nBORROWED:已借\r\nLOSE:丢失\r\n\r\n',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_book_id`(`book_id`) USING BTREE,
INDEX `idx_book_name`(`book_name`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

-- ----------------------------
-- Records of book
-- ----------------------------
INSERT INTO `book` VALUES (1, '1000', 'Java程序设计', 'AVAILABLE');
INSERT INTO `book` VALUES (2, '1001', '数据结构', 'AVAILABLE');
INSERT INTO `book` VALUES (3, '1002', '设计模式', 'AVAILABLE');
INSERT INTO `book` VALUES (4, '1003', '编译原理', 'AVAILABLE');

dao

entity

可以用mybatis-generator自动生成

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
@Table(name = "book")
public class Book {
/**
* ID
*/
@Id
private Long id;

/**
* 图书编号
*/
@Column(name = "book_id")
private String bookId;

/**
* 图书名称
*/
@Column(name = "book_name")
private String bookName;

/**
* 状态
PURCHASE:采购中
AVAILABLE:可借
BORROWED:已借
LOSE:丢失


*/
private String status;

// 省略get、set
mapper

可以用mybatis-generator自动生成,并使用tk.mybatis

1
2
3
4
5
6
7
8
public interface BookMapper extends Mapper<Book> {
/**
* 图书分页查询
* @param map
* @return
*/
List<BookDTO> bookPageQuery(Map<String,Object> map);
}
mapper.xml

可以用mybatis-generator自动生成

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
<?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="com.husky.ssm.dao.mapper.BookMapper">
<resultMap id="BaseResultMap" type="com.husky.ssm.dao.entity.Book">
<!--
WARNING - @mbg.generated
-->
<id column="id" jdbcType="BIGINT" property="id" />
<result column="book_id" jdbcType="VARCHAR" property="bookId" />
<result column="book_name" jdbcType="VARCHAR" property="bookName" />
<result column="status" jdbcType="VARCHAR" property="status" />
</resultMap>

<select id="bookPageQuery" parameterType="java.util.Map" resultType="com.husky.ssm.dto.BookDTO">
select
id,
book_id,
book_name,
status
from
book
<where>
<if test="id !=null and id!=''">
and id = #{id}
</if>
<if test="bookId != null and bookId != ''">
and book_id = #{bookId}
</if>
<if test="bookName != null and bookName != ''">
and instr(book_name,#{bookName})>0
</if>
<if test="status != null and status != ''">
and status = #{status}
</if>
</where>
order by id
limit #{offset},#{limit}
</select>
</mapper>

request

BaseRequest
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* @author shency
* @description: TODO
* @date: 2019/11/12
*/
@Data
public abstract class BaseRequest implements Serializable {
private static final long serialVersionUID = 1426272192190531773L;
/**
* IP
*/
public String requestIp;

/**
* 请求时间
*/
public String requestTime;
}
BookPageRequest
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
/**
* @author shency
* @description: TODO
* @date: 2019/11/12
*/
@Setter
@Getter
public class BookPageRequest extends BasePageRequest {
/**
* ID
*/
private Long id;

/**
* 图书ID
*/
private String bookId;

/**
* 图书名称
*/
private String bookName;

/**
* 状态
* PURCHASE:采购中
* AVAILABLE:可借
* BORROWED:已借
* LOSE:丢失
*/
private String status;
}
StudentPageRequest
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
/**
* @author shency
* @description: TODO
* @date: 2019/11/12
*/
@Getter
@Setter
public class StudentPageRequest extends BasePageRequest {
/**
* ID
*/
private Long id;

/**
* 学号
*/
private String studentId;

/**
* 学生姓名
*/
private String studentName;

/**
* 状态
* NORMAL:正常
* ABNORMAL:异常
* GRADUATION:毕业
*/
private String status;
}

Service

1
2
3
4
5
6
7
8
/**
* @author shency
* @description: TODO
* @date: 2019/11/14
*/
public interface IBookService {
ResultModel<List<BookDTO>> bookPageQuery(BookPageRequest req);
}
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
/**
* @author shency
* @description: TODO
* @date: 2019/11/14
*/
@Service
public class BookService implements IBookService {
@Autowired
private BookMapper bookMapper;

@Override
public ResultModel<List<BookDTO>> bookPageQuery(BookPageRequest req) {
Map<String,Object> map = new HashMap<>();
map.put("id", req.getId());
map.put("bookId", req.getBookId());
map.put("bookName",req.getBookName());
map.put("status",req.getStatus());
map.put("offset",req.getOffset());
map.put("limit",req.getLimit());

List<BookDTO> list = bookMapper.bookPageQuery(map);
if(CollectionUtils.isEmpty(list)){
list = new ArrayList<BookDTO>();
}
return new ResultModel<List<BookDTO>>().setSuccess(list);
}
}

controller

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
* @author shency
* @description: TODO
* @date: 2019/11/14
*/
@Slf4j
@Controller
public class BookController {
@Autowired
private IBookService bookService;

@ResponseBody
@RequestMapping("/book/bookPageQuery.json")
public ResultModel<List<BookDTO>> bookPageQuery(@RequestBody BookPageRequest req) {
return bookService.bookPageQuery(req);
}
}

单元测试

image-20200103234226176

BaseTest
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.husky.ssm;

import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
* @author shency
* @description: TODO
* @date: 2019/11/12
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:spring/spring-*.xml"})
public class BaseTest {
}
BookServiceTest
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* @author shency
* @description: TODO
* @date: 2019/11/15
*/
@Slf4j
public class BookServiceTest extends BaseTest {
@Autowired
private IBookService bookService;

@Test
public void BookPageQuery(){
BookPageRequest req = new BookPageRequest();
log.info(JSON.toJSONString(bookService.bookPageQuery(req)));
}
}

postman

image-20200103234235167

-------------本文结束感谢您的阅读-------------