前言

学习完MyBatis,Spring,SpringMVC之后,我们需要做的就是将这三者联系起来,Spring实现业务对象管理,Spring MVC负责请求的转发和视图管理, MyBatis作为数据对象持久化引擎。这样搭配的优点是:轻量、自由度高、Spring与Spring MVC契合度更好。通过一个图书管理示例完成SSM框架的集成。

本章目标

通过图书管理系统完成SSM框架的集成。

项目构建

一.父模块

1.我们打开idea选择create new project,然后选择Maven项目,我们暂时先不要选择maven骨架,等我们的视图层(WEB-UI层)的时候再选择maven骨架

2.这一步输入组织名,模块名称

Groupld:组织名

artifactId:模块名称

version:版本号

在Maven世界中,每个工程都有它唯一的 组织名、模块名、版本 ,这三个就是maven项目的坐标。一个maven工程可以打包成jar、war、pom等形式,但是它们都是拥有上述三个坐标的。我们在项目过程中导入的jar包就是通过上述坐标值唯一确定的。因此,我们在创建一个maven工程时会要求指定具体的 组织名、模块名、版本、打包方式。

二.子模块(common层)

1.创建子模块common层,然后点击next

 

三.子模块(Dao层)

1.子模块Dao层和Comon一样,这里就不再做过多的描述了

2.直接完成最后一步

四.子模块(Service层)

1.同理,如上

五.子模块(Entity层)

1.实体层和mmon层一样都是同样的操作步骤,这里我们就不进行截图了,操作步骤都一样

六.子模块(WEB-UI层)

1.子模块web-ui层需要讲一下,因为我们这一层是视图层,所以我们需要选择maven骨架。

2.然后点击next,输入模块名之后finish就可以了,在这里我们需要选择自己本地的中央仓库。自此我们的多模块项目已经搭建好了

3.完整的项目结构如下:

4.在这里我们发现视图层多了webapp这个文件夹,以后的开发过程中我们的视图都是放在WEB_INF目录下的

common模块:通用模块,不依赖其它任何模块,主要有utils、可以在多个不同项目中使用

entitie模块:POJO、VO、DTO

dao模块:数据持久化,访问数据库,这里使用Mybatis

service模块:业务模块,处理业务逻辑

webui模块:B/S结构的表示层,主要用于在浏览器中显示数据,提供用户接口

模块依赖

(1)父模块依赖

1.接下来我们去父模块的pom.xml文件进行统一的模块管理,为了方便管理版本和后续添加依赖不那么繁琐,我们在父模块pom.xml文件中只对依赖进行统一管理起来,而不进行依赖,当我们需要哪一个依赖的时候,我们只需要引入即可。

