上一个项目在后台用到spring+springMVC+mybatis的框架,先新项目初步需求也已经下来,不出意外的话,应该也是用这个框架组合。

虽然在之前activiti相关的学习中所用到的框架也是这个,但是当时重点在于实现activiti的功能,因此在环境搭建上也只是以能用为前提,与真实项目中所用的还是差了不少。

因此为了给接下来的项目做准备,今天便抽空练习了一下这个框架组合的搭建。虽然之前的框架都不是我来搭,接下来这个可能也不是让我搭,但记录下来说不定以后能用上,也或者对其他人有用。

那么进入正题:
一、 搭建目标:
实现标准的后台controller、service、dao三层结构;
使用mapper.xml配置文件实现dao层和数据库的交互;
数据库连接信息、基础配置文件存在config.properties文件中;
配置日志打印相关的信息;
配置数据库连接池;
使用注解;
配置json数据前后台交互;
使用junit测试;

二、环境基础:
eclipe4.4.1;
maven3.2.5;
spring4.0.3;
mysql5.6;
jdk1.7;
tomcat7;
Angularjs1.4.0;
注:为了确定后台环境是真的没有问题,自然也需要简单搭一下前台的环境,起码要能保证前后台交互没有问题。因此我前台也简单的弄了一下angularjs,实际上我们项目中前端环境已经不这么搭里 ,只是新的搭法我还不会。

三、项目整体结构如下:
1、 后端:

2、 前端:

