1、基本概念

  ssm:spring+springMVC+mybatis

2、开发环境

  Eclipse mars + jdk1.7 + maven + tomcat7

3、使用maven构建web项目

  3.1、首先,创建一个maven object

    

  3.2、创建一个新的路径、next

    

  3.3、选择 maven-archetype-webapp  next

    

  3.4 输入artifact id  这个是项目的唯一标识   实际对应项目的名称 group id一般是公司,组织的名称反写,groupid+artifactid就保证了一个项目的唯一性。

    

  4.1、在pom.xml文件中引入jar包,各个包是干嘛的  都有说明,此处不在赘述。

  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>com.hbst.www</groupId>
  5. <artifactId>BaseSsm_3</artifactId>
  6. <packaging>war</packaging>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <name>BaseSsm_3 Maven Webapp</name>
  9. <url>http://maven.apache.org</url>
  10. <properties>
  11. <!-- spring版本号 -->
  12. <spring.version>4.0.2.RELEASE</spring.version>
  13. <!-- mybatis版本号 -->
  14. <mybatis.version>3.2.6</mybatis.version>
  15. <!-- log4j日志文件管理包版本 -->
  16. <slf4j.version>1.7.7</slf4j.version>
  17. <log4j.version>1.2.17</log4j.version>
  18. </properties>
  19.  
  20. <dependencies>
  21. <dependency>
  22. <groupId>junit</groupId>
  23. <artifactId>junit</artifactId>
  24. <version>3.8.1</version>
  25. <scope>test</scope>
  26. </dependency>
  27.  
  28. <!-- spring核心包 -->
  29. <dependency>
  30. <groupId>org.springframework</groupId>
  31. <artifactId>spring-core</artifactId>
  32. <version>${spring.version}</version>
  33. </dependency>
  34.  
  35. <dependency>
  36. <groupId>org.springframework</groupId>
  37. <artifactId>spring-web</artifactId>
  38. <version>${spring.version}</version>
  39. </dependency>
  40. <dependency>
  41. <groupId>org.springframework</groupId>
  42. <artifactId>spring-oxm</artifactId>
  43. <version>${spring.version}</version>
  44. </dependency>
  45. <dependency>
  46. <groupId>org.springframework</groupId>
  47. <artifactId>spring-tx</artifactId>
  48. <version>${spring.version}</version>
  49. </dependency>
  50.  
  51. <dependency>
  52. <groupId>org.springframework</groupId>
  53. <artifactId>spring-jdbc</artifactId>
  54. <version>${spring.version}</version>
  55. </dependency>
  56.  
  57. <dependency>
  58. <groupId>org.springframework</groupId>
  59. <artifactId>spring-webmvc</artifactId>
  60. <version>${spring.version}</version>
  61. </dependency>
  62. <dependency>
  63. <groupId>org.springframework</groupId>
  64. <artifactId>spring-aop</artifactId>
  65. <version>${spring.version}</version>
  66. </dependency>
  67.  
  68. <dependency>
  69. <groupId>org.springframework</groupId>
  70. <artifactId>spring-context-support</artifactId>
  71. <version>${spring.version}</version>
  72. </dependency>
  73.  
  74. <dependency>
  75. <groupId>org.springframework</groupId>
  76. <artifactId>spring-test</artifactId>
  77. <version>${spring.version}</version>
  78. </dependency>
  79. <!-- mybatis核心包 -->
  80. <dependency>
  81. <groupId>org.mybatis</groupId>
  82. <artifactId>mybatis</artifactId>
  83. <version>${mybatis.version}</version>
  84. </dependency>
  85. <!-- mybatis/spring包 -->
  86. <dependency>
  87. <groupId>org.mybatis</groupId>
  88. <artifactId>mybatis-spring</artifactId>
  89. <version>1.2.2</version>
  90. </dependency>
  91.  
  92. <!-- 导入java ee jar 包 -->
  93. <dependency>
  94. <groupId>javax</groupId>
  95. <artifactId>javaee-api</artifactId>
  96. <version>7.0</version>
  97. </dependency>
  98.  
  99. <!-- 导入Mysql数据库链接jar包 -->
  100. <dependency>
  101. <groupId>mysql</groupId>
  102. <artifactId>mysql-connector-java</artifactId>
  103. <version>5.1.36</version>
  104. </dependency>
  105. <!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 -->
  106. <dependency>
  107. <groupId>commons-dbcp</groupId>
  108. <artifactId>commons-dbcp</artifactId>
  109. <version>1.2.2</version>
  110. </dependency>
  111.  
  112. <!-- JSTL标签类 -->
  113. <dependency>
  114. <groupId>jstl</groupId>
  115. <artifactId>jstl</artifactId>
  116. <version>1.2</version>
  117. </dependency>
  118. <!-- 日志文件管理包 -->
  119. <!-- log start -->
  120. <dependency>
  121. <groupId>log4j</groupId>
  122. <artifactId>log4j</artifactId>
  123. <version>${log4j.version}</version>
  124. </dependency>
  125.  
  126. <!-- servlet api -->
  127. <dependency>
  128. <groupId>javax.servlet</groupId>
  129. <artifactId>javax.servlet-api</artifactId>
  130. <version>3.0.1</version>
  131. <scope>provided</scope>
  132. </dependency>
  133.  
  134. <!-- 格式化对象,方便输出日志 -->
  135. <dependency>
  136. <groupId>com.alibaba</groupId>
  137. <artifactId>fastjson</artifactId>
  138. <version>1.1.41</version>
  139. </dependency>
  140.  
  141. <dependency>
  142. <groupId>org.slf4j</groupId>
  143. <artifactId>slf4j-api</artifactId>
  144. <version>${slf4j.version}</version>
  145. </dependency>
  146.  
  147. <dependency>
  148. <groupId>org.slf4j</groupId>
  149. <artifactId>slf4j-log4j12</artifactId>
  150. <version>${slf4j.version}</version>
  151. </dependency>
  152. <!-- log end -->
  153. <!-- 映入JSON -->
  154. <dependency>
  155. <groupId>org.codehaus.jackson</groupId>
  156. <artifactId>jackson-mapper-asl</artifactId>
  157. <version>1.9.13</version>
  158. </dependency>
  159. <!-- 上传组件包 -->
  160. <dependency>
  161. <groupId>commons-fileupload</groupId>
  162. <artifactId>commons-fileupload</artifactId>
  163. <version>1.3.1</version>
  164. </dependency>
  165. <dependency>
  166. <groupId>commons-io</groupId>
  167. <artifactId>commons-io</artifactId>
  168. <version>2.4</version>
  169. </dependency>
  170. <dependency>
  171. <groupId>commons-codec</groupId>
  172. <artifactId>commons-codec</artifactId>
  173. <version>1.9</version>
  174. </dependency>
  175. </dependencies>
  176. <build>
  177. <finalName>BaseSsm_3</finalName>
  178. </build>
  179. </project>

  4.2、Spring与MyBatis的整合

    此次整合,并没有使用mapper接口  而是使用sqlSessionTemplate接口来实现,使用mapper接口开发,会对每张表分别生成一个model,dao和一个mapper.xml,造成文件数过多。

  4.2.1、SqlSessionTemplate

    SqlSessionTemplate是MyBatis-spring的核心。这个类负责管理MyBatis的SqlSession,调用MyBatis的SQL方法。SqlSessionTemplate是线程安全的,可以被多个DAO所共享使用。