父模块pom.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6.  
  7. <groupId>com.ssm.booksystem</groupId>
  8. <artifactId>BookSystem</artifactId>
  9. <packaging>pom</packaging>
  10. <version>1.0-SNAPSHOT</version>
  11. <modules>
  12. <module>Book-Common</module>
  13. <module>Book-Dao</module>
  14. <module>Book-Service</module>
  15. <module>Book-WEBUI</module>
  16. <module>Book-Entity</module>
  17. </modules>
  18. <properties>
  19. <!--模块内部依赖-->
  20. <Book-Common.version>1.0-SNAPSHOT</Book-Common.version>
  21. <Book-Dao.version>1.0-SNAPSHOT</Book-Dao.version>
  22. <Book-Service.version>1.0-SNAPSHOT</Book-Service.version>
  23. <Book-Entity.version>1.0-SNAPSHOT</Book-Entity.version>
  24. <Book-WEBUI.version>1.0-SNAPSHOT</Book-WEBUI.version>
  25. <!--Common模块管理-->
  26. <jackson.version>2.7.4</jackson.version>
  27. <commons-lang3.version>3.4</commons-lang3.version>
  28. <!--通用部分-->
  29. <log4j.version>2.6.1</log4j.version>
  30. <junit.version>4.12</junit.version>
  31. <spring-test.version>4.3.18.RELEASE</spring-test.version>
  32. <!--Spring-->
  33. <spring.version>4.3.0.RELEASE</spring.version>
  34. <aspectjweaver.version>1.8.9</aspectjweaver.version>
  35. <cglib.version>3.2.4</cglib.version>
  36. <!--mybatis-->
  37. <mybatis-spring.version>1.3.0</mybatis-spring.version>
  38. <mysql-connector-java.version>5.1.38</mysql-connector-java.version>
  39. <mybatis.version>3.4.1</mybatis.version>
  40. <c3p0.version>0.9.1.2</c3p0.version>
  41. <!--spring mvc-->
  42. <jstl.version>1.2</jstl.version>
  43. <servlet-api.version>4.0.1</servlet-api.version>
  44. <jsp-api.version>2.1</jsp-api.version>
  45. <hibernate.version>5.2.2.Final</hibernate.version>
  46. <commons-io.version>2.4</commons-io.version>
  47. <commons-fileupload.version>1.3.1</commons-fileupload.version>
  48. <freemarker.version>2.3.23</freemarker.version>
  49.  
  50. </properties>
  51. <!--模块依赖进行统一管理-->
  52. <dependencyManagement>
  53. <dependencies>
  54. <dependency>
  55. <groupId>com.ssm.booksystem</groupId>
  56. <artifactId>Book-Common</artifactId>
  57. <version>${Book-Common.version}</version>
  58. </dependency>
  59. <dependency>
  60. <groupId>com.ssm.booksystem</groupId>
  61. <artifactId>Book-Dao</artifactId>
  62. <version>${Book-Dao.version}</version>
  63. </dependency>
  64. <dependency>
  65. <groupId>com.ssm.booksystem</groupId>
  66. <artifactId>Book-Service</artifactId>
  67. <version>${Book-Service.version}</version>
  68. </dependency>
  69. <dependency>
  70. <groupId>com.ssm.booksystem</groupId>
  71. <artifactId>Book-Entity</artifactId>
  72. <version>${Book-Entity.version}</version>
  73. </dependency>
  74. <dependency>
  75. <groupId>com.ssm.booksystem</groupId>
  76. <artifactId>Book-WEBUI</artifactId>
  77. <version>${Book-WEBUI.version}</version>
  78. </dependency>
  79. <!--common模块-->
  80. <!--jackson-->
  81. <dependency>
  82. <groupId>com.fasterxml.jackson.core</groupId>
  83. <artifactId>jackson-databind</artifactId>
  84. <version>${jackson.version}</version>
  85. </dependency>
  86.  
  87. <dependency>
  88. <groupId>com.fasterxml.jackson.core</groupId>
  89. <artifactId>jackson-core</artifactId>
  90. <version>${jackson.version}</version>
  91. </dependency>
  92.  
  93. <dependency>
  94. <groupId>com.fasterxml.jackson.core</groupId>
  95. <artifactId>jackson-annotations</artifactId>
  96. <version>${jackson.version}</version>
  97. </dependency>
  98. <!--apache-commons-->
  99. <dependency>
  100. <groupId>org.apache.commons</groupId>
  101. <artifactId>commons-lang3</artifactId>
  102. <version>${commons-lang3.version}</version>
  103. </dependency>
  104.  
  105. <!--log4j日志包 -->
  106. <dependency>
  107. <groupId>org.apache.logging.log4j</groupId>
  108. <artifactId>log4j-core</artifactId>
  109. <version>${log4j.version}</version>
  110. </dependency>
  111. <!-- JUnit单元测试工具 -->
  112. <dependency>
  113. <groupId>junit</groupId>
  114. <artifactId>junit</artifactId>
  115. <version>${junit.version}</version>
  116. </dependency>
  117. <dependency>
  118. <groupId>org.springframework</groupId>
  119. <artifactId>spring-test</artifactId>
  120. <version>${spring-test.version}</version>
  121. </dependency>
  122. <!--Spring框架核心库 -->
  123. <dependency>
  124. <groupId>org.springframework</groupId>
  125. <artifactId>spring-context</artifactId>
  126. <version>${spring.version}</version>
  127. </dependency>
  128. <!-- aspectJ AOP 织入器 -->
  129. <dependency>
  130. <groupId>org.aspectj</groupId>
  131. <artifactId>aspectjweaver</artifactId>
  132. <version>${aspectjweaver.version}</version>
  133. </dependency>
  134. <dependency>
  135. <groupId>cglib</groupId>
  136. <artifactId>cglib</artifactId>
  137. <version>${cglib.version}</version>
  138. </dependency>
  139. <!--mybatis-spring适配器 -->
  140. <dependency>
  141. <groupId>org.mybatis</groupId>
  142. <artifactId>mybatis-spring</artifactId>
  143. <version>${mybatis-spring.version}</version>
  144. </dependency>
  145. <!--Spring java数据库访问包,在本例中主要用于提供数据源 -->
  146. <dependency>
  147. <groupId>org.springframework</groupId>
  148. <artifactId>spring-jdbc</artifactId>
  149. <version>${spring.version}</version>
  150. </dependency>
  151. <!--mysql数据库驱动 -->
  152. <dependency>
  153. <groupId>mysql</groupId>
  154. <artifactId>mysql-connector-java</artifactId>
  155. <version>${mysql-connector-java.version}</version>
  156. </dependency>
  157. <!-- mybatis ORM框架 -->
  158. <dependency>
  159. <groupId>org.mybatis</groupId>
  160. <artifactId>mybatis</artifactId>
  161. <version>${mybatis.version}</version>
  162. </dependency>
  163. <!--c3p0 连接池 -->
  164. <dependency>
  165. <groupId>c3p0</groupId>
  166. <artifactId>c3p0</artifactId>
  167. <version>${c3p0.version}</version>
  168. </dependency>
  169.  
  170. <!-- Spring MVC -->
  171. <dependency>
  172. <groupId>org.springframework</groupId>
  173. <artifactId>spring-webmvc</artifactId>
  174. <version>${spring.version}</version>
  175. </dependency>
  176. <dependency>
  177. <groupId>org.springframework</groupId>
  178. <artifactId>spring-context-support</artifactId>
  179. <version>${spring.version}</version>
  180. </dependency>
  181. <!-- JSTL -->
  182. <dependency>
  183. <groupId>javax.servlet</groupId>
  184. <artifactId>jstl</artifactId>
  185. <version>${jstl.version}</version>
  186. </dependency>
  187. <!-- Servlet核心包 -->
  188. <dependency>
  189. <groupId>javax.servlet</groupId>
  190. <artifactId>javax.servlet-api</artifactId>
  191. <version>${servlet-api.version}</version>
  192. </dependency>
  193. <!--JSP -->
  194. <dependency>
  195. <groupId>javax.servlet.jsp</groupId>
  196. <artifactId>jsp-api</artifactId>
  197. <version>${jsp-api.version}</version>
  198. </dependency>
  199. <!--JSR303 -->
  200. <dependency>
  201. <groupId>org.hibernate</groupId>
  202. <artifactId>hibernate-validator</artifactId>
  203. <version>${hibernate.version}</version>
  204. </dependency>
  205. <!--文件上传 -->
  206. <dependency>
  207. <groupId>commons-io</groupId>
  208. <artifactId>commons-io</artifactId>
  209. <version>${commons-io.version}</version>
  210. </dependency>
  211. <dependency>
  212. <groupId>commons-fileupload</groupId>
  213. <artifactId>commons-fileupload</artifactId>
  214. <version>${commons-fileupload.version}</version>
  215. </dependency>
  216. <!-- FreeMarker -->
  217. <dependency>
  218. <groupId>org.freemarker</groupId>
  219. <artifactId>freemarker</artifactId>
  220. <version>${freemarker.version}</version>
  221. </dependency>
  222. </dependencies>
  223.  
  224. </dependencyManagement>
  225.  
  226. </project>