四、maven导包及基础配置pom.xml代码:

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>frameTest</groupId>
  5. <artifactId>frameTest</artifactId>
  6. <packaging>war</packaging>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <name>frameTest Maven Webapp</name>
  9. <url>http://maven.apache.org</url>
  10. <build>
  11. <plugins>
  12. <!-- 以下配置可以保证每次强制更新时jre版本不会变化,那我的eclipse4.4.1,maven3.2.5为例,如果不设置这个,每次强制更新时jre就会变回1.5 -->
  13. <plugin>
  14. <artifactId>maven-compiler-plugin</artifactId>
  15. <version>2.3.2</version>
  16. <configuration>
  17. <source>1.7</source>
  18. <target>1.7</target>
  19. <encoding>UTF-8</encoding>
  20. <compilerArguments>
  21. <verbose />
  22. <bootclasspath>${java.home}\lib\rt.jar</bootclasspath>
  23. </compilerArguments>
  24. </configuration>
  25. </plugin>
  26. </plugins>
  27. <!-- 加上这个可以保证maven打包是把这些资源文件都打到war包中 -->
  28. <resources>
  29. <resource>
  30. <directory>src/main/java</directory>
  31. <includes>
  32. <include>**/*.xml</include>
  33. </includes>
  34. </resource>
  35. <resource>
  36. <directory>src/main/resources</directory>
  37. <includes>
  38. <include>**/*.*</include>
  39. </includes>
  40. </resource>
  41. </resources>
  42. <!-- maven打包后的项目名 -->
  43. <finalName>frameTest</finalName>
  44. </build>
  45. <properties>
  46. <spring-version>4.0.3.RELEASE</spring-version>
  47. </properties>
  48. <!-- 项目基础依赖包配置 -->
  49. <dependencies>
  50. <!-- spring以及springMVC相关依赖 -->
  51. <dependency>
  52. <groupId>org.springframework</groupId>
  53. <artifactId>spring-test</artifactId>
  54. <version>${spring-version}</version>
  55. </dependency>
  56. <dependency>
  57. <groupId>org.springframework</groupId>
  58. <artifactId>spring-webmvc</artifactId>
  59. <version>${spring-version}</version>
  60. </dependency>
  61. <dependency>
  62. <groupId>org.springframework</groupId>
  63. <artifactId>spring-core</artifactId>
  64. <version>${spring-version}</version>
  65. </dependency>
  66. <dependency>
  67. <groupId>org.springframework</groupId>
  68. <artifactId>spring-context</artifactId>
  69. <version>${spring-version}</version>
  70. </dependency>
  71. <dependency>
  72. <groupId>org.springframework</groupId>
  73. <artifactId>spring-context-support</artifactId>
  74. <version>${spring-version}</version>
  75. </dependency>
  76. <dependency>
  77. <groupId>org.springframework</groupId>
  78. <artifactId>spring-beans</artifactId>
  79. <version>${spring-version}</version>
  80. </dependency>
  81. <dependency>
  82. <groupId>org.springframework</groupId>
  83. <artifactId>spring-orm</artifactId>
  84. <version>${spring-version}</version>
  85. </dependency>
  86. <dependency>
  87. <groupId>org.springframework.amqp</groupId>
  88. <artifactId>spring-amqp</artifactId>
  89. <version>1.2.0.RELEASE</version>
  90. </dependency>
  91. <dependency>
  92. <groupId>org.aspectj</groupId>
  93. <artifactId>aspectjweaver</artifactId>
  94. <version>1.7.1</version>
  95. </dependency>
  96. <!-- mybatis框架相关依赖包 -->
  97. <dependency>
  98. <groupId>org.mybatis</groupId>
  99. <artifactId>mybatis</artifactId>
  100. <version>3.2.7</version>
  101. </dependency>
  102. <dependency>
  103. <groupId>org.mybatis</groupId>
  104. <artifactId>mybatis-spring</artifactId>
  105. <version>1.2.2</version>
  106. </dependency>
  107. <dependency>
  108. <groupId>com.alibaba</groupId>
  109. <artifactId>druid</artifactId>
  110. <version>1.0.2</version>
  111. </dependency>
  112. <!-- mysql数据库-->
  113. <dependency>
  114. <groupId>mysql</groupId>
  115. <artifactId>mysql-connector-java</artifactId>
  116. <version>5.1.34</version>
  117. </dependency>
  118. <!-- junit -->
  119. <dependency>
  120. <groupId>junit</groupId>
  121. <artifactId>junit</artifactId>
  122. <version>4.11</version>
  123. <scope>test</scope>
  124. </dependency>
  125. <!-- json数据相关依赖 -->
  126. <dependency>
  127. <groupId>org.codehaus.jackson</groupId>
  128. <artifactId>jackson-mapper-asl</artifactId>
  129. <version>1.9.7</version>
  130. </dependency>
  131. <dependency>
  132. <groupId>com.alibaba</groupId>
  133. <artifactId>fastjson</artifactId>
  134. <version>1.1.26</version>
  135. </dependency>
  136. <dependency>
  137. <groupId>org.codehaus.jackson</groupId>
  138. <artifactId>jackson-core-asl</artifactId>
  139. <version>1.9.7</version>
  140. </dependency>
  141. <dependency>
  142. <groupId>javax.servlet</groupId>
  143. <artifactId>servlet-api</artifactId>
  144. <version>3.0-alpha-1</version>
  145. <scope>provided</scope>
  146. </dependency>
  147. <dependency>
  148. <groupId>org.apache.geronimo.specs</groupId>
  149. <artifactId>geronimo-servlet_3.0_spec</artifactId>
  150. <version>1.0</version>
  151. <scope>test</scope>
  152. </dependency>
  153. <dependency>
  154. <groupId>cglib</groupId>
  155. <artifactId>cglib</artifactId>
  156. <version>2.2</version>
  157. </dependency>
  158. <!-- 日志相关依赖 -->
  159. <dependency>
  160. <groupId>ch.qos.logback</groupId>
  161. <artifactId>logback-classic</artifactId>
  162. <version>1.0.9</version>
  163. </dependency>
  164. <dependency>
  165. <groupId>commons-io</groupId>
  166. <artifactId>commons-io</artifactId>
  167. <version>2.4</version>
  168. </dependency>
  169. <dependency>
  170. <groupId>com.github.snakerflow</groupId>
  171. <artifactId>snaker-core</artifactId>
  172. <version>2.5.1</version>
  173. </dependency>
  174. <dependency>
  175. <groupId>org.apache.commons</groupId>
  176. <artifactId>commons-lang3</artifactId>
  177. <version>3.3.1</version>
  178. </dependency>
  179. </dependencies>
  180. </project>

