上一个项目在后台用到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. Spring 框架获取 datasource对象的方法

    1,使用org.springframework.jdbc.datasource.DriverManagerDataSource  2.使用org.apache.commons.dbcp.BasicDa ...

  2. int除以int 得到double类型值

    double serviceability =(double)(count1+count2)/sum; 需要进行强转 除数 这样得到的值就是double类型了

  3. Matlab位运算操作

    本文为转载他人文章: bitand 按位与操作 a = 7; b = bitand(10,a); disp(dec2bin(a,8)); %ans = 00000111 disp(dec2bin(b, ...

  4. activiti 任务节点 处理人设置【转】

    转自http://blog.csdn.net/qq_30739519/article/details/51225067 1.1.1. 前言 分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自 ...

  5. sqlite3编程使用简介

    sqlite3使用范围 SQLite不同于其他大部分的SQL数据库引擎,因为它的首要设计目标就是简单化: 1.易于管理 2.易于使用 3.易于嵌入其他大型程序 4.易于维护和配置  许多人喜欢SQLi ...

  6. (转) Reinforcement Learning for Profit

    Reinforcement Learning for Profit July 17, 2016 Is RL being used in revenue generating systems today ...

  7. Linux dbg debugging

    http://h41379.www4.hpe.com/doc/84final/4538/4538pro_contents.html https://kgdb.wiki.kernel.org/index ...

  8. unity vr sample on htc vive

    http://forum.unity3d.com/threads/unity-vr-samples-now-available.372753/

  9. PHP stdClass Object转array

    用json传过来的数组并不是标准的array,所以需要用这个函数进行转换. function object_array($array){   if(is_object($array))   {    ...

  10. sitemesh使用步骤

    使用sitemesh的步骤 1. 添加jar文件到classpath 2. 在web.xml中增加过滤器 <!-- Sitemesh --> <filter> <filt ...