(2)子模块Comon层模块依赖

common模块中的pom.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>BookSystem</artifactId>
  7. <groupId>com.ssm.booksystem</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11.  
  12. <artifactId>Book-Common</artifactId>
  13. <dependencies>
  14. <!--jackson-->
  15. <dependency>
  16. <groupId>com.fasterxml.jackson.core</groupId>
  17. <artifactId>jackson-databind</artifactId>
  18. </dependency>
  19.  
  20. <dependency>
  21. <groupId>com.fasterxml.jackson.core</groupId>
  22. <artifactId>jackson-core</artifactId>
  23. </dependency>
  24.  
  25. <dependency>
  26. <groupId>com.fasterxml.jackson.core</groupId>
  27. <artifactId>jackson-annotations</artifactId>
  28. </dependency>
  29. <!--apache-commons-->
  30. <dependency>
  31. <groupId>org.apache.commons</groupId>
  32. <artifactId>commons-lang3</artifactId>
  33. </dependency>
  34. </dependencies>
  35.  
  36. </project>

(3)子模块Dao层模块依赖

Dao模块中的pom.xml文件,这一层中我们需要依赖common层和实体层,因为在这一层中我们涉及到和数据库打交道,一张表就对应一个POJO

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>BookSystem</artifactId>
  7. <groupId>com.ssm.booksystem</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11.  
  12. <artifactId>Book-Dao</artifactId>
  13. <dependencies>
  14. <dependency>
  15. <groupId>com.ssm.booksystem</groupId>
  16. <artifactId>Book-Common</artifactId>
  17. </dependency>
  18. <dependency>
  19. <groupId>com.ssm.booksystem</groupId>
  20. <artifactId>Book-Entity</artifactId>
  21. </dependency>
  22. <!--log4j日志包 -->
  23. <dependency>
  24. <groupId>org.apache.logging.log4j</groupId>
  25. <artifactId>log4j-core</artifactId>
  26. </dependency>
  27. <!-- JUnit单元测试工具 -->
  28. <dependency>
  29. <groupId>junit</groupId>
  30. <artifactId>junit</artifactId>
  31. </dependency>
  32.  
  33. <dependency>
  34. <groupId>org.springframework</groupId>
  35. <artifactId>spring-test</artifactId>
  36. </dependency>
  37. <!--Spring框架核心库 -->
  38. <dependency>
  39. <groupId>org.springframework</groupId>
  40. <artifactId>spring-context</artifactId>
  41. </dependency>
  42. <!-- aspectJ AOP 织入器 -->
  43. <dependency>
  44. <groupId>org.aspectj</groupId>
  45. <artifactId>aspectjweaver</artifactId>
  46. </dependency>
  47. <dependency>
  48. <groupId>cglib</groupId>
  49. <artifactId>cglib</artifactId>
  50. </dependency>
  51.  
  52. <!--mybatis-spring适配器 -->
  53. <dependency>
  54. <groupId>org.mybatis</groupId>
  55. <artifactId>mybatis-spring</artifactId>
  56. </dependency>
  57. <!--Spring java数据库访问包,在本例中主要用于提供数据源 -->
  58. <dependency>
  59. <groupId>org.springframework</groupId>
  60. <artifactId>spring-jdbc</artifactId>
  61. </dependency>
  62. <!--mysql数据库驱动 -->
  63. <dependency>
  64. <groupId>mysql</groupId>
  65. <artifactId>mysql-connector-java</artifactId>
  66. </dependency>
  67. <!-- mybatis ORM框架 -->
  68. <dependency>
  69. <groupId>org.mybatis</groupId>
  70. <artifactId>mybatis</artifactId>
  71. </dependency>
  72. <!--c3p0 连接池 -->
  73. <dependency>
  74. <groupId>c3p0</groupId>
  75. <artifactId>c3p0</artifactId>
  76. </dependency>
  77. </dependencies>
  78.  
  79. </project>

(4)子模块Service层模块依赖

Service模块中的pom.xml文件,这一层中我们需要依赖dao层

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>BookSystem</artifactId>
  7. <groupId>com.ssm.booksystem</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11.  
  12. <artifactId>Book-Service</artifactId>
  13. <dependencies>
  14. <dependency>
  15. <groupId>com.ssm.booksystem</groupId>
  16. <artifactId>Book-Dao</artifactId>
  17. </dependency>
  18. </dependencies>
  19.  
  20. </project>