五、web项目基础配置文件web.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  3. <display-name>appversion</display-name>
  4. <context-param>
  5. <param-name>contextConfigLocation</param-name>
  6. <param-value>classpath:spring.xml</param-value>
  7. </context-param>
  8. <filter>
  9. <description>字符集过滤器</description>
  10. <filter-name>encodingFilter</filter-name>
  11. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  12. <init-param>
  13. <description>字符集编码</description>
  14. <param-name>encoding</param-name>
  15. <param-value>UTF-8</param-value>
  16. </init-param>
  17. </filter>
  18. <filter-mapping>
  19. <filter-name>encodingFilter</filter-name>
  20. <url-pattern>/*</url-pattern>
  21. </filter-mapping>
  22. <listener>
  23. <description>spring监听器</description>
  24. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  25. </listener>
  26. <listener>
  27. <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
  28. </listener>
  29. <servlet>
  30. <servlet-name>dispatcher</servlet-name>
  31. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  32. <init-param>
  33. <param-name>contextConfigLocation</param-name>
  34. <param-value>classpath:spring-mvc.xml</param-value>
  35. </init-param>
  36. <load-on-startup>1</load-on-startup>
  37. </servlet>
  38. <servlet-mapping>
  39. <servlet-name>dispatcher</servlet-name>
  40. <url-pattern>/</url-pattern>
  41. </servlet-mapping>
  42. <session-config>
  43. <session-timeout>15</session-timeout>
  44. </session-config>
  45. </web-app>

六、spring基础篇日志文件spring.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns:task="http://www.springframework.org/schema/task"
  3. xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  7. http://www.springframework.org/schema/context
  8. http://www.springframework.org/schema/context/spring-context-3.0.xsd
  9. http://www.springframework.org/schema/task
  10. http://www.springframework.org/schema/task/spring-task-3.1.xsd
  11. http://www.springframework.org/schema/tx
  12. http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
  13. <!-- 引入属性文件 -->
  14. <context:property-placeholder location="classpath:config.properties" />
  15. <!--spring mybatis 数据库连接配置 -->
  16. <import resource="spring-MybatisConfig.xml" />
  17. <!-- 自动扫描(自动注入) -->
  18. <context:component-scan base-package="merService.merServiceImp" />
  19. <!-- 采用注释的方式配置bean -->
  20. <context:annotation-config />
  21. <!-- 该 BeanPostProcessor 将自动起作用,对标注 @Autowired 的 Bean 进行自动注入 -->
  22. <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
  23. <!-- 开启事务注解驱动 -->
  24. <tx:annotation-driven />
  25. </beans>
  26. 七、mybatis基础配置文件spring-MybatisConfig.xml:
  27. <?xml version="1.0" encoding="UTF-8"?>
  28. <beans xmlns="http://www.springframework.org/schema/beans"
  29. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  30. xsi:schemaLocation="
  31. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
  32. <!-- 配置druid数据库连接池-->
  33. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
  34. <property name="url" value="${jdbc.url}" />
  35. <property name="username" value="${jdbc.username}" />
  36. <property name="password" value="${jdbc.password}" />
  37. <property name="maxActive" value="${druid.maxPoolSize}" />
  38. <property name="initialSize" value="${druid.initialPoolSize}" />
  39. <property name="maxWait" value="${druid.maxWait}" />
  40. <property name="minIdle" value="${druid.minPoolSize}" />
  41. <property name="timeBetweenEvictionRunsMillis" value="${druid.timeBetweenEvictionRunsMillis}" />
  42. <property name="minEvictableIdleTimeMillis" value="${druid.minEvictableIdleTimeMillis}" />
  43. <property name="validationQuery" value="${druid.validationQuery}" />
  44. <property name="testWhileIdle" value="${druid.testWhileIdle}" />
  45. <property name="testOnBorrow" value="${druid.testOnBorrow}" />
  46. <property name="testOnReturn" value="${druid.testOnReturn}" />
  47. <property name="poolPreparedStatements" value="${druid.poolPreparedStatements}" />
  48. <!-- <property name="maxPoolPreparedStatementPerConnectionSize" value="${druid.maxPoolPreparedStatementPerConnectionSize}" /> -->
  49. </bean>
  50. <!-- 配置mybitasSqlSessionFactoryBean -->
  51. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  52. <property name="dataSource" ref="dataSource" />
  53. <property name="configLocation" value="classpath:MybatisConf.xml"></property>
  54. <property name="mapperLocations"
  55. value="classpath*:merDao/mapper/*Mapper.xml"></property>
  56. </bean>
  57. <!-- 配置SqlSessionTemplate -->
  58. <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate" scope="prototype">
  59. <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />
  60. </bean>
  61. <!-- 自动扫描,注入×Mapper实现类 -->
  62. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  63. <property name="basePackage" value="merDao" />
  64. </bean>
  65. </beans>

七、mybatis基础配置文件MybatisConf.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. <settings>
  5. <!-- 这个配置使全局的映射器启用或禁用缓存 -->
  6. <setting name="cacheEnabled" value="true" />
  7. <!-- 允许 JDBC 支持生成的键。需要适合的驱动。如果设置为 true 则这个设置强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(比如 Derby) -->
  8. <setting name="useGeneratedKeys" value="true" />
  9. <!-- 配置默认的执行器。SIMPLE 执行器没有什么特别之处。REUSE 执行器重用预处理语句。BATCH 执行器重用语句和批量更新  -->
  10. <setting name="defaultExecutorType" value="REUSE" />
  11. <!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 -->
  12. <setting name="lazyLoadingEnabled" value="true"/>
  13. <!-- 设置超时时间,它决定驱动等待一个数据库响应的时间。  -->
  14. <setting name="defaultStatementTimeout" value="55000"/>
  15. <setting name="logPrefix" value="dao."/>
  16. </settings>
  17. <!-- 别名配置,查找该包内的所有bean,bean实例名为类名 -->
  18. <typeAliases>
  19. <package name="merModel"/>
  20. </typeAliases>
  21. </configuration>

八、springMVC基础配置文件spring-mvc.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" 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" xsi:schemaLocation="http://www.springframework.org/schema/beans
  3. http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
  4. http://www.springframework.org/schema/context
  5. http://www.springframework.org/schema/context/spring-context-4.0.xsd
  6. http://www.springframework.org/schema/mvc
  7. http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
  8. <context:component-scan base-package="merController" />
  9. <mvc:default-servlet-handler />
  10. <mvc:annotation-driven />
  11. <!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->
  12. <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
  13. <property name="supportedMediaTypes">
  14. <list>
  15. <value>text/html;charset=UTF-8</value>
  16. </list>
  17. </property>
  18. </bean>
  19. <bean id = "stringHttpMessageConverter"
  20. class = "org.springframework.http.converter.StringHttpMessageConverter"/>
  21. <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
  22. <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
  23. <property name="messageConverters">
  24. <list>
  25. <ref bean="mappingJacksonHttpMessageConverter" /><!-- json转换器 -->
  26. <ref bean="stringHttpMessageConverter"/>
  27. </list>
  28. </property>
  29. </bean>
  30. </beans>

九、日志打印相关配置logback.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration scan="true" scanPeriod="30 seconds">
  3. <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
  4. <property name="LOG_HOME" value="logs" />
  5. <!-- appender -->
  6. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  7. <layout class="ch.qos.logback.classic.PatternLayout">
  8. <pattern>%d{yyyy-MM-dd HH:mm:ss:SSS}[%p]: %m%n</pattern>
  9. </layout>
  10. </appender>
  11. <!-- 按照每天生成日志文件 -->
  12. <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
  13. <!--         <File>processcontrol.log</File> -->
  14. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  15. <!--日志文件输出的文件名 -->
  16. <FileNamePattern>${LOG_HOME}//merchant.%d{yyyy-MM-dd}.log</FileNamePattern>
  17. <!--日志文件保留天数 -->
  18. <MaxHistory>30</MaxHistory>
  19. </rollingPolicy>
  20. <layout class="ch.qos.logback.classic.PatternLayout">
  21. <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n</Pattern>
  22. </layout>
  23. </appender>
  24. <!-- log 通过 LoggerFactory.getLogger(name)取得 -->
  25. <logger name="myLog" additivity="true" level="info">
  26. <appender-ref ref="stdout" />
  27. </logger>
  28. <!-- update:liaoshijun 2015-04-24 -->
  29. <logger name="frameTest" level="INFO"/>
  30. <logger name="org.apache.ibatis" level="INFO"/>
  31. <logger name="org.apache.mybatis" level="INFO"/>
  32. <logger name="com.ibatis" level="DEBUG" />
  33. <logger name="com.ibatis.common.jdbc.SimpleDataSource" level="DEBUG" />
  34. <logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG" />
  35. <logger name="dao" level="DEBUG">
  36. <!--daoFILE为实际定义的appender-->
  37. <appender-ref ref="daoFILE" />
  38. </logger>
  39. <!-- root 默认日志配置 -->
  40. <root level="info">
  41. <appender-ref ref="STDOUT" />
  42. <appender-ref ref="FILE" />
  43. </root>
  44. </configuration>

十、属性文件config.properties:

  1. #mysql
  2. jdbc.driverClassName=com.mysql.jdbc.Driver
  3. jdbc.url=jdbc:mysql://127.0.0.1:3306/merchant?useUnicode=true&characterEncoding=utf-8
  4. jdbc.username=root
  5. jdbc.password=123456
  6. #c3p0
  7. c3p0.minPoolSize=5
  8. c3p0.initialPoolSize=10
  9. c3p0.maxIdleTime=60
  10. c3p0.acquireIncrement=5
  11. c3p0.idleConnectionTestPeriod=60
  12. c3p0.acquireRetryAttempts=30
  13. c3p0.acquireRetryDelay=1000
  14. c3p0.numHelperThreads=3
  15. c3p0.breakAfterAcquireFailure=true
  16. c3p0.testConnectionOnCheckout=false
  17. c3p0.maxStatements=0
  18. c3p0.maxStatementsPerConnection=0
  19. #druid 阿里巴巴提供的JDBC连接池、监控组件
  20. druid.minPoolSize=5
  21. druid.maxPoolSize=30
  22. druid.initialPoolSize=10
  23. druid.maxIdleTime=60
  24. druid.acquireIncrement=5
  25. druid.idleConnectionTestPeriod=60
  26. druid.acquireRetryAttempts=30
  27. druid.acquireRetryDelay=1000
  28. druid.numHelperThreads=3
  29. druid.breakAfterAcquireFailure=true
  30. druid.testConnectionOnCheckout=false
  31. druid.maxStatements=0
  32. druid.maxStatementsPerConnection=0
  33. druid.maxWait=60000
  34. druid.timeBetweenEvictionRunsMillis=3000
  35. druid.minEvictableIdleTimeMillis=300000
  36. druid.maxPoolPreparedStatementPerConnectionSize=20
  37. druid.validationQuery=SELECT 'x'
  38. druid.testWhileIdle=true
  39. druid.testOnBorrow=false
  40. druid.testOnReturn=false
  41. druid.poolPreparedStatements=false

十一、为了验证这些配置是否可行,我写了一个简单的增加用户信息的操作,代码分别如下:

后台实体类userModel:

  1. package merModel;
  2. import java.io.Serializable;
  3. public class UserModel implements Serializable {
  4. private static final long serialVersionUID = -3291196087479862240L;
  5. private int id;
  6. /**
  7. * 用户账号
  8. */
  9. private String account;
  10. /**
  11. * 用户姓名
  12. */
  13. private String userName;
  14. /**
  15. * 用户密码
  16. */
  17. private String password;
  18. /**
  19. * 手机
  20. */
  21. private String mobile;
  22. /**
  23. * 邮箱
  24. */
  25. private String email;
  26. public String getAccount() {
  27. return account;
  28. }
  29. public void setAccount(String account) {
  30. this.account = account;
  31. }
  32. public String getUserName() {
  33. return userName;
  34. }
  35. public void setUserName(String userName) {
  36. this.userName = userName;
  37. }
  38. public String getPassword() {
  39. return password;
  40. }
  41. public void setPassword(String password) {
  42. this.password = password;
  43. }
  44. public String getMobile() {
  45. return mobile;
  46. }
  47. public void setMobile(String mobile) {
  48. this.mobile = mobile;
  49. }
  50. public String getEmail() {
  51. return email;
  52. }
  53. public void setEmail(String email) {
  54. this.email = email;
  55. }
  56. public static long getSerialversionuid() {
  57. return serialVersionUID;
  58. }
  59. public int getId() {
  60. return id;
  61. }
  62. public void setId(int id) {
  63. this.id = id;
  64. }
  65. @Override
  66. public String toString() {
  67. return "UserModel [id=" + id + ", account=" + account + ", userName="
  68. + userName + ", password=" + password + ", modile=" + mobile
  69. + ", email=" + email + "]";
  70. }
  71. }