当调用SQL方法时,包含从映射器getMapper()方法返回的方法,SqlSessionTemplate将会保证使用的SqlSession是和当前Spring的事务相关的。此外,它管理session的生命周期,包含必要的关闭,提交或回滚操作。

SqlSessionTemplate实现了SqlSession,这就是说要对MyBatis的SqlSession进行简易替换。

SqlSessionTemplate通常是被用来替代默认的MyBatis实现的DefaultSqlSession,因为它不能参与到Spring的事务中也不能被注入,因为它是线程不安全的。相同应用程序中两个类之间的转换可能会引起数据一致性的问题。

SqlSessionTemplate对象可以使用SqlSessionFactory作为构造方法的参数来创建。

  4.2.2、介绍完基本概念,现在开始正式整合,首先创建jdbc.propreties文件 (文件编码修改为 utf-8 )

  1. jdbc.driverClassName=com.mysql.jdbc.Driver
  2. jdbc.url=jdbc:mysql://127.0.0.1:3306/db3
  3. jdbc.username=root
  4. jdbc.password=123456
  5. jdbc.minIdle=30
  6. jdbc.maxIdle=80
  7. jdbc.maxWait=60000
  8. jdbc.maxActive=80
  9. jdbc.initialSize=20
  10. jdbc.testWhileIdle=true
  11. jdbc.testOnBorrow=false
  12. jdbc.testOnReturn=false
  13. jdbc.validationQuery=select 1
  14. jdbc.validationQueryTimeout=1
  15. jdbc.timeBetweenEvictionRunsMillis=600000
  16. jdbc.numTestsPerEvictionRun=40

  4.2.3、建立spring-mybatis.xml配置文件

    这个文件就是用来完成spring和mybatis的整合的。这里面也没多少行配置,主要的就是 自动扫描,自动注入,配置数据库 。

  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:aop="http://www.springframework.org/schema/aop" 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/aop
  8. http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
  9. http://www.springframework.org/schema/tx
  10. http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
  11. http://www.springframework.org/schema/context
  12. http://www.springframework.org/schema/context/spring-context-3.0.xsd">
  13. <!-- 自动扫描 -->
  14. <context:component-scan base-package="com.hbst.basessm_3" />
  15. <!-- proxy-target-class="true"强制使用CGLib代理,为false则spring会自动选择 -->
  16. <aop:aspectj-autoproxy proxy-target-class="true" />
  17.  
  18. <!-- 引入jdbc配置文件 -->
  19. <context:property-placeholder location="classpath:config/jdbc/jdbc.properties" />
  20.  
  21. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
  22. destroy-method="close">
  23. <property name="driverClassName" value="${jdbc.driverClassName}" />
  24. <property name="url" value="${jdbc.url}" />
  25. <property name="username" value="${jdbc.username}" />
  26. <property name="password" value="${jdbc.password}" />
  27. <!-- 队列中的最小等待数 -->
  28. <property name="minIdle" value="${jdbc.minIdle}"></property>
  29. <!-- 队列中的最大等待数 -->
  30. <property name="maxIdle" value="${jdbc.maxIdle}"></property>
  31. <!-- 最长等待时间,单位毫秒 -->
  32. <property name="maxWait" value="${jdbc.maxWait}"></property>
  33. <!-- 最大活跃数 -->
  34. <property name="maxActive" value="${jdbc.maxActive}"></property>
  35. <property name="initialSize" value="${jdbc.initialSize}"></property>
  36. <property name="testWhileIdle" value="${jdbc.testWhileIdle}"></property>
  37. <property name="testOnBorrow" value="${jdbc.testOnBorrow}"></property>
  38. <property name="testOnReturn" value="${jdbc.testOnReturn}"></property>
  39. <property name="validationQuery" value="${jdbc.validationQuery}" />
  40. <property name="validationQueryTimeout" value="${jdbc.validationQueryTimeout}"></property>
  41. <property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}"></property>
  42. <property name="numTestsPerEvictionRun" value="${jdbc.numTestsPerEvictionRun}"></property>
  43. </bean>
  44.  
  45. <!-- 配置MyBitas SqlSessionFactoryBean -->
  46. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  47. <property name="configLocation" value="classpath:config/mybatis/typeAliasMapper.xml" />
  48. <property name="mapperLocations"
  49. value="classpath:config/mybatis/mappers/*/*Mapper.xml" />
  50. <property name="dataSource" ref="dataSource" />
  51. </bean>
  52.  
  53. <!-- 配置SqlSessionTemplate -->
  54. <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"
  55. scope="prototype">
  56. <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />
  57. </bean>
  58. <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
  59. <!-- <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> -->
  60. <!-- <property name="dataSource" ref="dataSource" /> -->
  61. <!-- 自动扫描mapping.xml文件 -->
  62. <!-- <property name="mapperLocations" value="classpath:com/cn/hnust/mapping/*.xml"></property> -->
  63. <!-- </bean> -->
  64.  
  65. <!-- DAO接口所在包名,Spring会自动查找其下的类 -->
  66. <!-- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> -->
  67. <!-- <property name="basePackage" value="com.cn.hnust.dao" /> -->
  68. <!-- <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> -->
  69. <!-- </bean> -->
  70.  
  71. <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
  72. <bean id="transactionManager"
  73. class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  74. <property name="dataSource" ref="dataSource" />
  75. </bean>
  76.  
  77. <!-- 使用注解的方式配置事务 -->
  78. <tx:annotation-driven transaction-manager="transactionManager" />
  79. </beans>

  4.2.4、我在上面配置 SqlSessionTemplate 的时候  指定了一个 typeAliasMapper.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.  
  5. <typeAliases>
  6. <typeAlias alias="user" type="com.hbst.basessm_3.pojo.User"/>
  7. </typeAliases>
  8. <!-- mybatis 分页拦截 -->
  9. <plugins>
  10. <plugin interceptor="com.hbst.basessm_3.dao.plugin.PageInterceptor"/>
  11. </plugins>
  12. </configuration>

  4.2.5、创建spring配置文件applicationContext.xml 引入spring-mybatis.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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
  5. xmlns:task="http://www.springframework.org/schema/task"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  8. http://www.springframework.org/schema/aop
  9. http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
  10. http://www.springframework.org/schema/tx
  11. http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
  12. http://www.springframework.org/schema/context
  13. http://www.springframework.org/schema/context/spring-context-3.0.xsd
  14. http://www.springframework.org/schema/task
  15. http://www.springframework.org/schema/task/spring-task-4.0.xsd">
  16.  
  17. <!-- 采用注释的方式配置bean -->
  18. <context:annotation-config />
  19. <task:annotation-driven/>
  20. <context:component-scan base-package="com.hbst.basessm_3" />
  21.  
  22. <!-- proxy-target-class="true"强制使用CGLib代理,为false则spring会自动选择,否则事务不生效 -->
  23. <aop:aspectj-autoproxy proxy-target-class="true" />
  24.  
  25. <import resource="classpath:config/spring/spring-mybatis.xml" />
  26.  
  27. <!-- 模板引擎 -->
  28. <bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean" />
  29.  
  30. <!-- 异步线程 -->
  31. <bean id="taskExecutor"
  32. class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
  33. <property name="corePoolSize" value="10" />
  34. <property name="maxPoolSize" value="30" />
  35. </bean>
  36. </beans>

  5、至此,spring和mybatis整合完成,下面整合springMVC  我这里创建spring-servlet.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
  4. xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx"
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6. xsi:schemaLocation="http://www.springframework.org/schema/aop
  7. http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
  8. http://www.springframework.org/schema/beans
  9. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  10. http://www.springframework.org/schema/context
  11. http://www.springframework.org/schema/context/spring-context-3.0.xsd
  12. http://www.springframework.org/schema/mvc
  13. http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
  14. http://www.springframework.org/schema/tx
  15. http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
  16.  
  17. <mvc:annotation-driven />
  18. <context:component-scan base-package="com.hbst.basessm_3" />
  19.  
  20. <bean id="defaultViewResolver"
  21. class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  22. <property name="contentType" value="text/html" />
  23. <property name="prefix" value="/" />
  24. <property name="suffix" value=".jsp" />
  25. </bean>
  26.  
  27. <!-- rest json related... start -->
  28. <bean id="mappingJacksonHttpMessageConverter"
  29. class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
  30. <property name="supportedMediaTypes">
  31. <list>
  32. <value>application/json;charset=UTF-8</value>
  33. </list>
  34. </property>
  35. </bean>
  36. <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
  37. <property name="messageConverters">
  38. <list>
  39. <ref bean="mappingJacksonHttpMessageConverter"/>
  40. </list>
  41. </property>
  42. </bean>
  43. <!-- rest json related... end -->
  44.  
  45. </beans>

  6、配置日志管理,创建log4j.xml

  

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE log4j:configuration SYSTEM "../dtd/log4j.dtd">
  3. <!-- ========================== 自定义输出格式说明================================ -->
  4. <!-- %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL -->
  5. <!-- %r 输出自应用启动到输出该log信息耗费的毫秒数 -->
  6. <!-- %c 输出所属的类目,通常就是所在类的全名 -->
  7. <!-- %t 输出产生该日志事件的线程名 -->
  8. <!-- %n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n” -->
  9. <!-- %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日
  10. 22:10:28,921 -->
  11. <!-- %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10) -->
  12. <!-- ========================================================================== -->
  13.  
  14. <!-- ========================== 输出方式说明================================ -->
  15. <!-- Log4j提供的appender有以下几种: -->
  16. <!-- org.apache.log4j.ConsoleAppender(控制台), -->
  17. <!-- org.apache.log4j.FileAppender(文件), -->
  18. <!-- org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件), -->
  19. <!-- org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件), -->
  20. <!-- org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方) -->
  21. <!-- ========================================================================== -->
  22.  
  23. <!--Threshold是个全局的过滤器,他将把低于所设置的level的信息过滤不显示出来 -->
  24. <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
  25. debug="true" threshold="debug">
  26.  
  27. <!-- 控制台打印日志 -->
  28. <appender name="console" class="org.apache.log4j.ConsoleAppender">
  29.  
  30. <layout class="org.apache.log4j.PatternLayout">
  31. <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} | %t | %-5p | %c%m%n" />
  32. </layout>
  33.  
  34. </appender>
  35.  
  36. <!-- 输出到日志文件 -->
  37. <appender name="filelog_appender" class="org.apache.log4j.RollingFileAppender">
  38.  
  39. <!-- 设置File参数:日志输出文件名 -->
  40. <param name="File" value="${BaseSsm_1.root}/log/BaseSsm_3_debug.log" />
  41.  
  42. <!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
  43. <param name="Append" value="false" />
  44.  
  45. <!-- 设置文件大小 -->
  46. <param name="MaxFileSize" value="10MB" />
  47.  
  48. <!-- 设置文件备份 -->
  49. <param name="MaxBackupIndex" value="300" />
  50.  
  51. <!-- 设置输出文件项目和格式 -->
  52. <layout class="org.apache.log4j.PatternLayout">
  53. <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} | %t | %-5p | %c %m%n" />
  54. </layout>
  55.  
  56. </appender>
  57.  
  58. <category name="org.apache.log4j">
  59. <priority value="warn" />
  60. </category>
  61.  
  62. <logger name="org.springframework">
  63. <!-- <level value="info" /> -->
  64. <level value="debug" />
  65. </logger>
  66.  
  67. <logger name="com.opensymphony.xwork2">
  68. <!-- <level value="info" /> -->
  69. <level value="debug" />
  70. </logger>
  71.  
  72. <!-- org.apache.axis2 | org.apache.struts2 -->
  73. <logger name="org.apache.axis2">
  74. <level value="info" />
  75. </logger>
  76.  
  77. <logger name="org.apache.axiom">
  78. <level value="warn" />
  79. </logger>
  80.  
  81. <logger name="org.apache.struts2">
  82. <!-- <level value="info" /> -->
  83. <level value="debug" />
  84. </logger>
  85.  
  86. <logger name="org.apache.struts2.json">
  87. <level value="debug" />
  88. </logger>
  89.  
  90. <logger name="org.apache.ibatis">
  91. <level value="debug" />
  92. </logger>
  93.  
  94. <logger name="org.mybatis">
  95. <level value="debug" />
  96. </logger>
  97.  
  98. <logger name="java.sql">
  99. <level value="debug" />
  100. </logger>
  101.  
  102. <root>
  103. <priority value="debug" />
  104. <appender-ref ref="console" />
  105. <appender-ref ref="filelog_appender" />
  106. </root>
  107.  
  108. </log4j:configuration>  

  7、配置web.xml 在web.xm中引入spring配置文件、springMVC的配置文件和log4j.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  5. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  6.  
  7. <display-name>Archetype Created Web Application</display-name>
  8. <!-- RequestContextListener -->
  9. <listener>
  10. <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
  11. </listener>
  12.  
  13. <!-- 指定Web根目录 -->
  14. <context-param>
  15. <param-name>webAppRootKey</param-name>
  16. <param-value>BaseSsm_1.root</param-value>
  17. </context-param>
  18.  
  19. <!-- FMT i18n Begin -->
  20. <context-param>
  21. <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
  22. <param-value>i18n/lang_messages</param-value>
  23. </context-param>
  24. <filter>
  25. <filter-name>SetCharacterEncoding</filter-name>
  26. <filter-class>com.hbst.basessm_1.util.filter.SetCharacterEncodingFilter</filter-class>
  27. </filter>
  28. <filter-mapping>
  29. <filter-name>SetCharacterEncoding</filter-name>
  30. <url-pattern>/*</url-pattern>
  31. </filter-mapping>
  32. <!-- FMT i18n End -->
  33.  
  34. <!-- 字符集过滤器 -->
  35. <filter>
  36. <filter-name>CharacterEncodingFilter</filter-name>
  37. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  38. <init-param>
  39. <param-name>encoding</param-name>
  40. <param-value>UTF-8</param-value>
  41. </init-param>
  42. <init-param>
  43. <param-name>forceEncoding</param-name>
  44. <param-value>true</param-value>
  45. </init-param>
  46. </filter>
  47. <filter-mapping>
  48. <filter-name>CharacterEncodingFilter</filter-name>
  49. <url-pattern>/*</url-pattern>
  50. </filter-mapping>
  51.  
  52. <!-- 日志管理配置 -->
  53. <listener>
  54. <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  55. </listener>
  56.  
  57. <context-param>
  58. <param-name>log4jConfigLocation</param-name>
  59. <param-value>classpath:log4j.xml</param-value>
  60. </context-param>
  61.  
  62. <!-- 60s 检测日志配置 文件变化 -->
  63. <context-param>
  64. <param-name>log4jRefreshInterval</param-name>
  65. <param-value>60000</param-value>
  66. </context-param>
  67.  
  68. <!-- Spring管理配置 -->
  69. <listener>
  70. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  71. </listener>
  72.  
  73. <!-- 加载Spring配置文件 -->
  74. <context-param>
  75. <param-name>contextConfigLocation</param-name>
  76. <param-value>
  77. classpath:config/spring/applicationContext.xml
  78. </param-value>
  79. </context-param>
  80. <!-- Spring MVC配置 -->
  81. <servlet>
  82. <servlet-name>Dispatcher</servlet-name>
  83. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  84.  
  85. <!-- 自定义spring mvc的配置文件名称和路径 -->
  86. <init-param>
  87. <param-name>contextConfigLocation</param-name>
  88. <param-value>classpath:config/spring/spring-servlet.xml</param-value>
  89. </init-param>
  90. <load-on-startup>1</load-on-startup>
  91. </servlet>
  92. <!-- spring mvc 请求后缀 -->
  93. <servlet-mapping>
  94. <servlet-name>Dispatcher</servlet-name>
  95. <url-pattern>*.do</url-pattern>
  96. </servlet-mapping>
  97.  
  98. </web-app>

  8、最后的目录结构是这样的,源代码已经提交github,有需要的可以下载源码看看,我这里提交的项目是basessm_1,跟basessm_3的结构是一样的,只需要修改下配置文件即可。

   github地址是 https://github.com/1428977695/BaseSsm_3/tree/master/BaseSsm_1

  

 9、测试,我这里使用basessm_1来测试

    9.1、将项目部署到tomcat上,打开浏览器http://localhost:8080/BaseSsm_1

  

    9.2、出现helloword,说明项目已经启动成功了,下面我们进行数据交互测试,

      首先创建数据库,我这里创建user表  就两个字段   将这两个字段的值   显示在页面上

  

    9.3、创建实体

  

    9.4、创建mapper文件

    9.5、配置实体别名映射

    9.6、创建接口

    

     9.7、创建实现类

    

    9.8、这里将几个基础的类如baseDao.java PageInterceptor.java文件也放上来

      9.8.1、接口IBaseDao

  1. package com.hbst.basessm_1.dao;
  2.  
  3. import java.util.List;
  4. import java.util.Map;
  5.  
  6. public interface IBaseDao {
  7.  
  8. /**
  9. * @Author:Dean
  10. * @Description:保存
  11. * @param statement
  12. * SQLID
  13. * @param parameter
  14. * 参数
  15. * @return boolean true 成功,false 失败
  16. * @Date 2015年12月31日
  17. */
  18. public boolean insert(String statement, Object parameter);
  19.  
  20. /**
  21. * @Author:Dean
  22. * @Description:更新
  23. * @param statement
  24. * SQLID
  25. * @param parameter
  26. * 参数
  27. * @return boolean true 成功,false 失败
  28. * @Date 2015年12月31日
  29. */
  30. public boolean update(String statement, Object parameter);
  31.  
  32. /**
  33. * @Author:Dean
  34. * @Description:删除
  35. * @param statement
  36. * SQLID
  37. * @param parameter
  38. * 参数
  39. * @return boolean true 成功,false 失败
  40. * @Date 2015年12月31日
  41. */
  42. public boolean delete(String statement, Object parameter);
  43.  
  44. /**
  45. * @Author:Dean
  46. * @Description:查询单条数据
  47. * @param statement
  48. * SQLID
  49. * @param parameter
  50. * 参数
  51. * @return Object
  52. * @Date 2015年12月31日
  53. */
  54. public Object findOneByCustom(String statement, Object parameter);
  55.  
  56. /**
  57. * @param <T>
  58. * @Author:Dean
  59. * @Description: 查询集合列表
  60. * @param statement
  61. * SQLID
  62. * @param parameter
  63. * 参数
  64. * @return List<Object>
  65. * @Date 2015年12月31日
  66. */
  67. public <T> List<T> findListByCustom(String statement, Object parameter);
  68. /**
  69. * @param <T>
  70. * @Author:Dean
  71. * @Description: 分页查询
  72. * @param statement
  73. * SQLID
  74. * @param parameter
  75. * 参数
  76. * @return List<Object>
  77. * @Date 2015年12月31日
  78. */
  79. public Map<String,Object> findPageByCustom(String statement, Object parameter);
  80.  
  81. }

    9.8.2、实现类basedao

  1. package com.hbst.basessm_1.dao.impl;
  2.  
  3. import java.sql.Connection;
  4. import java.sql.PreparedStatement;
  5. import java.sql.ResultSet;
  6. import java.sql.SQLException;
  7. import java.util.HashMap;
  8. import java.util.List;
  9. import java.util.Map;
  10.  
  11. import org.apache.commons.beanutils.PropertyUtils;
  12. import org.apache.ibatis.executor.ErrorContext;
  13. import org.apache.ibatis.executor.ExecutorException;
  14. import org.apache.ibatis.mapping.BoundSql;
  15. import org.apache.ibatis.mapping.MappedStatement;
  16. import org.apache.ibatis.mapping.ParameterMapping;
  17. import org.apache.ibatis.mapping.ParameterMode;
  18. import org.apache.ibatis.reflection.MetaObject;
  19. import org.apache.ibatis.reflection.property.PropertyTokenizer;
  20. import org.apache.ibatis.scripting.xmltags.ForEachSqlNode;
  21. import org.apache.ibatis.session.Configuration;
  22. import org.apache.ibatis.type.TypeHandler;
  23. import org.apache.ibatis.type.TypeHandlerRegistry;
  24. import org.mybatis.spring.SqlSessionTemplate;
  25. import org.mybatis.spring.SqlSessionUtils;
  26. import org.springframework.beans.factory.annotation.Autowired;
  27. import org.springframework.stereotype.Repository;
  28.  
  29. import com.hbst.basessm_1.dao.IBaseDao;
  30. import com.hbst.basessm_1.util.constant.CodeConstant;
  31. import com.hbst.basessm_1.util.exception.BusinessException;
  32.  
  33. import net.sf.json.JSONObject;
  34.  
  35. @Repository("baseDao")
  36. public class BaseDao implements IBaseDao {
  37.  
  38. @Autowired
  39. private SqlSessionTemplate sqlSessionTemplate;
  40.  
  41. private long ROW_NUMBER = 0;
  42.  
  43. private long ZERO = 0;
  44.  
  45. public boolean insert(String statement, Object parameter) {
  46.  
  47. if (null == parameter || null == statement) {
  48. throw new IllegalArgumentException(" Parameter Is Null.");
  49. }
  50. ROW_NUMBER = sqlSessionTemplate.insert(statement, parameter);
  51. return ROW_NUMBER > ZERO ? true : false;
  52. }
  53.  
  54. public boolean update(String statement, Object parameter) {
  55.  
  56. if (null == parameter || null == statement) {
  57. throw new IllegalArgumentException(" Parameter Is Null.");
  58. }
  59. ROW_NUMBER = sqlSessionTemplate.update(statement, parameter);
  60. return ROW_NUMBER > ZERO ? true : false;
  61. }
  62.  
  63. public boolean delete(String statement, Object parameter) {
  64.  
  65. if (null == parameter || null == statement) {
  66. throw new IllegalArgumentException(" Parameter Is Null.");
  67. }
  68. ROW_NUMBER = sqlSessionTemplate.delete(statement, parameter);
  69. return ROW_NUMBER > ZERO ? true : false;
  70. }
  71.  
  72. public Object findOneByCustom(String statement, Object parameter) {
  73.  
  74. if (null == parameter || null == statement) {
  75. throw new IllegalArgumentException(" Parameter Is Null.");
  76. }
  77. return sqlSessionTemplate.selectOne(statement, parameter);
  78. }
  79.  
  80. public <T> List<T> findListByCustom(String statement, Object parameter) {
  81.  
  82. if (null == parameter || null == statement) {
  83. throw new IllegalArgumentException(" Parameter Is Null.");
  84. }
  85. return sqlSessionTemplate.selectList(statement, parameter);
  86. }
  87. @SuppressWarnings("unchecked")
  88. public Map<String,Object> findPageByCustom(String statement, Object parameter) {
  89.  
  90. if (null == parameter || null == statement) {
  91. throw new IllegalArgumentException(" Parameter Is Null.");
  92. }
  93. HashMap<String,Object> retMap = new HashMap<String,Object>();
  94. //是否为分页查询
  95. JSONObject jsonObject = JSONObject.fromObject(parameter);
  96. if (!(jsonObject.containsKey("pageNO") && null != jsonObject.get("pageNO")
  97. && jsonObject.containsKey("records") && null != jsonObject.get("records"))) {
  98. throw new BusinessException(CodeConstant.PARAMS_ERROR);
  99. }
  100. Integer pageNO = (Integer) jsonObject.get("pageNO") ;
  101. Integer records = (Integer) jsonObject.get("records");
  102. if(pageNO!=null && pageNO>0 && records!=null && records>0){
  103. retMap.put("recordsTotal", this.getTotalCount(statement, parameter));
  104. retMap.put("data",sqlSessionTemplate.selectList(statement, parameter));
  105. return retMap;
  106. }
  107. retMap.put("data",sqlSessionTemplate.selectList(statement, parameter));
  108. return retMap;
  109. }
  110. /**
  111. * get total count
  112. *
  113. * @param sqlSession
  114. * @param statementName
  115. * @param values
  116. * @return
  117. */
  118. private Integer getTotalCount(String statementName, Object values) {
  119. Map parameterMap = toParameterMap(values);
  120. Integer count = 0;
  121. try {
  122. MappedStatement mst = sqlSessionTemplate.getSqlSessionFactory()
  123. .getConfiguration().getMappedStatement(statementName);
  124. BoundSql boundSql = mst.getBoundSql(parameterMap);
  125. String sql = " select count(*) total_count from ("
  126. + boundSql.getSql() + ") as total";
  127.  
  128. Connection con = SqlSessionUtils
  129. .getSqlSession(sqlSessionTemplate.getSqlSessionFactory(), sqlSessionTemplate.getExecutorType(),sqlSessionTemplate.getPersistenceExceptionTranslator())
  130. .getConnection();
  131. PreparedStatement pstmt = con.prepareStatement(sql);
  132. // BoundSql countBS = new
  133. // BoundSql(mst.getConfiguration(),sql,boundSql.getParameterMappings(),parameterMap);
  134. setParameters(pstmt, mst, boundSql, parameterMap);
  135. ResultSet rs = pstmt.executeQuery();
  136. if (rs.next()) {
  137. count = rs.getInt("total_count");
  138. }
  139. rs.close();
  140. con.close();
  141. pstmt.close();
  142. } catch (Exception e) {
  143. count = 0;
  144. e.printStackTrace();
  145. throw new RuntimeException(e);
  146. }
  147. return count;
  148. }
  149.  
  150. /**
  151. * 对SQL参数(?)设值,参考org.apache.ibatis.executor.parameter.
  152. * DefaultParameterHandler
  153. *
  154. * @param ps
  155. * @param mappedStatement
  156. * @param boundSql
  157. * @param parameterObject
  158. * @throws SQLException
  159. */
  160. private void setParameters(PreparedStatement ps,
  161. MappedStatement mappedStatement, BoundSql boundSql,
  162. Object parameterObject) throws SQLException {
  163. ErrorContext.instance().activity("setting parameters")
  164. .object(mappedStatement.getParameterMap().getId());
  165. List<ParameterMapping> parameterMappings = boundSql
  166. .getParameterMappings();
  167. if (parameterMappings != null) {
  168. Configuration configuration = mappedStatement.getConfiguration();
  169. TypeHandlerRegistry typeHandlerRegistry = configuration
  170. .getTypeHandlerRegistry();
  171. MetaObject metaObject = parameterObject == null ? null
  172. : configuration.newMetaObject(parameterObject);
  173. for (int i = 0; i < parameterMappings.size(); i++) {
  174. ParameterMapping parameterMapping = parameterMappings.get(i);
  175. if (parameterMapping.getMode() != ParameterMode.OUT) {
  176. Object value;
  177. String propertyName = parameterMapping.getProperty();
  178. PropertyTokenizer prop = new PropertyTokenizer(propertyName);
  179. if (parameterObject == null) {
  180. value = null;
  181. } else if (typeHandlerRegistry
  182. .hasTypeHandler(parameterObject.getClass())) {
  183. value = parameterObject;
  184. } else if (boundSql.hasAdditionalParameter(propertyName)) {
  185. value = boundSql.getAdditionalParameter(propertyName);
  186. } else if (propertyName
  187. .startsWith(ForEachSqlNode.ITEM_PREFIX)
  188. && boundSql.hasAdditionalParameter(prop.getName())) {
  189. value = boundSql.getAdditionalParameter(prop.getName());
  190. if (value != null) {
  191. value = configuration.newMetaObject(value)
  192. .getValue(
  193. propertyName.substring(prop
  194. .getName().length()));
  195. }
  196. } else {
  197. value = metaObject == null ? null : metaObject
  198. .getValue(propertyName);
  199. }
  200. TypeHandler typeHandler = parameterMapping.getTypeHandler();
  201. if (typeHandler == null) {
  202. throw new ExecutorException(
  203. "There was no TypeHandler found for parameter "
  204. + propertyName + " of statement "
  205. + mappedStatement.getId());
  206. }
  207. typeHandler.setParameter(ps, i + 1, value,
  208. parameterMapping.getJdbcType());
  209. }
  210. }
  211. }
  212. }
  213.  
  214. protected Map toParameterMap(Object parameter) {
  215. if (parameter == null) {
  216. return new HashMap();
  217. }
  218. if (parameter instanceof Map) {
  219. return (Map<?, ?>) parameter;
  220. } else {
  221. try {
  222. return PropertyUtils.describe(parameter);
  223. } catch (Exception e) {
  224. e.printStackTrace();
  225. return null;
  226. }
  227. }
  228. }
  229.  
  230. }

    9.8.3、分页拦截器

  1. package com.hbst.basessm_1.dao.plugin;
  2.  
  3. import java.sql.Connection;
  4. import java.sql.Statement;
  5. import java.util.Properties;
  6.  
  7. import org.apache.ibatis.executor.resultset.ResultSetHandler;
  8. import org.apache.ibatis.executor.statement.StatementHandler;
  9. import org.apache.ibatis.mapping.BoundSql;
  10. import org.apache.ibatis.plugin.Interceptor;
  11. import org.apache.ibatis.plugin.Intercepts;
  12. import org.apache.ibatis.plugin.Invocation;
  13. import org.apache.ibatis.plugin.Plugin;
  14. import org.apache.ibatis.plugin.Signature;
  15. import org.apache.ibatis.reflection.MetaObject;
  16. import org.apache.ibatis.reflection.SystemMetaObject;
  17. import org.apache.ibatis.scripting.defaults.DefaultParameterHandler;
  18.  
  19. import net.sf.json.JSONObject;
  20.  
  21. /**
  22. * @author tangguilin
  23. * 分页拦截器
  24. */
  25. @Intercepts({
  26. @Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class}),
  27. @Signature(type = ResultSetHandler.class, method = "handleResultSets", args = {Statement.class})
  28. })
  29. public class PageInterceptor implements Interceptor {
  30.  
  31. public Object intercept(Invocation invocation) throws Throwable {
  32. if (invocation.getTarget() instanceof StatementHandler) {
  33. StatementHandler statementHandler = (StatementHandler) invocation.getTarget();
  34. MetaObject metaStatementHandler = SystemMetaObject.forObject(statementHandler);
  35. //获取参数对象
  36. DefaultParameterHandler parameterHander=(DefaultParameterHandler) metaStatementHandler.getValue("delegate.parameterHandler");
  37. Object parameterObject = parameterHander.getParameterObject();
  38. JSONObject jsonParameter = JSONObject.fromObject(parameterObject);
  39. //是否分页
  40. if(jsonParameter!=null && jsonParameter.has("pageNO")){
  41. Integer pageNO = jsonParameter.getInt("pageNO");
  42. Integer records = jsonParameter.getInt("records");
  43. BoundSql boundSql = (BoundSql) metaStatementHandler.getValue("delegate.boundSql");
  44. String sql = boundSql.getSql();
  45. StringBuffer sb=new StringBuffer();
  46. sb.append(sql);
  47. sb.append(" limit ").append((pageNO-1)*records).append(" , ").append(records);
  48. metaStatementHandler.setValue("delegate.boundSql.sql", sb.toString());
  49. }
  50. }
  51. return invocation.proceed();
  52. }
  53.  
  54. /**
  55. * 拦截类型StatementHandler
  56. */
  57. public Object plugin(Object target) {
  58. if (target instanceof StatementHandler) {
  59. return Plugin.wrap(target, this);
  60. } else {
  61. return target;
  62. }
  63. }
  64.  
  65. public void setProperties(Properties properties) {
  66.  
  67. }
  68. }

    9.8.4、返回码文件

  1. package com.hbst.basessm_1.util.constant;
  2.  
  3. /**
  4. * 返回码
  5. *
  6. * @author lanshiyan description: code码为6位 每两位为一个级别分别代表不同的意思 前两位:级别 00 系统级别 01
  7. */
  8. public interface CodeConstant {
  9.  
  10. /****************************************************************************/
  11. /************************ BEGIN 00系统级别公共错误码 *************************/
  12. /****************************************************************************/
  13.  
  14. /**
  15. * 成功
  16. */
  17. public static final String SUCCESS = "000000";
  18. /**
  19. * 参数验证错误码
  20. */
  21. public static final String PARAMS_ERROR = "000001";
  22. public static final String PARAMS_ERROR_DESCRIPTION = "Invalid method required parameter";
  23.  
  24. /**
  25. * 系统异常错误码
  26. */
  27. public static final String SYSTEM_ERROR = "000002";
  28. public static final String SYSTEM_ERROR_DESCRIPTION = "Unknow system exception";
  29.  
  30. /****************************************************************************/
  31. /************************ BEGIN 01业务级别登录错误码 **************************/
  32. /****************************************************************************/
  33.  
  34. // ===========================================================================
  35. // BEGIN 00公共错误码
  36. // ===========================================================================
  37.  
  38. /**
  39. * 用户名密码错误
  40. */
  41. public static final String USERNAME_PWD_ERROR = "010001";
  42.  
  43. /**
  44. * 参数为空
  45. */
  46. public static final String PARARM_IS_EMPTY = "010002";
  47.  
  48. /**
  49. * 不存在此用户
  50. */
  51. public static final String SYSTEM_USER_NOT_EXISTS = "010003";
  52. public static final String SYSTEM_USER_NOT_EXISTS_DESCRIPTION = "User not exists or bad user ID";
  53.  
  54. /**
  55. * 密码复杂度不符合要求
  56. */
  57. public static final String SYSTEM_BAD_PASSWORD_COMPLEXITY = "010004";
  58. public static final String SYSTEM_BAD_PASSWORD_COMPLEXITY_DESCRIPTION = "Invalid password of complexity";
  59.  
  60. /**
  61. * 旧密码错误
  62. */
  63. public static final String SYSTEM_BAD_OLD_PASSWORD = "010005";
  64. public static final String SYSTEM_BAD_OLD_PASSWORD_DESCRIPTION = "Invalid old password";

    9.8.5、返回实体文件

  1. package com.hbst.basessm_1.util.entity;
  2.  
  3. import java.io.Serializable;
  4.  
  5. /**
  6. * 返回消息实体对象定义
  7. *
  8. * @author Dean 20160912
  9. */
  10. public class ResultMessage implements Serializable {
  11.  
  12. private static final long serialVersionUID = 1L;
  13.  
  14. // 成功或失败的错误码,成功时返回000000
  15. private String code;
  16.  
  17. // 失败时返回的错误消息
  18. private String codeDesc;
  19.  
  20. // 当需要返回值时返回值对象,如果是查询列表,则返回queryList对象
  21. private Object data;
  22.  
  23. public String getCode() {
  24. return code;
  25. }
  26.  
  27. public void setCode(String code) {
  28. this.code = code;
  29. }
  30.  
  31. public String getCodeDesc() {
  32. return codeDesc;
  33. }
  34.  
  35. public void setCodeDesc(String codeDesc) {
  36. this.codeDesc = codeDesc;
  37. }
  38.  
  39. public Object getData() {
  40. return data;
  41. }
  42.  
  43. public void setData(Object data) {
  44. this.data = data;
  45. }
  46.  
  47. public static long getSerialversionuid() {
  48. return serialVersionUID;
  49. }
  50.  
  51. @Override
  52. public String toString() {
  53. return "ResultMessage [code=" + code + ", codeDes=" + codeDesc + ", data=" + data + "]";
  54. }
  55.  
  56. }

    9.8.6、系统自定义异常类

  1. package com.hbst.basessm_1.util.exception;
  2.  
  3. import com.hbst.basessm_1.util.baseUtil.ResourceUtils;
  4. import com.hbst.basessm_1.util.constant.CodeConstant;
  5.  
  6. /**
  7. * 系统自定义异常类。
  8. *
  9. *
  10. *
  11. */
  12. public class BusinessException extends RuntimeException {
  13. private static final long serialVersionUID = 1L;
  14.  
  15. /**
  16. * 错误码。
  17. */
  18. private String errorCode;
  19.  
  20. /**
  21. * 问题
  22. */
  23. private String errorDes;
  24.  
  25. /**
  26. * 指定错误码与错误描述的异常。
  27. *
  28. * @param errorCode
  29. * 错误码
  30. * @param msg
  31. * 异常信息
  32. */
  33. public BusinessException(String errorCode, String msg) {
  34. super(msg);
  35. this.errorCode = errorCode;
  36. this.errorDes = msg;
  37. }
  38.  
  39. /**
  40. * 指定错误码与错误描述的异常。
  41. *
  42. * @param errorCode
  43. * 错误码
  44. * @param msg
  45. * 异常信息
  46. */
  47. public BusinessException(String errorCode) {
  48. super(ResourceUtils.getResultCodeDesc(errorCode));
  49. this.errorCode = errorCode;
  50. this.errorDes = (ResourceUtils.getResultCodeDesc(errorCode));
  51. }
  52.  
  53. /**
  54. * 未定义异常。
  55. */
  56. public BusinessException() {
  57.  
  58. super(ResourceUtils.getResultCodeDesc(CodeConstant.SYSTEM_ERROR));
  59. this.errorCode = CodeConstant.SYSTEM_ERROR;
  60. }
  61.  
  62. public String getErrorDes() {
  63. return errorDes;
  64. }
  65.  
  66. public void setErrorDes(String errorDes) {
  67. this.errorDes = errorDes;
  68. }
  69.  
  70. public String getErrorCode() {
  71. return errorCode;
  72. }
  73.  
  74. public void setErrorCode(String errorCode) {
  75. this.errorCode = errorCode;
  76. }
  77.  
  78. }

  

9.9、现在创建controller

    9.10、在index.jsp中加入jquery.js,用jq的ajax方法去请求后台

   9.11、刷新页面,点击按钮,会出现数据库里面插入的值。

  10、到这里  ssm基础框架的整合,已经前后台交互就算完成。

基础框架整合-ssm框架+前后台交互完整教程的更多相关文章

  1. shiro框架整合ssm框架

    下面我通过一个web的maven项目来讲解如何将shiro整合ssm框架,具体结构如下图 一.引入依赖的jar包 <?xml version="1.0" encoding=& ...

  2. 整合SSM框架必备基础—SpringMVC(下)

    在上一篇文章<整合SSM框架必备基础-SpringMVC(上)>中,胖达介绍了关于SpringMVC的诞生.优势以及执行流程等理论知识点,这篇文章打算在实操中加深一下对SpringMVC的 ...

  3. shiro权限控制(一):shiro介绍以及整合SSM框架

    shiro安全框架是目前为止作为登录注册最常用的框架,因为它十分的强大简单,提供了认证.授权.加密和会话管理等功能 . shiro能做什么? 认证:验证用户的身份 授权:对用户执行访问控制:判断用户是 ...

  4. 一个JavaWeb搭建的开源Blog系统,整合SSM框架

    搬砖有暇,捣鼓了一个简单的Blog系统(项目地址https://github.com/lenve/JavaEETest/tree/master/MyBlog),适合以下人群学习: 1.已经掌握了jsp ...

  5. IDEA+Maven 整合SSM框架实现简单的增删改查(新手入门,傻瓜操作)

    原博客地址:https://blog.csdn.net/khxu666/article/details/79851070 选用SSM框架的原因在目前的企业级Java应用中,Spring框架是必须的.S ...

  6. 用Maven整合SSM框架

    前述 Maven 是专门用于构建和管理Java相关项目的工具,利用 Maven 的主要目的是统一维护 jar 包.关于 Maven 的安装在这篇里面就不说了. SSM(Spring+SpringMVC ...

  7. Spring_day04--Spring框架整合hibernate框架

    Spring框架整合hibernate框架 1 把hibernate核心配置文件中配置数据库信息,把数据库信息在spring进行配置 2 把hibernate里面的sessionFactory创建交给 ...

  8. Spring 框架整合Struts2 框架和 Hibernate 框架

    1. Spring 框架整合 Struts2 框架 // [第一种整合方式(不推荐)](http://www.cnblogs.com/linkworld/p/7718274.html) // 从 Se ...

  9. 手把手整合SSM框架

    前言 如果看过前几篇文章,对 Spring 和 MyBatis 有了一定了解,一定想上手试试.这篇文章从 0 到 1,手把手整合 SSM (Spring.Spring MVC.MyBatis). 本篇 ...

随机推荐

  1. hdu 2883 kebab(时间区间压缩 &amp;&amp; dinic)

    kebab Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  2. Linux - 设置光盘,开机自动挂载。

    设置光盘,开机自动挂载. 挂载, 在linux操作系统中, 挂载是指将一个设备(通常是存储设备)挂接到一个已存在的目录上. 我们要访问存储设备中的文件,必须将文件所在的分区挂载到一个已存在的目录上, ...

  3. 智能识别收货地址 javascript

    欢迎加入前端交流群交流知识&&获取视频资料:749539640 地址: https://github.com/wzc570738205/smart_parse

  4. ROS单线多拨pppoe

    #设置内网IP地址 / ip add add interface=ether1 address=192.168.0.254/255.255.255.0 #设置共享上网 / ip firewall na ...

  5. wamp服务器下安装mantis

    什么是Mantis Mantis是一个BUG管理系统.主要特点如下: 1.用php写的系统,安装方便,不用像 bugzilla 那样安装那么多perl支持: 2.系统相对简单轻磅,使用简单: 3.出色 ...

  6. php pdo具体操作

    0x01:测试PDO是否安装成功 运行如下代码,如果提示参数错误,说明PDO已经安装,如果说明对象不存在,则修改PHP配置文件php.ini,取消php_pdo_yourssqlserverhere. ...

  7. JAVA 常用集合接口List、Set、Map总结

    java中频繁使用List.Set.Map接口,将其总结如下 它们的继承与实现关系如下: Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└ ...

  8. Codeforces 680D Bear and Tower of Cubes 贪心 DFS

    链接 Codeforces 680D Bear and Tower of Cubes 题意 求一个不超过 \(m\) 的最大体积 \(X\), 每次选一个最大的 \(x\) 使得 \(x^3\) 不超 ...

  9. Android进程与线程

    我们都知道,在操作系统中进程是OS分配资源的最小单位,而线程是执行任务的最小单位.一个进程可以拥有多个线程执行任务,这些线程可以共享该进程分配到的资源.当我们的app启动运行后,在该app没有其他组件 ...

  10. 在线word论文生成的方法

    下午实验室师妹问我latex转word生成的格式不行咋办.于是找了一下网上,发现了一个可以自动生成word论文的网站 https://typeset.io/formats/bmc/default-te ...