(5)子模块Entity层模块依赖

实体层暂时不需要依赖任何的模块,Entity模块中的pom.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>BookSystem</artifactId>
  7. <groupId>com.ssm.booksystem</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11.  
  12. <artifactId>Book-Entity</artifactId>
  13.  
  14. </project>

(6)子模块WEB-UI层模块依赖

Service模块中的pom.xml文件,这一层中我们需要依赖service层

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>BookSystem</artifactId>
  7. <groupId>com.ssm.booksystem</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11.  
  12. <artifactId>Book-WEBUI</artifactId>
  13. <packaging>war</packaging>
  14.  
  15. <name>Book-WEBUI Maven Webapp</name>
  16. <!-- FIXME change it to the project's website -->
  17. <url>http://www.example.com</url>
  18.  
  19. <properties>
  20. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  21. <maven.compiler.source>1.7</maven.compiler.source>
  22. <maven.compiler.target>1.7</maven.compiler.target>
  23. </properties>
  24.  
  25. <dependencies>
  26. <dependency>
  27. <groupId>junit</groupId>
  28. <artifactId>junit</artifactId>
  29. <version>4.11</version>
  30. <scope>test</scope>
  31. </dependency>
  32. <dependency>
  33. <groupId>com.ssm.booksystem</groupId>
  34. <artifactId>Book-Service</artifactId>
  35. </dependency>
  36. <!-- Spring MVC -->
  37. <dependency>
  38. <groupId>org.springframework</groupId>
  39. <artifactId>spring-webmvc</artifactId>
  40. </dependency>
  41.  
  42. <dependency>
  43. <groupId>org.springframework</groupId>
  44. <artifactId>spring-context-support</artifactId>
  45. </dependency>
  46. <!-- Servlet核心包 -->
  47. <dependency>
  48. <groupId>javax.servlet</groupId>
  49. <artifactId>javax.servlet-api</artifactId>
  50. </dependency>
  51. <!--文件上传 -->
  52. <dependency>
  53. <groupId>commons-io</groupId>
  54. <artifactId>commons-io</artifactId>
  55. </dependency>
  56.  
  57. <dependency>
  58. <groupId>commons-fileupload</groupId>
  59. <artifactId>commons-fileupload</artifactId>
  60. </dependency>
  61. <dependency>
  62. <groupId>javax.servlet.jsp</groupId>
  63. <artifactId>jsp-api</artifactId>
  64. </dependency>
  65. <dependency>
  66. <groupId>javax.servlet</groupId>
  67. <artifactId>jstl</artifactId>
  68. </dependency>
  69. </dependencies>
  70.  
  71. <build>
  72. <finalName>Book-WEBUI</finalName>
  73. <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
  74. <plugins>
  75. <plugin>
  76. <artifactId>maven-clean-plugin</artifactId>
  77. <version>3.1.0</version>
  78. </plugin>
  79. <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
  80. <plugin>
  81. <artifactId>maven-resources-plugin</artifactId>
  82. <version>3.0.2</version>
  83. </plugin>
  84. <plugin>
  85. <artifactId>maven-compiler-plugin</artifactId>
  86. <version>3.8.0</version>
  87. </plugin>
  88. <plugin>
  89. <artifactId>maven-surefire-plugin</artifactId>
  90. <version>2.22.1</version>
  91. </plugin>
  92. <plugin>
  93. <artifactId>maven-war-plugin</artifactId>
  94. <version>3.2.2</version>
  95. </plugin>
  96. <plugin>
  97. <artifactId>maven-install-plugin</artifactId>
  98. <version>2.5.2</version>
  99. </plugin>
  100. <plugin>
  101. <artifactId>maven-deploy-plugin</artifactId>
  102. <version>2.8.2</version>
  103. </plugin>
  104. </plugins>
  105. </pluginManagement>
  106. </build>
  107. </project>

(7)最终的依赖效果

这里只展示了common层中的依赖,剩下的依赖也一样

连接数据库

1.这是navicat的操作界面,前面的一些连接配置我在这里就不进行过多的描述了。

  

2.右键localhost_3306选择新建数据库,输入数据的名称,字符集我们选择倒数第二个,也就是utf-8的然后确定就可了

3.数据库脚本

  1. create table book(
  2. bid int auto_increment primary key not null COMMENT'图书编号',
  3. bname varchar(50) not null COMMENT'图书名称',
  4. bauthor VARCHAR(50) COMMENT'图书作者'
  5. )
  6. INSERT into book(bname,bauthor)VALUES
  7. ('斗罗大陆','唐家三少'),
  8. ('假如给我三天光明','海伦凯勒'),
  9. ('斗破苍穹','天蚕土豆'),
  10. ('雪鹰领主','我吃西红柿')
  11. SELECT * from book

文件配置

文件配置是一项非常繁琐的工作内容,稍有不慎整个项目就废了,所以需要非常的细心才有可能将这一整个项目搭建成功,否则将会一夜之间回到解放前。所以我所操作的每一个不大家都需要谨慎再谨慎。

1.首先我们先移除父模块的src目录,其实移不移除都无所谓,在这里我主要是为了影响干扰,移除之后目录如下

  

2.我们需要在每一个子模块添加对应的包名和配置文件

子模块common层