对应的前台UserCommand类:

  1. package merCommand;
  2. public class UserCommand {
  3. private int id;
  4. /**
  5. * 用户账号
  6. */
  7. private String account;
  8. /**
  9. * 用户姓名
  10. */
  11. private String userName;
  12. /**
  13. * 用户密码
  14. */
  15. private String password;
  16. /**
  17. * 手机
  18. */
  19. private String mobile;
  20. /**
  21. * 邮箱
  22. */
  23. private String email;
  24. public String getAccount() {
  25. return account;
  26. }
  27. public void setAccount(String account) {
  28. this.account = account;
  29. }
  30. public String getUserName() {
  31. return userName;
  32. }
  33. public void setUserName(String userName) {
  34. this.userName = userName;
  35. }
  36. public String getPassword() {
  37. return password;
  38. }
  39. public void setPassword(String password) {
  40. this.password = password;
  41. }
  42. public String getMobile() {
  43. return mobile;
  44. }
  45. public void setMobile(String mobile) {
  46. this.mobile = mobile;
  47. }
  48. public String getEmail() {
  49. return email;
  50. }
  51. public void setEmail(String email) {
  52. this.email = email;
  53. }
  54. public int getId() {
  55. return id;
  56. }
  57. public void setId(int id) {
  58. this.id = id;
  59. }
  60. @Override
  61. public String toString() {
  62. return "UserCommand [id=" + id + ", account=" + account + ", userName="
  63. + userName + ", password=" + password + ", modile=" + mobile
  64. + ", email=" + email + "]";
  65. }
  66. }