R.java

  1. package com.booksystem.common;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Map;
  5.  
  6. /**
  7. * 返回数据封装
  8. */
  9. public class R extends HashMap<String, Object> {
  10. private static final long serialVersionUID = 1L;
  11.  
  12. public R() {
  13. put("code", 1);
  14. put("msg", "success");
  15. }
  16.  
  17. //错误时
  18. public static R error() {
  19. return error(500, "未知异常,请联系管理员");
  20. }
  21.  
  22. public static R error(String msg) {
  23. return error(500, msg);
  24. }
  25.  
  26. public static R error(int code, String msg) {
  27. R r = new R();
  28. r.put("code", code);
  29. r.put("msg", msg);
  30. return r;
  31. }
  32.  
  33. //成功时
  34. public static R ok(String msg) {
  35. R r = new R();
  36. r.put("msg", msg);
  37. return r;
  38. }
  39.  
  40. public static R ok(Map<String, Object> map) {
  41. R r = new R();
  42. r.putAll(map);
  43. return r;
  44. }
  45.  
  46. public static R ok() {
  47. return new R();
  48. }
  49.  
  50. public static R ok(Object data) {
  51. return new R().put("data",data);
  52. }
  53.  
  54. @Override
  55. public R put(String key, Object value) {
  56. super.put(key, value);
  57. return this;
  58. }
  59. }

子模块dao层

BookMapper.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <!--命名空间应该是对应接口的包名+接口名 -->
  4. <mapper namespace="com.booksystem.dao.BookDao">
  5. <!--查询全部图书信息-->
  6. <select id="getAllBooks" resultMap="bookMap">
  7. select bid,bname,bauthor from book
  8. </select>
  9. <!--配置数据表和实体的映射关系-->
  10. <resultMap id="bookMap" type="book">
  11. <id column="bid" property="bid"/>
  12. <result property="bname" column="bname"/>
  13. <result column="bauthor" property="bauthor"/>
  14. </resultMap>
  15. </mapper>

applicationContext.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:p="http://www.springframework.org/schema/p"
  5. xmlns:aop="http://www.springframework.org/schema/aop"
  6. xmlns:context="http://www.springframework.org/schema/context"
  7. xmlns:tx="http://www.springframework.org/schema/tx"
  8. xsi:schemaLocation="http://www.springframework.org/schema/beans
  9. http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
  10. http://www.springframework.org/schema/context
  11. http://www.springframework.org/schema/context/spring-context-4.3.xsd
  12. http://www.springframework.org/schema/aop
  13. http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
  14. http://www.springframework.org/schema/tx
  15. http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
  16.  
  17. <!--1 引入属性文件,在配置中占位使用 -->
  18. <context:property-placeholder location="classpath*:db.properties" />
  19.  
  20. <!--2 配置C3P0数据源 -->
  21. <bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
  22. destroy-method="close">
  23. <!--驱动类名 -->
  24. <property name="driverClass" value="${mysql.driver}" />
  25. <!-- url -->
  26. <property name="jdbcUrl" value="${mysql.url}" />
  27. <!-- 用户名 -->
  28. <property name="user" value="${mysql.uid}" />
  29. <!-- 密码 -->
  30. <property name="password" value="${mysql.password}" />
  31. <!-- 当连接池中的连接耗尽的时候c3p0一次同时获取的连接数 -->
  32. <property name="acquireIncrement" value="${mysql.acquireIncrement}"></property>
  33. <!-- 初始连接池大小 -->
  34. <property name="initialPoolSize" value="${mysql.initialPoolSize}"></property>
  35. <!-- 连接池中连接最小个数 -->
  36. <property name="minPoolSize" value="${mysql.minPoolSize}"></property>
  37. <!-- 连接池中连接最大个数 -->
  38. <property name="maxPoolSize" value="${mysql.maxPoolSize}"></property>
  39. </bean>
  40.  
  41. <!--3 会话工厂bean sqlSessionFactoryBean -->
  42. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  43. <!-- mybatis核心配置文件路径 -->
  44. <property name="configLocation" value="classpath:mybatis.xml"></property>
  45. <!-- 数据源 -->
  46. <property name="dataSource" ref="datasource"/>
  47. <!-- sql映射文件路径[mapper路径] -->
  48. <property name="mapperLocations" value="classpath*:mapper/*Mapper.xml"></property>
  49. </bean>
  50.  
  51. <!--4 自动扫描对象关系映射 -->
  52. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  53. <!--指定会话工厂,如果当前上下文中只定义了一个则该属性可省去 -->
  54. <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
  55. <!-- 指定要自动扫描接口的基础包,实现接口 -->
  56. <property name="basePackage" value="com.booksystem.dao"/>
  57. </bean>
  58.  
  59. <!--5 声明式事务管理 -->
  60. <!--定义事物管理器,由spring管理事务 -->
  61. <bean id="transactionManager"
  62. class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  63. <property name="dataSource" ref="datasource"></property>
  64. </bean>
  65. <!--支持注解驱动的事务管理,指定事务管理器 -->
  66. <tx:annotation-driven transaction-manager="transactionManager" />
  67.  
  68. <!--6 容器自动扫描IOC组件 -->
  69. <context:component-scan base-package="com.booksystem.dao"/>
  70.  
  71. <!--7 aspectj支持自动代理实现AOP功能 -->
  72. <aop:aspectj-autoproxy/>
  73.  
  74. </beans>

db.properties

  1. ##mysql连接字符串
  2. #驱动
  3. mysql.driver=com.mysql.jdbc.Driver
  4. #连接字符串
  5. mysql.url=jdbc:mysql://localhost:3306/booksystem?useUnicode=true&characterEncoding=UTF-8
  6. #用户名
  7. mysql.uid=root
  8. #密码
  9. mysql.password=123456
  10. mysql.acquireIncrement=5
  11. mysql.initialPoolSize=10
  12. mysql.minPoolSize=5
  13. mysql.maxPoolSize=20

mybatis.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
  3. <configuration>
  4. <properties resource="db.properties"></properties>
  5. <settings>
  6. <!--指定mybatis使用日志组件 -->
  7. <setting name="logImpl" value="STDOUT_LOGGING"/>
  8. </settings>
  9. <!--设置别名-->
  10. <typeAliases>
  11. <package name="com.booksystem.entity"/>
  12. </typeAliases>
  13. </configuration>

BookDao,java

  1. package com.booksystem.dao;
  2.  
  3. import com.booksystem.entity.Book;
  4.  
  5. import java.util.List;
  6.  
  7. public interface BookDao {
  8. //查询全部图书信息
  9. public List<Book> getAllBooks();
  10.  
  11. }

子模块entity层

Book.java

  1. package com.booksystem.entity;
  2. /*
  3. *图书实体类
  4. * */
  5. public class Book {
  6.  
  7. private long bid; //图书编号
  8. private String bname; // 图书名称
  9. private String bauthor; // 图书作者
  10.  
  11. public long getBid() {
  12. return bid;
  13. }
  14.  
  15. public void setBid(long bid) {
  16. this.bid = bid;
  17. }
  18.  
  19. public String getBname() {
  20. return bname;
  21. }
  22.  
  23. public void setBname(String bname) {
  24. this.bname = bname;
  25. }
  26.  
  27. public String getBauthor() {
  28. return bauthor;
  29. }
  30.  
  31. public void setBauthor(String bauthor) {
  32. this.bauthor = bauthor;
  33. }
  34. //无参构造方法
  35. public Book(){}
  36. //带参构造方法
  37. public Book(long bid, String bname, String bauthor) {
  38. this.bid = bid;
  39. this.bname = bname;
  40. this.bauthor = bauthor;
  41. }
  42.  
  43. @Override
  44. public String toString() {
  45. return "Book{" +
  46. "bid=" + bid +
  47. ", bname='" + bname + '\'' +
  48. ", bauthor='" + bauthor + '\'' +
  49. '}';
  50. }
  51. }

写了怎么多的东西,我们需要测试一下,减少错误,现在我们只是在做练习,代码量比较少但是到了真正项目的时候代码量肯定比现在多许多,为了养成这种习惯,我一般写到Dao层的时候就进行测试一下。

BookTest.java

  1. package com.booksystem.dao;
  2.  
  3. import org.junit.Test;
  4. import org.junit.runner.RunWith;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.test.annotation.Rollback;
  7. import org.springframework.test.context.ContextConfiguration;
  8. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
  9. import org.springframework.transaction.annotation.Transactional;
  10.  
  11. import static org.junit.Assert.*;
  12. //指定bean注入的配置文件
  13. @ContextConfiguration("/applicationContext.xml")
  14. //使用标准的junit
  15. @RunWith(SpringJUnit4ClassRunner.class)
  16. @Transactional //事务管理
  17. @Rollback(true) //是否回滚
  18. public class BookDaoTest {
  19. @Autowired
  20. private BookDao bookDao;
  21. @Test
  22. public void getAllBooks() {
  23. System.out.println(bookDao.getAllBooks());
  24. }
  25. }

我们看到测试结果已经出来了,如果这一步你成功了的话那么你已经完成了80%了,下一步的话我们就配置service层

子模块service层

BookService

  1. package com.booksystem.service;
  2.  
  3. import com.booksystem.entity.Book;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Service;
  6.  
  7. import java.util.List;
  8. public interface BookService {
  9. //查询全部图书信息
  10. public List<Book> getAllBooks();
  11. }

BookImple

  1. package com.booksystem.imple;
  2.  
  3. import com.booksystem.dao.BookDao;
  4. import com.booksystem.entity.Book;
  5. import com.booksystem.service.BookService;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Service;
  8.  
  9. import java.util.List;
  10.  
  11. @Service
  12. public class BookImple implements BookService {
  13. @Autowired
  14. public BookDao bookDao;
  15. public List<Book> getAllBooks() {
  16. return bookDao.getAllBooks();
  17. }
  18. }

子模块webui层

我们发现在这一层中没有存放源代码的文件加,所以我们需要自己添加,选择file,project structure

生成之后的目录

BookController.java

  1. package com.book.controller;
  2.  
  3. import com.booksystem.common.R;
  4. import com.booksystem.service.BookService;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Controller;
  7. import org.springframework.web.bind.annotation.GetMapping;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9. import org.springframework.web.bind.annotation.ResponseBody;
  10.  
  11. @Controller
  12. @RequestMapping("/book")
  13. public class BookController {
  14. @Autowired
  15. public BookService bookService;
  16. @GetMapping("/getAllBook")
  17. @ResponseBody
  18. public R getAllBook(){
  19. return R.ok(bookService.getAllBooks());
  20. }
  21. }