Dao接口UserDao:

  1. package merDao;
  2. import merModel.UserModel;
  3. public interface UserDao {
  4. public void save(UserModel usermodel);
  5. }

Dao实现userDaoMapper.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. <mapper namespace="merDao.UserDao">
  4. <!-- 数据库映射配置 -->
  5. <resultMap type="UserModel" id="userResult">
  6. <id property="id" column="id" />
  7. <result property="account" column="account" />
  8. <result property="userName" column="userName" />
  9. <result property="password" column="password" />
  10. <result property="mobile" column="mobile" />
  11. <result property="email" column="email" />
  12. </resultMap>
  13. <sql id="userColumns">id,account,userName,password,mobile,email
  14. </sql>
  15. <!-- 添加用户 -->
  16. <insert id="save" parameterType="UserModel">
  17. insert into user(<include refid="userColumns" />)
  18. values(#{id},#{account},#{userName},#{password},#{mobile},#{email})
  19. </insert>
  20. 查询用户-->
  21. <select id="findAll"  resultMap="userResult">
  22. SELECT u.* FROM user u
  23. </select>
  24. </mapper>

UserService接口:

  1. package merService;
  2. import merModel.UserModel;
  3. public interface UserService {
  4. public void add(UserModel usermodel);
  5. }

userService实现:

  1. package merService.merServiceImp;
  2. import javax.annotation.Resource;
  3. import merDao.UserDao;
  4. import merModel.UserModel;
  5. import merService.UserService;
  6. import org.slf4j.Logger;
  7. import org.slf4j.LoggerFactory;
  8. import org.springframework.stereotype.Service;
  9. @Service("UserService")
  10. public class UserServiceImp implements UserService {
  11. privatefinal Logger logger = LoggerFactory.getLogger(UserServiceImp.class);
  12. private UserDao userDao;
  13. @Resource(name = "userDao")
  14. public void setUserDao(UserDao userDao) {
  15. this.userDao = userDao;
  16. }
  17. @Override
  18. public void add(UserModel usermodel) {
  19. userDao.save(usermodel);
  20. }
  21. }

Controller前后台交互:

  1. package merController;
  2. import merCommand.UserCommand;
  3. import merModel.UserModel;
  4. import merService.UserService;
  5. import org.springframework.beans.BeanUtils;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.web.bind.annotation.RequestBody;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9. import org.springframework.web.bind.annotation.RequestMethod;
  10. import org.springframework.web.bind.annotation.RestController;
  11. @RestController
  12. public class UserController {
  13. @Autowired
  14. private UserService userService;
  15. /**
  16. * 新增用户
  17. *
  18. * @author:tuzongxun
  19. * @Title: addUser
  20. * @param @param userCommand
  21. * @return void
  22. * @date Apr 14, 2016 11:28:47 AM
  23. * @throws
  24. */
  25. @RequestMapping(value = "addUser", method = RequestMethod.POST)
  26. public void addUser(@RequestBody UserCommand userCommand) {
  27. UserModel userModel = new UserModel();
  28. BeanUtils.copyProperties(userCommand, userModel);
  29. userService.add(userModel);
  30. }
  31. }

前台index.html文件:

  1. <!doctype html>
  2. <html ng-app="merchantApp">
  3. <head>
  4. <meta charset="utf-8">
  5. <title>交易业务商户服务平台</title>
  6. <meta name="description" content="">
  7. <meta name="viewport" content="width=device-width">
  8. <link rel="stylesheet" href="./css/addUser.css">
  9. <script src="./angular-1.4.0-rc.2/angular.js"></script>
  10. <script src='./angular-1.4.0-rc.2/angular-ui-router.js'></script>
  11. <script src='./js/app.js'></script>
  12. <script src='./js/addUserCtr.js'></script>
  13. </head>
  14. <body>
  15. <div id="headBack">
  16. <img id="rdiv" src="./images/555.jpg" style="width:25%;height:98%;"/>
  17. <ul id="navUl">
  18. <li ><a href="#">首页</a></li>
  19. <li >|</li>
  20. <li ><a href="script:;">申告管理</a></li>
  21. <li >|</li>
  22. <li ><a href="#login">自助服务</a></li>
  23. <li >|</li>
  24. <li ><a href="#regist">意见管理</a></li>
  25. <li >|</li>
  26. <li ><a href="#regist">知识库</a></li>
  27. </ul>
  28. <div id="headDiv">
  29. </div>
  30. </div>
  31. <div ui-view="view" style="height: 100%;"></div>
  32. </body>
  33. </html>

前台app.js文件代码:

  1. var app=angular.module('merchantApp',['ui.router']);
  2. app.config(function($stateProvider,$urlRouterProvider){
  3. $urlRouterProvider.otherwise('/addUser');
  4. $stateProvider
  5. .state('addUser', {
  6. url: "/addUser",
  7. views: {
  8. 'view': {
  9. templateUrl: 'views/addUser.html',
  10. controller: 'addUserCtr'
  11. }
  12. }
  13. });
  14. });

增加用户信息的界面addUser.html:

  1. <center>
  2. <div id="addUser">
  3. 用户名:<input type="text" ng-model="user.account"></input></br></br>
  4. 姓     名:<input type="text" ng-model="user.userName"></input></br></br>
  5. 密     码:<input type="password" ng-model="user.password"></input></br></br>
  6. 手     机:<input type="text" ng-model="user.mobile"></input></br></br>
  7. 邮     箱:<input type="text" ng-model="user.email"></input></br></br>
  8. <input class="button1" type="button" ng-click="addUser(user);" value="注   册"></input>
  9. <input class="button1" type="button" ng-click="toLogin();" value="返  回">
  10. </div>
  11. </center>

增加用户信息的angularjs控制层:

  1. angular.module('merchantApp')
  2. .controller('addUserCtr', ['$scope','$http', function($scope,$http){
  3. $scope.addUser=function(user){
  4. //向后台提交数据
  5. $http.post("./addUser",user,{headers:'Content-Type:application/json'}).success(function(){
  6. });
  7. }
  8. }])

相关的css:

  1. body{
  2. margin:0;
  3. }
  4. .button1{
  5. font-size:28px;
  6. }
  7. #addUser input{
  8. font-size:24px;
  9. }
  10. #addUser{
  11. border:2px solid;
  12. border-radius:0.5em;
  13. width:35%;
  14. height:330px;
  15. float:left;
  16. margin-left:400px;
  17. margin-top:100px;
  18. padding:30px;
  19. background-image:url("../images/111.jpg");
  20. background-size:cover;
  21. font-size:26px;
  22. }
  23. #addUser img{
  24. width:100%;
  25. height:100%;
  26. }
  27. #headBack{
  28. width:100%;
  29. height:80px;
  30. background-color:#E0EEF0;
  31. position:relative;
  32. }
  33. #headDiv{
  34. width:75%;
  35. height:5px;
  36. background:#CBE1E4;
  37. float:right;
  38. position:absolute;
  39. right:0;
  40. bottom:0;
  41. }
  42. #navUl{
  43. /*position:relative;*/
  44. position:absolute;
  45. float:right;
  46. top:0;
  47. right:0;
  48. margin:0;
  49. box-sizing:border-box;
  50. /*background-color:red;*/
  51. width:75%;
  52. height:75px;
  53. }
  54. #navUl li{
  55. list-style-type: none;
  56. /*position:absolute;*/
  57. font-size:36px;
  58. display: inline;
  59. /**top:20;*/
  60. margin-top:20px;
  61. left:0;
  62. height:auto;
  63. text-color:#2F2E2E;
  64. /*background-color:#EAE3EA;*/
  65. text-align:center;
  66. /**padding:5px;
  67. margin-top:3px;*/
  68. }
  69. a:link{
  70. text-decoration:none;
  71. color:black;
  72. }
  73. a:visited{
  74. color:blue;
  75. }
  76. a:hover{
  77. color:red;
  78. }
  79. a:active{
  80. color:orange;
  81. }