springmvc-servlet.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
  4. xmlns:mvc="http://www.springframework.org/schema/mvc"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/context
  8. http://www.springframework.org/schema/context/spring-context-4.3.xsd
  9. http://www.springframework.org/schema/mvc
  10. http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">
  11.  
  12. <!-- 自动扫描包,实现支持注解的IOC -->
  13. <context:component-scan base-package="com.booksystem" />
  14.  
  15. <!-- Spring MVC不处理静态资源 -->
  16. <mvc:default-servlet-handler />
  17. <!-- 支持mvc注解驱动 -->
  18. <mvc:annotation-driven enable-matrix-variables="true" />
  19. <!-- 配置映射媒体类型的策略 -->
  20. <bean
  21. class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
  22. <property name="removeSemicolonContent" value="false" />
  23. </bean>
  24.  
  25. <!-- 内部视图解析器,JSP与JSTL模板 -->
  26. <bean
  27. class="org.springframework.web.servlet.view.InternalResourceViewResolver"
  28. id="internalResourceViewResolver">
  29. <!--指定视图渲染类 -->
  30. <property name="viewClass"
  31. value="org.springframework.web.servlet.view.JstlView" />
  32. <!--自动添加到路径中的前缀 -->
  33. <property name="prefix" value="/WEB-INF/views/" />
  34. <!--自动添加到路径中的后缀 -->
  35. <property name="suffix" value=".html" />
  36. <!--设置所有视图的内容类型,如果视图本身设置内容类型视图类可以忽略 -->
  37. <property name="contentType" value="text/html;charset=UTF-8" />
  38. <!-- 优先级,越小越前 -->
  39. <property name="order" value="1" />
  40. </bean>
  41.  
  42. <!--文件上传解析器 -->
  43. <!--Spring MVC默认不能识别multipart格式的文件内容 -->
  44. <bean id="multipartResolver"
  45. class="org.springframework.web.multipart.support.StandardServletMultipartResolver">
  46. </bean>
  47. <mvc:cors>
  48. <mvc:mapping path="/**"
  49. allowed-origins="*"
  50. allowed-methods="POST,GET, OPTIONS,DELETE,PUT"
  51. allowed-headers="Content-Type,ContentType,Access-Control-Allow-Headers, Authorization, X-Requested-With"
  52. allow-credentials="true"/>
  53. </mvc:cors>
  54. </beans>

web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns="http://java.sun.com/xml/ns/javaee"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  5. id="WebApp_ID" version="3.0">
  6.  
  7. <welcome-file-list>
  8. <!--欢迎页-->
  9. <welcome-file>index.html</welcome-file>
  10. </welcome-file-list>
  11.  
  12. <listener>
  13. <description>Spring容器加载监听器</description>
  14. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  15. </listener>
  16. <context-param>
  17. <description>设置Spring加载时的配置文件位置,默认位置在WEB-INF/lib目录下</description>
  18. <param-name>contextConfigLocation</param-name>
  19. <param-value>classpath*:applicationContext.xml</param-value>
  20. </context-param>
  21. <!--Spring MVC 前置Servlet,中心控制器 -->
  22. <servlet>
  23. <servlet-name>springmvc</servlet-name>
  24. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  25. <init-param>
  26. <param-name>contextConfigLocation</param-name>
  27. <!--Spring MVC配置文件路径 -->
  28. <param-value>classpath*:springmvc-servlet.xml</param-value>
  29. </init-param>
  30. <!-- 启动动优先级,越小越早加载 -->
  31. <load-on-startup>1</load-on-startup>
  32. <!--Servlet3.0以上文件上传配置 -->
  33. <multipart-config>
  34. <!--上传文件的最大限制5MB -->
  35. <max-file-size>5242880</max-file-size>
  36. <!--请求的最大限制20MB -->
  37. <max-request-size>20971520</max-request-size>
  38. <!--当文件的大小超过临界值时将写入磁盘 -->
  39. <file-size-threshold>0</file-size-threshold>
  40. </multipart-config>
  41. </servlet>
  42. <!-- Servlet访问的路径映射,所有的访问都必须经过调度用的前置控制品 -->
  43. <servlet-mapping>
  44. <servlet-name>springmvc</servlet-name>
  45. <url-pattern>/</url-pattern>
  46. </servlet-mapping>
  47.  
  48. <!--编码过滤器 -->
  49. <filter>
  50. <filter-name>characterEncodingFilter</filter-name>
  51. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  52. <init-param>
  53. <param-name>encoding</param-name>
  54. <param-value>UTF-8</param-value>
  55. </init-param>
  56. <init-param>
  57. <param-name>forceEncoding</param-name>
  58. <param-value>true</param-value>
  59. </init-param>
  60. </filter>
  61. <!-- 路径映射 -->
  62. <filter-mapping>
  63. <filter-name>characterEncodingFilter</filter-name>
  64. <url-pattern>/*</url-pattern>
  65. </filter-mapping>
  66. </web-app>

3.配置tomcat

4.项目部署

在这里我们就将项目进行热部署就可以了,我们在开发阶段就暂时不进行打包,以后我们有服务器的时候就可以打包成war或者jar包

5.启动项目

index.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>图书管理系统</title>
  6. <style>
  7. h1{
  8. text-align: center;
  9. }
  10. #myTab{
  11. width: 800px;
  12. margin: 0 auto;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <h1>图书管理系统</h1>
  18. <table id="myTab" cellpadding="0" cellspacing="0" border="1">
  19. <tr>
  20. <td>编号</td>
  21. <td>名称</td>
  22. <td>作者</td>
  23. </tr>
  24. </table>
  25. <script src="js/jquery-1.11.3.min.js"></script>
  26. <script>
  27. $.ajax({
  28. url:'/book/getAllBook',
  29. type:'get',
  30. dataType:'json',
  31. }).done(function (data) {
  32. if(data.code===1){
  33. $("#myTab tr:not(:eq(0))").remove();
  34. for (var i=0;i<data.data.length;i++){
  35. var tr="<tr>";
  36. tr+="<td>"+(i+1)+"</td>";
  37. tr+="<td>"+data.data[i].bname+"</td>";
  38. tr+="<td>"+data.data[i].bauthor+"</td>";
  39. tr+="</tr>"
  40. $("#myTab").append(tr);
  41. }
  42. }
  43. })
  44. </script>
  45. </body>
  46. </html>

浅谈IDEA集成SSM框架(SpringMVC+Spring+MyBatis)的更多相关文章

  1. SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程

    1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One  ...

  2. SSM(SpringMVC+Spring+Mybatis)框架学习理解

    近期做到的项目中,用到的框架是SSM(SpringMVC+Spring+Mybatis).之前比较常见的是SSH.用到了自然得了解各部分的分工 spring mvc 是spring 处理web层请求的 ...

  3. JavaWeb_(SpringMVC框架)SpringMVC&Spring&MyBatis整合

    JavaWeb_(SpringMVC框架)测试SpringMVC&Spring&MyBatis三大整合 传送门 1.整合ssm 3大框架 过程 a)导包 -> spring_Ja ...

  4. 浅谈IDEA搭建SSM框架的集成

    前言 学习完MyBatis,Spring,SpringMVC之后,我们需要做的就是将这三者联系起来,Spring实现业务对象管理,Spring MVC负责请求的转发和视图管理, MyBatis作为数据 ...

  5. spring+websocket综合(springMVC+spring+MyBatis这是SSM框架和websocket集成技术)

    java-websocket该建筑是easy.儿童无用的框架可以在这里下载主线和个人教学好java-websocket计划: Apach Tomcat 8.0.3+MyEclipse+maven+JD ...

  6. SSM(SpringMVC+Spring+MyBatis)三大框架使用Maven快速搭建整合(实现数据库数据到页面进行展示)

    本文介绍使用SpringMVC+Spring+MyBatis三大框架使用Maven快速搭建一个demo,实现数据从数据库中查询返回到页面进行展示的过程. 技术选型:SpringMVC+Spring+M ...

  7. 手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)

    手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版) SSM(Spring+SpringMVC+Mybatis),目前较为主流的企业级架构方案.标准的MVC设计模式, ...

  8. 浅谈一下SSI+Oracle框架的整合搭建

    浅谈一下SSI+Oracle框架的整合搭建 最近换了一家公司,公司几乎所有的项目都采用的是Struts2+Spring+Ibatis+Oracle的架构,上一个东家一般用的就是JSF+Spring,所 ...

  9. 浅谈Java的集合框架

    浅谈Java的集合框架 一.    初识集合 重所周知,Java有四大集合框架群,Set.List.Queue和Map.四种集合的关注点不同,Set 关注事物的唯一性,List 关注事物的索引列表,Q ...

随机推荐

  1. 关于在记事本写入"\n"不显示换行的原因

    Linux系统下直接使用  "\n"  即可换行 windows下需要使用   "\r\n"

  2. [译]Vulkan教程(33)多重采样

    [译]Vulkan教程(33)多重采样 Multisampling 多重采样 Introduction 入门 Our program can now load multiple levels of d ...

  3. mplayer+ffmpeg 组合截图

    mplayer截图的优点:对于一个时长很长的视频,可以任意指定一个时间点截图,mplayer会直接跳到这个时间点开始解码截图: 缺点:由于是直接跳到指定的时间点,也就是直接跳过了之前的帧,这样解码出来 ...

  4. C#2.0增功能04 可以为 null 的类型

    连载目录    [已更新最新开发文章,点击查看详细] 可以为 null 的类型是 System.Nullable<T> 结构的实例. 可以为 null 的类型可表示一个基础类型的所有值 T ...

  5. Java 读写 excel 实战完全解析

    本文微信公众号「AndroidTraveler」首发. 背景 时值毕业季,很多毕业生初入职场. 因此,这边也写了一些新手相关的 Android 技术点. 比如上一篇的 Android 开发你需要了解的 ...

  6. C 单链表 实现约瑟夫环

    list.h #ifndef _List_H #define _List_H typedef int ElementType; struct Node; typedef struct Node *Pt ...

  7. Spring还可以这样用缓存,你知道吗?

    大家在项目开发过程中,或多或少都用过缓存,为了减少数据库的压力,把数据放在缓存当中,当访问的请求过来时,直接从缓存读取.缓存一般都是基于内存的,读取速度比较快,市面上比较常见的缓存有:memcache ...

  8. 段落超出div部分隐藏显示

    overflow: hidden; white-space: nowrap; text-overflow: ellipsis;

  9. Centos7 安装Homestead环境2

    历史命令, -- :: cd /etc/yum.repos.d/ -- :: wget http://download.virtualbox.org/virtualbox/rpm/rhel/virtu ...

  10. Floyd—Warshall算法

    我们用DP来求解任意两点间的最短路问题 首先定义状态:d[k][i][k]表示使用顶点1~k,i,j的情况下,i到j的最短路径 (d[0][i][j]表示只使用i和j,因此d[0][i][j] = c ...