浏览器访问界面如下:

点击注册以后,数据库信息如下:

至此,基础搭建成功。

 

spring+springMVC+mybatis的框架项目基础环境搭建的更多相关文章

  1. Spring+SpringMVC+Mybatis+MAVEN+Eclipse+项目完整环境搭建

    1.新建一个Maven项目,创建父项目. 2.创建子项目模块 3.创建javaWeb项目 4.创建后的项目目录结构 5.Maven文件配置 parent父项目pom.xml文件配置 <?xml ...

  2. SpringMVC+Mybatis+Mysql实战项目学习--环境搭建

    1.开发IDE:Spring Tool Suite(自带maven插件) 下载地址https://spring.io/tools/sts/all 在STS.ini配置信息中加下面一行 保证编码格式为u ...

  3. Spring+SpringMVC+MyBatis+Maven框架整合

    本文记录了Spring+SpringMVC+MyBatis+Maven框架整合的记录,主要记录以下几点 一.Maven需要引入的jar包 二.Spring与SpringMVC的配置分离 三.Sprin ...

  4. IntelliJ IDEA 14.0.3 实战搭建Spring+SpringMVC+MyBatis组合框架

    简介 Spring+SpringMVC+MyBatis框架(SSM)是比较热门的中小型企业级项目开发的框架,对于新手来说也是比较容易学习入门的.虽说容易,但在框架搭建过程中仍然遇到了许多问题,因此用实 ...

  5. 你要的SSM(Spring+Springmvc+Mybatis)小项目来了!!!

    SSM-Maven-Heima 这是一个使用 SSM(Spring+Springmvc+Mybatis)框架的商城小项目,使用Maven构建项目,以MySQL为数据库系统,Redis的缓存服务器(并不 ...

  6. Spring+SpringMVC+Mybatis(SSM)框架集成搭建

    Spring+SpringMVC+Mybatis框架集成搭建教程 一.背景 最近有很多同学由于没有过SSM(Spring+SpringMvc+Mybatis , 以下简称SSM)框架的搭建的经历,所以 ...

  7. SSM(spring,springMVC,Mybatis)框架的整合

    这几天想做一个小项目,所以搭建了一个SSM框架. 1.基本概念 1.1.Spring   Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Joh ...

  8. SSM(Spring+SpringMVC+Mybatis)框架搭建详细教程【附源代码Demo】

    [前言] 应某网络友人邀约,需要一个SSM框架的Demo作为基础学习资料,于是乎,就有了本文.一个从零开始的SSM框架Demo对一个新手来说,是非常重要的,可大大减少在学习过程中遇到的各种各样的坑,说 ...

  9. Spring+SpringMVC+MyBatis+Redis框架学习笔记

    在Java互联网中,以Spring+Spring MVC+MyBatis (SSM) 作为主流框架. SSM+Redis的结构图 在这种框架系统中: Spring IoC 承担了一个资源管理.整合.即 ...

随机推荐

  1. linux信号处理及libcurl的坑

    前言:     最近有个项目, 需要访问第三方服务. 该服务是通过http的形式访问的, 为了安全和加密, 对方提供了一个加密用的C/C++库, 用于对参数进行处理.  鉴于此, 选用了C/C++语言 ...

  2. 利用powerdesigner反向数据库结构,生成ER图

    参考月下狼~图腾~:<利用powerdesigner反向数据库结构,生成ER图> https://www.zybuluo.com/Jpz/note/123582 首先新建一个"P ...

  3. HDU 5692 线段树+dfs序

    Snacks Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  4. android中的空格及汉字的宽度

    在Android布局中进行使用到空格,以便实现文字的对齐.那么在Android中如何表示一个空格呢? 空格:  窄空格:  一个汉字宽度的空格:   [用两个空格(  )占一个汉字的宽度时,两个空格比 ...

  5. spingmvc 返回json数据日期格式化方法

    第一种: json 用的是这个依赖 <!-- JSON lib 开发包 以及它的依赖包 --> <dependency> <groupId>com.fasterxm ...

  6. SpringMVC使用@ResponseBody时返回json的日期格式、@DatetimeFormat使用注意

    一.SpringMVC使用@ResponseBody时返回json的日期格式 前提了解: @ResponseBody 返回json字符串的核心类是org.springframework.http.co ...

  7. hive 常见面试题

    (笔者自己做记录) 1.Hive内外部表的区别删除表是否影响外部数据2.Hive如何做到权限管理hive下可以修改配置后创建用户管理,但是仅仅是为了防止误操而已,如果要真的为了安全操作建议使用 Ker ...

  8. 最短路--floyd算法模板

    floyd算法是求所有点之间的最短路的,复杂度O(n3)代码简单是最大特色 #include<stdio.h> #include<string.h> ; const int I ...

  9. C中scanf/gets/fgets的区别

    功能:同样是获取字符串. 区别: scanf 遇到空格/回车/Tab键认为输入结束, 但是空格/回车/Tab键仍会留在输入的缓冲区中.常见的是使用getchar(),处理scanf的后事:如果想要清除 ...

  10. eclipse关掉jsp,js的语法验证

    转载:http://blog.csdn.net/testcs_dn/article/details/39058959 eclipse加速之禁用JS.jsp等文件的语法验证 去除eclipse的JS验证 ...