整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架



整合maven+spring+springmvc+mybatis实现ssm基础开发框架,封装通用增删查改api,提高程序开发效率

myeclipse创建maven项目:

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

把maven项目转成maven web项目:项目右键Properties

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

把WebRoot里面的东西移到src/main/webapp下面

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

打开pom.xml,加入如下,否则报错

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

项目缺少web.xml文件,在src/main/webapp/WEB-INF下加入web.xml文件即可

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

pom.xml管理ssm相关jar包

[html] view plain copy
  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/xsd/maven-4.0.0.xsd">  
  3.     <modelVersion>4.0.0</modelVersion>  
  4.     <groupId>com.xe.demo</groupId>  
  5.     <artifactId>demo-ssm</artifactId>  
  6.     <version>0.0.1-SNAPSHOT</version>  
  7.     <packaging>war</packaging>  
  8.     <properties>  
  9.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
  10.         <jdk.version>1.8</jdk.version>  
  11.         <spring.version>4.2.5.RELEASE</spring.version>  
  12.         <mybatis.version>3.3.1</mybatis.version>  
  13.         <mybatis.spring.version>1.2.4</mybatis.spring.version>  
  14.         <mysql.version>5.1.29</mysql.version>  
  15.         <fastjson.version>1.2.4</fastjson.version>  
  16.         <druid.version>1.0.13</druid.version>  
  17.     </properties>  
  18.     <dependencies>  
  19.         <!--web -->  
  20.         <dependency>  
  21.             <groupId>javax.servlet</groupId>  
  22.             <artifactId>javax.servlet-api</artifactId>  
  23.             <version>3.1.0</version>  
  24.         </dependency>  
  25.   
  26.         <!-- spring -->  
  27.         <dependency>  
  28.             <groupId>org.springframework</groupId>  
  29.             <artifactId>spring-context</artifactId>  
  30.         </dependency>  
  31.         <dependency>  
  32.             <groupId>org.springframework</groupId>  
  33.             <artifactId>spring-orm</artifactId>  
  34.         </dependency>  
  35.         <dependency>  
  36.             <groupId>org.springframework</groupId>  
  37.             <artifactId>spring-oxm</artifactId>  
  38.         </dependency>  
  39.         <dependency>  
  40.             <groupId>org.springframework</groupId>  
  41.             <artifactId>spring-jdbc</artifactId>  
  42.         </dependency>  
  43.         <dependency>  
  44.             <groupId>org.springframework</groupId>  
  45.             <artifactId>spring-tx</artifactId>  
  46.         </dependency>  
  47.         <dependency>  
  48.             <groupId>org.springframework</groupId>  
  49.             <artifactId>spring-web</artifactId>  
  50.         </dependency>  
  51.         <dependency>  
  52.             <groupId>org.springframework</groupId>  
  53.             <artifactId>spring-webmvc</artifactId>  
  54.         </dependency>  
  55.         <dependency>  
  56.             <groupId>org.springframework</groupId>  
  57.             <artifactId>spring-aop</artifactId>  
  58.         </dependency>  
  59.   
  60.         <!--spring-aop依赖 -->  
  61.         <dependency>  
  62.             <groupId>org.aspectj</groupId>  
  63.             <artifactId>aspectjweaver</artifactId>  
  64.             <version>1.8.2</version>  
  65.         </dependency>  
  66.         <!--spring-json依赖 -->  
  67.         <dependency>  
  68.             <groupId>com.fasterxml.jackson.core</groupId>  
  69.             <artifactId>jackson-databind</artifactId>  
  70.             <version>2.4.6</version>  
  71.         </dependency>  
  72.   
  73.         <!--Mybatis -->  
  74.         <dependency>  
  75.             <groupId>org.mybatis</groupId>  
  76.             <artifactId>mybatis</artifactId>  
  77.             <version>${mybatis.version}</version>  
  78.         </dependency>  
  79.         <dependency>  
  80.             <groupId>org.mybatis</groupId>  
  81.             <artifactId>mybatis-spring</artifactId>  
  82.             <version>${mybatis.spring.version}</version>  
  83.         </dependency>  
  84.         <!--分页插件 -->  
  85.         <dependency>  
  86.             <groupId>com.github.pagehelper</groupId>  
  87.             <artifactId>pagehelper</artifactId>  
  88.             <version>4.1.6</version>  
  89.         </dependency>  
  90.   
  91.         <!--mysql -->  
  92.         <dependency>  
  93.             <groupId>mysql</groupId>  
  94.             <artifactId>mysql-connector-java</artifactId>  
  95.             <version>${mysql.version}</version>  
  96.         </dependency>  
  97.   
  98.         <!--druid -->  
  99.         <dependency>  
  100.             <groupId>com.alibaba</groupId>  
  101.             <artifactId>fastjson</artifactId>  
  102.             <version>${fastjson.version}</version>  
  103.         </dependency>  
  104.         <dependency>  
  105.             <groupId>com.alibaba</groupId>  
  106.             <artifactId>druid</artifactId>  
  107.             <version>${druid.version}</version>  
  108.         </dependency>  
  109.   
  110.         <!-- commons -->  
  111.         <dependency>  
  112.             <groupId>commons-fileupload</groupId>  
  113.             <artifactId>commons-fileupload</artifactId>  
  114.             <version>1.3</version>  
  115.         </dependency>  
  116.         <dependency>  
  117.             <groupId>commons-collections</groupId>  
  118.             <artifactId>commons-collections</artifactId>  
  119.             <version>3.2.2</version>  
  120.         </dependency>  
  121.         <dependency>  
  122.             <groupId>org.apache.commons</groupId>  
  123.             <artifactId>commons-lang3</artifactId>  
  124.             <version>3.1</version>  
  125.         </dependency>  
  126.   
  127.         <dependency>  
  128.             <groupId>log4j</groupId>  
  129.             <artifactId>log4j</artifactId>  
  130.             <version>1.2.17</version>  
  131.         </dependency>  
  132.     </dependencies>  
  133.     <dependencyManagement>  
  134.         <dependencies>  
  135.             <dependency>  
  136.                 <groupId>org.springframework</groupId>  
  137.                 <artifactId>spring-framework-bom</artifactId>  
  138.                 <version>${spring.version}</version>  
  139.                 <type>pom</type>  
  140.                 <scope>import</scope>  
  141.             </dependency>  
  142.         </dependencies>  
  143.     </dependencyManagement>  
  144.     <build>  
  145.         <plugins>  
  146.             <plugin>  
  147.                 <artifactId>maven-compiler-plugin</artifactId>  
  148.                 <configuration>  
  149.                     <source>1.8</source>  
  150.                     <target>1.8</target>  
  151.                 </configuration>  
  152.             </plugin>  
  153.             <!-- 打成war包 -->  
  154.             <plugin>  
  155.                 <groupId>org.apache.maven.plugins</groupId>  
  156.                 <artifactId>maven-war-plugin</artifactId>  
  157.                 <configuration>  
  158.                     <warName>ssm</warName>  
  159.                 </configuration>  
  160.             </plugin>  
  161.         </plugins>  
  162.     </build>  
  163. </project>  

删除WebRoot目录,右键更新项目

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

创建项目包结构

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架


到此项目基础结构创建完成


==================================================整合ssm==================================================

配置mybatis-config.xml:

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD SQL Map Config 3.0//EN"  
  3.         "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  4. <configuration>  
  5.     <settings>  
  6.         <!-- mybatis支持log4j日志 -->  
  7.         <setting name="logImpl" value="LOG4J"/>  
  8.         <!-- 开启缓存 -->  
  9.         <setting name="cacheEnabled" value="true" />  
  10.         <!-- 开启全局懒加载 -->  
  11.         <setting name="lazyLoadingEnabled" value="true" />  
  12.         <!-- 当设置为‘true’的时候,懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载 -->  
  13.         <setting name="aggressiveLazyLoading" value="false" />  
  14.         <!-- 允许单一语句返回多结果集 -->  
  15.         <setting name="multipleResultSetsEnabled" value="true" />  
  16.         <!-- 使用列标签代替列名 -->  
  17.         <setting name="useColumnLabel" value="true" />  
  18.         <!-- 允许 JDBC 支持生成的键 -->  
  19.         <setting name="useGeneratedKeys" value="true" />  
  20.         <!-- 指定 MyBatis 如何自动映射列到字段/ 属性 -->  
  21.         <setting name="autoMappingBehavior" value="FULL" />  
  22.         <!-- 配置默认的执行器 -->  
  23.         <setting name="defaultExecutorType" value="REUSE" />  
  24.         <!-- 设置超时时间 -->  
  25.         <setting name="defaultStatementTimeout" value="25000" />  
  26.     </settings>  
  27.   
  28.     <plugins>  
  29.         <!-- 分页插件 -->  
  30.         <plugin interceptor="com.github.pagehelper.PageHelper"/>  
  31.     </plugins>  
  32. </configuration>  

配置spring-mybatis.xml:

[html] view plain copy
  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:tx="http://www.springframework.org/schema/tx"  
  4.     xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"  
  5.     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc"  
  6.     xmlns:task="http://www.springframework.org/schema/task"  
  7.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  8.     http://www.springframework.org/schema/beans/spring-beans-4.2.xsd  
  9.     http://www.springframework.org/schema/tx  
  10.     http://www.springframework.org/schema/tx/spring-tx-4.2.xsd  
  11.     http://www.springframework.org/schema/context  
  12.     http://www.springframework.org/schema/context/spring-context-4.2.xsd  
  13.     http://www.springframework.org/schema/aop  
  14.     http://www.springframework.org/schema/aop/spring-aop-4.2.xsd  
  15.     http://www.springframework.org/schema/cache  
  16.     http://www.springframework.org/schema/cache/spring-cache-4.2.xsd  
  17.     http://www.springframework.org/schema/mvc  
  18.     http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd">  
  19.   
  20.     <mvc:annotation-driven />  
  21.     <!-- 启动组件扫描,排除@Controller组件,该组件由SpringMVC配置文件扫描 -->  
  22.     <context:component-scan base-package="com.xe.demo">  
  23.         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />  
  24.     </context:component-scan>  
  25.   
  26.     <!-- mysql数据源 -->  
  27.     <bean id="mysqlDataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">  
  28.         <property name="driverClassName" value="${mysql.driver}" />  
  29.         <property name="url" value="${mysql.url}" />  
  30.         <property name="username" value="${mysql.username}" />  
  31.         <property name="password" value="${mysql.password}" />  
  32.         <property name="defaultAutoCommit" value="false" />  
  33.         <property name="maxActive" value="20" />  
  34.         <property name="initialSize" value="1" />  
  35.         <property name="maxWait" value="60000" />  
  36.         <property name="minIdle" value="1" />  
  37.         <property name="timeBetweenEvictionRunsMillis" value="60000" />  
  38.         <property name="minEvictableIdleTimeMillis" value="300000" />  
  39.         <property name="validationQuery" value="SELECT 'x'" />  
  40.         <property name="testWhileIdle" value="true" />  
  41.         <property name="testOnBorrow" value="false" />  
  42.         <property name="testOnReturn" value="false" />  
  43.         <property name="poolPreparedStatements" value="true" />  
  44.         <property name="maxPoolPreparedStatementPerConnectionSize" value="50" />  
  45.     </bean>  
  46.   
  47.     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
  48.         <property name="dataSource" ref="mysqlDataSource" />  
  49.         <property name="typeAliasesPackage" value="com.xe.demo.model" />  
  50.         <property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />  
  51.         <property name="mapperLocations" value="classpath:mybatis/*/*.xml"></property>  
  52.     </bean>  
  53.   
  54.     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
  55.         <property name="basePackage" value="com.xe.demo.mapper" />  
  56.         <property name="markerInterface" value="com.xe.demo.mapper.BaseMapper" />  
  57.         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />  
  58.     </bean>  
  59.   
  60.     <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">  
  61.         <constructor-arg ref="sqlSessionFactory" />  
  62.     </bean>  
  63.   
  64.     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  65.         <property name="dataSource" ref="mysqlDataSource" />  
  66.     </bean>  
  67.       
  68.     <!-- 启动对@AspectJ注解的支持 -->  
  69.     <aop:aspectj-autoproxy proxy-target-class="true" />  
  70.   
  71.     <!-- 配置事务切面Bean,指定事务管理器 -->  
  72.     <tx:advice id="txAdvice" transaction-manager="transactionManager">  
  73.         <tx:attributes>  
  74.             <tx:method name="delete*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" />  
  75.             <tx:method name="update*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" />  
  76.             <tx:method name="save*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" />  
  77.             <tx:method name="batch*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" />  
  78.         </tx:attributes>  
  79.     </tx:advice>  
  80.     <!-- Service aop -->  
  81.     <aop:config>  
  82.         <aop:pointcut id="pc" expression="execution(* com.xe.demo.service.*Service.*(..))" />  
  83.         <aop:advisor pointcut-ref="pc" advice-ref="txAdvice" />  
  84.     </aop:config>  
  85. </beans>  
spring管理配置文件spring.xml:

[html] view plain copy
  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:tx="http://www.springframework.org/schema/tx"  
  4.     xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"  
  5.     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc"  
  6.     xmlns:task="http://www.springframework.org/schema/task"  
  7.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  8.     http://www.springframework.org/schema/beans/spring-beans-4.2.xsd  
  9.     http://www.springframework.org/schema/tx  
  10.     http://www.springframework.org/schema/tx/spring-tx-4.2.xsd  
  11.     http://www.springframework.org/schema/context  
  12.     http://www.springframework.org/schema/context/spring-context-4.2.xsd  
  13.     http://www.springframework.org/schema/aop  
  14.     http://www.springframework.org/schema/aop/spring-aop-4.2.xsd  
  15.     http://www.springframework.org/schema/cache  
  16.     http://www.springframework.org/schema/cache/spring-cache-4.2.xsd  
  17.     http://www.springframework.org/schema/mvc  
  18.     http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd">  
  19.   
  20.     <!-- 读取配置文件 -->  
  21.     <context:property-placeholder location="classpath*:config.properties" ignore-unresolvable="false" />  
  22.       
  23.     <import resource="classpath:spring/spring-mybatis.xml"/>  
  24. </beans>  

配置spring-mvc.xml:

[html] view plain copy
  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:mvc="http://www.springframework.org/schema/mvc"  
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
  6.         http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd    
  7.         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">  
  8.   
  9.     <mvc:annotation-driven />  
  10.     <context:component-scan base-package="com.xe.demo.controller" />  
  11.     <!-- 对静态资源文件的访问 -->  
  12.     <mvc:resources mapping="/assets/**" location="/assets/" />  
  13.   
  14.     <!-- 配置SpringMVC的视图解析器 -->  
  15.     <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  16.         <property name="prefix" value="" />  
  17.         <property name="suffix" value=".jsp" />  
  18.     </bean>  
  19.   
  20.     <!-- 上传配置 -->  
  21.     <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
  22.         <property name="defaultEncoding" value="UTF-8" />  
  23.         <property name="maxUploadSize" value="-1" />  
  24.         <property name="maxInMemorySize" value="40960" />  
  25.     </bean>  
  26. </beans>  

创建全局配置文件config.properties:

[plain] view plain copy
  1. ########################### 数据源配置 ###########################  
  2. #########本地数据库#########  
  3. #数据源驱动  
  4. mysql.driver=com.mysql.jdbc.Driver  
  5. mysql.username=root  
  6. mysql.password=xie8845233  
  7. mysql.url=jdbc:mysql://localhost/demo?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true  

加载log4j.properties日志文件:

[plain] view plain copy
  1. log4j.rootLogger=DEBUG,CONSOLE,ERR_LOG  
  2. log4j.addivity.org.apache=false  
  3. #打印到控制台  
  4. log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender  
  5. log4j.appender.CONSOLE.Target=System.out  
  6. log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout  
  7. log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} -%-4r [%t] %-5p  %x - %m%n  
  8. #输入日志到文件  
  9. log4j.appender.ERR_LOG=org.apache.log4j.DailyRollingFileAppender  
  10. log4j.appender.ERR_LOG.Threshold=ERROR  
  11. log4j.appender.ERR_LOG.File=${catalina.home}/logs/demo  
  12. log4j.appender.ERR_LOG.DatePattern='_'yyyyMMdd'.log'  
  13. log4j.appender.ERR_LOG.Encoding=utf-8  
  14. log4j.appender.ERR_LOG.layout=org.apache.log4j.PatternLayout  
  15. log4j.appender.ERR_LOG.layout.ConversionPattern=[m6]  %d{yyyy-MM-dd HH\:mm\:ss} %5p %c{1}\:%L \: %m%n  
  16.   
  17. log4j.logger.org.apache=ERROR  
  18. log4j.logger.org.mybatis=ERROR  
  19. log4j.logger.org.springframework=ERROR  

配置web.xml:

[html] view plain copy
  1. <!DOCTYPE web-app PUBLIC  
  2.  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"  
  3.  "http://java.sun.com/dtd/web-app_2_3.dtd" >  
  4.   
  5. <web-app>  
  6.     <display-name>demo-bstable</display-name>  
  7.     <welcome-file-list>  
  8.         <welcome-file>index.jsp</welcome-file>  
  9.     </welcome-file-list>  
  10.   
  11.     <context-param>  
  12.         <param-name>contextConfigLocation</param-name>  
  13.         <param-value>classpath:spring/spring.xml</param-value>  
  14.     </context-param>  
  15.     <context-param>  
  16.         <param-name>log4jConfigLocation</param-name>  
  17.         <param-value>classpath:log4j.properties</param-value>  
  18.     </context-param>  
  19.   
  20.     <listener>  
  21.         <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>  
  22.     </listener>  
  23.     <!-- 启动加载spring容器 -->  
  24.     <listener>  
  25.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  26.     </listener>  
  27.   
  28.     <servlet>  
  29.         <servlet-name>demoServlet</servlet-name>  
  30.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  31.         <init-param>  
  32.             <param-name>contextConfigLocation</param-name>  
  33.             <param-value>classpath:spring/spring-mvc.xml</param-value>  
  34.         </init-param>  
  35.         <load-on-startup>1</load-on-startup>  
  36.     </servlet>  
  37.     <servlet-mapping>  
  38.         <servlet-name>demoServlet</servlet-name>  
  39.         <url-pattern>/</url-pattern>  
  40.     </servlet-mapping>  
  41.     <servlet-mapping>  
  42.         <servlet-name>default</servlet-name>  
  43.         <url-pattern>*.html</url-pattern>  
  44.     </servlet-mapping>  
  45.       
  46.     <!-- 编码过滤器 -->  
  47.     <filter>  
  48.         <filter-name>encodingFilter</filter-name>  
  49.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  50.         <init-param>  
  51.             <param-name>encoding</param-name>  
  52.             <param-value>UTF-8</param-value>  
  53.         </init-param>  
  54.         <init-param>  
  55.             <param-name>forceEncoding</param-name>  
  56.             <param-value>true</param-value>  
  57.         </init-param>  
  58.     </filter>  
  59.     <filter-mapping>  
  60.         <filter-name>encodingFilter</filter-name>  
  61.         <url-pattern>/*</url-pattern>  
  62.     </filter-mapping>  
  63. </web-app>  

创建通用mapper接口BaseMapper.java:
[java] view plain copy
  1. package com.xe.demo.mapper;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.List;  
  5.   
  6. import org.apache.ibatis.annotations.Param;  
  7.   
  8. import com.xe.demo.common.pojo.PageAjax;  
  9.   
  10. /** 
  11.  * Mybatis基础DAO 
  12.  * @author 蔡泽华 
  13.  */  
  14. public interface BaseMapper<T> {  
  15.   
  16.     /** 
  17.      * 通过ID查询 
  18.      * @param id 
  19.      * @return 
  20.      */  
  21.     Object selectById(Serializable id);  
  22.       
  23.     /** 
  24.      * 查询单条记录 
  25.      * @param entity 
  26.      * @return 
  27.      */  
  28.     Object selectOne(@Param("item")Object obj);  
  29.   
  30.     /** 
  31.      * 查询记录集合 
  32.      * @param entity 
  33.      * @return 
  34.      */  
  35.     List<?> selectList(@Param("item")Object obj);  
  36.       
  37.     /** 
  38.      * 分页查询 
  39.      * @param t 
  40.      * @param page 
  41.      * @return 
  42.      */  
  43.     List<T> selectPage(@Param("item")Object obj, @Param("page")PageAjax<T> page);  
  44.   
  45.     /** 
  46.      * 通用的保存方法 
  47.      * @param <T> 
  48.      * @param entity 
  49.      */  
  50.     void save(@Param("item")Object obj);  
  51.       
  52.     /** 
  53.      * 批量保存 
  54.      * @param list 
  55.      */  
  56.     int batchSave(List<?> list);  
  57.   
  58.     /** 
  59.      * 通用的修改方法 
  60.      * @param <T> 
  61.      * @param entity 
  62.      */  
  63.     int update(@Param("item")Object obj);  
  64.       
  65.     /** 
  66.      * 批量更新 
  67.      * @param list 
  68.      * @return 
  69.      */  
  70.     int batchUpdate(List<?> list);  
  71.   
  72.     /** 
  73.      * 删除方法 
  74.      * @param id 
  75.      */  
  76.     int delById(Serializable id);  
  77.       
  78.     /** 
  79.      * 批量删除 
  80.      * @param list 
  81.      * @return 
  82.      */  
  83.     int delList(List<?> list);  
  84.   
  85.     /** 
  86.      * 批量删除方法 
  87.      * @param ids 
  88.      */  
  89.     int delArray(int[] ids);  
  90.   
  91.     /** 
  92.      * 统计查询 
  93.      * @param <T> 
  94.      * @param params 查询参数 
  95.      * @return 总记录条数 
  96.      */  
  97.     int count(Object obj);  
  98.   
  99. }  

创建通用业务层实现BaseService.java:

[java] view plain copy
  1. package com.xe.demo.service;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.List;  
  5.   
  6. import org.springframework.beans.factory.annotation.Autowired;  
  7.   
  8. import com.xe.demo.common.pojo.PageAjax;  
  9. import com.xe.demo.mapper.BaseMapper;  
  10.   
  11. /** 
  12.  * 通用业务层 
  13.  * @author 蔡泽华 
  14.  */  
  15. public class BaseService<T> {  
  16.       
  17.     @Autowired  
  18.     private BaseMapper<T> baseMapper;  
  19.   
  20.     /** 
  21.      * 通过ID查询 
  22.      * @param id 
  23.      * @return 
  24.      */  
  25.     public Object selectById(Serializable id) {  
  26.         return baseMapper.selectById(id);  
  27.     }  
  28.   
  29.     /** 
  30.      * 查询单条记录 
  31.      * @param entity 
  32.      * @return 
  33.      */  
  34.     public Object selectOne(Object obj) {  
  35.         return baseMapper.selectOne(obj);  
  36.     }  
  37.   
  38.     /** 
  39.      * 查询集合 
  40.      * @param t 
  41.      * @return 
  42.      */  
  43.     public List<?> selectList(Object obj) {  
  44.         return (List<?>) baseMapper.selectList(obj);  
  45.     }  
  46.       
  47.     /** 
  48.      * 分页查询 
  49.      * @param t 
  50.      * @param page 
  51.      * @return 
  52.      */  
  53.     public PageAjax<T> selectPage(Object obj, PageAjax<T> page){  
  54.         List<T> list = baseMapper.selectPage(obj, page);  
  55.         return new PageAjax<T>(list);  
  56.     }  
  57.   
  58.     /** 
  59.      * 通用的保存方法 
  60.      * @param <T> 
  61.      * @param entity 
  62.      */  
  63.     public void save(Object obj) {  
  64.         baseMapper.save(obj);  
  65.     }  
  66.   
  67.     /** 
  68.      * 批量保存 
  69.      * @param list 
  70.      */  
  71.     public void batchSave(List<?> list) {  
  72.         baseMapper.batchSave(list);  
  73.     }  
  74.   
  75.     /** 
  76.      * 通用的修改方法 
  77.      * @param <T> 
  78.      * @param entity 
  79.      */  
  80.     public void update(Object obj) {  
  81.         baseMapper.update(obj);  
  82.     }  
  83.   
  84.     /** 
  85.      * 删除方法 
  86.      * @param id 
  87.      */  
  88.     public int delById(Serializable id) {  
  89.         return baseMapper.delById(id);  
  90.     }  
  91.   
  92.     /** 
  93.      * 批量删除 
  94.      * @param list 
  95.      * @return 
  96.      */  
  97.     public int delList(List<?> list) {  
  98.         return baseMapper.delList(list);  
  99.     }  
  100.   
  101.     /** 
  102.      * 批量删除方法 
  103.      * @param ids 
  104.      */  
  105.     public int delArray(int[] ids) {  
  106.         return baseMapper.delArray(ids);  
  107.     }  
  108.   
  109.     /** 
  110.      * 统计查询 
  111.      * @param <T> 
  112.      * @param params 查询参数 
  113.      * @return 总记录条数 
  114.      */  
  115.     public int count(T t) {  
  116.         return baseMapper.count(t);  
  117.     }  
  118.       
  119.     /** 
  120.      * 批量更新 
  121.      * @param list 
  122.      * @return 
  123.      */  
  124.     public int batchUpdate(List<?> list){  
  125.         return baseMapper.batchUpdate(list);  
  126.     }  
  127.     /*@Autowired 
  128.     private SqlSessionTemplate sqlSessionTemplate; 
  129.      
  130.     *//** 
  131.      * 批量更新 
  132.      * @param str 
  133.      * @param obj 
  134.      * @return 
  135.      * @throws Exception 
  136.      *//* 
  137.     public int batchUpdate(String str, List<?> objs) { 
  138.         SqlSessionFactory sqlSessionFactory = sqlSessionTemplate.getSqlSessionFactory(); 
  139.         // 批量执行器 
  140.         SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); 
  141.         int succ = 0; 
  142.         try { 
  143.             if (objs != null) { 
  144.                 for (int i = 0, size = objs.size(); i < size; i++) { 
  145.                     sqlSession.update(str, objs.get(i)); 
  146.                 } 
  147.                 sqlSession.flushStatements(); 
  148.                 sqlSession.commit(); 
  149.                 sqlSession.clearCache(); 
  150.             } 
  151.         } finally { 
  152.             sqlSession.close(); 
  153.         } 
  154.         return succ; 
  155.     }*/  
  156. }  

创建数据表t_user:
  1. CREATE TABLE `t_user` (  
  2.   `id` int(3) unsigned NOT NULL AUTO_INCREMENT,  
  3.   `username` char(20) NOT NULL,  
  4.   `passwordchar(32) NOT NULL,  
  5.   `email` varchar(100) DEFAULT NULL,  
  6.   `useable` tinyint(4) NOT NULL DEFAULT '1' COMMENT '是否可用(0禁用,1可用)',  
  7.   `addtime` datetime NOT NULL COMMENT '创建时间',  
  8.   `logintime` datetime DEFAULT NULL COMMENT '登陆时间',  
  9.   `loginip` varchar(15) DEFAULT NULL COMMENT '登陆IP',  
  10.   PRIMARY KEY (`id`),  
  11.   KEY `username` (`username`) USING BTREE  
  12. ) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8;  

编写增删查改sql映射文件UserMapper.xml:

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   
  3.     "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  4. <mapper namespace="com.xe.demo.mapper.UserMapper">  
  5.     <select id="selectById" resultType="map">  
  6.         SELECT u.id, u.username, u.password, u.email, u.useable, u.addtime, u.logintime, u.loginip FROM t_user u where u.id = #{id}  
  7.     </select>  
  8.       
  9.     <select id="selectOne" resultType="user">  
  10.         SELECT u.id, u.username, u.password, u.email, u.useable, u.addtime, u.logintime, u.loginip FROM t_user u where 1 = 1  
  11.         <if test="null != id"> and u.id = #{id}</if>  
  12.         <if test="null != username"> and u.username = #{username}</if>  
  13.         <if test="null != email"> and u.email = #{email}</if>  
  14.     </select>  
  15.   
  16.     <select id="selectList" resultType="map">  
  17.         SELECT u.id, u.username, u.password, u.email, u.useable, u.addtime, u.logintime, u.loginip FROM t_user u  
  18.         <where>  
  19.             <if test="null != username and '' != username"> and u.username like CONCAT('%', #{username}, '%')</if>  
  20.             <if test="null != email and '' != email"> and u.email like CONCAT('%', #{email}, '%')</if>  
  21.         </where>  
  22.     </select>  
  23.       
  24.     <select id="selectPage" resultType="map">  
  25.         SELECT u.id, u.username, u.password, u.email, u.useable, u.addtime, u.logintime, u.loginip FROM t_user u where 1 = 1  
  26.             <if test="null != obj.username and '' != obj.username"> and u.username like CONCAT('%', #{obj.username}, '%')</if>  
  27.             <if test="null != obj.email and '' != obj.email"> and u.email = #{obj.email}</if>  
  28.         limit #{page.startRow}, #{page.pageSize}  
  29.     </select>  
  30.       
  31.     <insert id="save">  
  32.         insert into t_user(username, password, email, useable, addtime)  
  33.         values(#{username}, #{password}, #{email}, #{useable}, now())  
  34.     </insert>  
  35.       
  36.     <update id="update">  
  37.         update t_user set password = #{password}, email = #{email}, useable = #{useable} where id = #{id}  
  38.     </update>  
  39.   
  40.     <update id="batchSave">  
  41.         insert into t_user(username, password, email, useable, addtime) values  
  42.         <foreach collection="list" item="item" index="index" separator=",">  
  43.             (#{item.username}, #{item.password}, #{item.email}, #{item.useable}, now())  
  44.         </foreach>  
  45.     </update>  
  46.   
  47.     <update id="batchUpdate">  
  48.         <foreach collection="list" item="item" index="index" open="" close="" separator=";">  
  49.             update t_user set password = #{item.password}, email = #{item.email}, useable = #{item.useable} where id = #{item.id}  
  50.         </foreach>  
  51.     </update>  
  52.       
  53.     <delete id="delArray">  
  54.         delete from t_user where id in  
  55.         <foreach collection="array" item="item" open="(" separator="," close=")">  
  56.             #{item}  
  57.         </foreach>  
  58.     </delete>  
  59.       
  60.     <delete id="delList">  
  61.         delete from t_user where id in  
  62.         <foreach collection="list" item="item" open="(" separator="," close=")">  
  63.             #{item}  
  64.         </foreach>  
  65.     </delete>  
  66. </mapper>  
创建UserService继承BaseService.java;

创建UserController.java实现功能:

[java] view plain copy
  1. package com.xe.demo.controller;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.Arrays;  
  5. import java.util.HashMap;  
  6. import java.util.List;  
  7. import java.util.Map;  
  8.   
  9. import org.springframework.beans.factory.annotation.Autowired;  
  10. import org.springframework.stereotype.Controller;  
  11. import org.springframework.web.bind.annotation.RequestMapping;  
  12. import org.springframework.web.bind.annotation.ResponseBody;  
  13.   
  14. import com.xe.demo.common.pojo.AjaxResult;  
  15. import com.xe.demo.common.pojo.PageAjax;  
  16. import com.xe.demo.model.User;  
  17. import com.xe.demo.service.UserService;  
  18.   
  19. @Controller  
  20. public class UserController {  
  21.   
  22.     @Autowired  
  23.     private UserService userService;  
  24.       
  25.     @ResponseBody  
  26.     @RequestMapping("/queryById")  
  27.     public AjaxResult queryById(int id){  
  28. //      User user = userService.selectById(id);  
  29.         Object user = userService.selectById(id);  
  30.         return new AjaxResult(user);  
  31.     }  
  32.       
  33.     @ResponseBody  
  34.     @RequestMapping("/queryOne")  
  35.     public AjaxResult queryOne(User user){  
  36.         Object obj = userService.selectOne(user);  
  37.         return new AjaxResult(obj);  
  38.     }  
  39.       
  40.     @ResponseBody  
  41.     @RequestMapping("/queryList")  
  42.     public AjaxResult queryList(User user){  
  43.         List<?> list = userService.selectList(user);  
  44.         return new AjaxResult(list);  
  45.     }  
  46.       
  47.     @ResponseBody  
  48.     @RequestMapping("/queryPage")  
  49.     public PageAjax<User> queryPage(User user, PageAjax<User> page){  
  50.         return userService.selectPage(user, page);  
  51.     }  
  52.   
  53.     @ResponseBody  
  54.     @RequestMapping("/save")  
  55.     public AjaxResult save(User user){  
  56.         //保存map测试  
  57.         Map<String, Object> map = new HashMap<String, Object>();  
  58.         map.put("username", user.getUsername());  
  59.         map.put("email", user.getEmail());  
  60.         map.put("useable", user.getUseable());  
  61.         map.put("password", user.getPassword());  
  62.         userService.save(map);  
  63.         return new AjaxResult();  
  64.     }  
  65.       
  66.     @ResponseBody  
  67.     @RequestMapping("/update")  
  68.     public AjaxResult update(User user){  
  69.         //更新map测试  
  70. //      Map<String, Object> map = new HashMap<String, Object>();  
  71. //      map.put("id", user.getId());  
  72. //      map.put("email", user.getEmail());  
  73. //      map.put("useable", user.getUseable());  
  74. //      map.put("password", user.getPassword());  
  75.         userService.update(user);  
  76.         return new AjaxResult();  
  77.     }  
  78.       
  79.     @ResponseBody  
  80.     @RequestMapping("/batchSave")  
  81.     public AjaxResult batchSave(){  
  82. //      List<User> list = new ArrayList<User>();  
  83. //      User user = null;  
  84. //      for(int i = 0; i < 10; i ++){  
  85. //          user = new User();  
  86. //          String username = "ourte" + i;  
  87. //          user.setUsername(username);  
  88. //          user.setPassword("123456");  
  89. //          user.setUseable(1);  
  90. //          user.setEmail(username + "@163.com");  
  91. //          list.add(user);  
  92. //      }  
  93.   
  94.         //map批量保存  
  95.         List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();  
  96.         Map<String, Object> map = null;  
  97.         for(int i = 0; i < 10; i ++){  
  98.             map = new HashMap<String, Object>();  
  99.             String username = "csefgg" + i;  
  100.             map.put("username", username);  
  101.             map.put("email", username + "@163.com");  
  102.             map.put("useable"1);  
  103.             map.put("password""658264");  
  104.             list.add(map);  
  105.         }  
  106.         userService.batchSave(list);  
  107.         return new AjaxResult();  
  108.     }  
  109.       
  110.     @ResponseBody  
  111.     @RequestMapping("/batchUpdate")  
  112.     public AjaxResult batchUpdate(){  
  113.         Integer[] ids = new Integer[]{303132};  
  114.   
  115. //      List<User> list = new ArrayList<User>();  
  116. //      User user = null;  
  117. //      for(int id: ids){  
  118. //          user = new User();  
  119. //          user.setId(id);  
  120. //          user.setPassword("654321");  
  121. //          user.setUseable(0);  
  122. //          user.setEmail("[email protected]");  
  123. //          list.add(user);  
  124. //      }  
  125.           
  126.         //map批量更新  
  127.         List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();  
  128.         Map<String, Object> map = null;  
  129.         for(int id: ids){  
  130.             map = new HashMap<String, Object>();  
  131.             map.put("id", id);  
  132.             map.put("email""[email protected]");  
  133.             map.put("useable"1);  
  134.             map.put("password""565656");  
  135.             list.add(map);  
  136.         }  
  137.         userService.batchUpdate(list);  
  138.         return new AjaxResult();  
  139.     }  
  140.   
  141.     @ResponseBody  
  142.     @RequestMapping("/delList")  
  143.     public AjaxResult delList(Integer[] ids){  
  144.         List<Integer> list = Arrays.asList(ids);  
  145.         userService.delList(list);  
  146.         return new AjaxResult();  
  147.     }  
  148.       
  149.     @ResponseBody  
  150.     @RequestMapping("/delArray")  
  151.     public AjaxResult delArray(int[] ids){  
  152.         userService.delArray(ids);  
  153.         return new AjaxResult();  
  154.     }  
  155.   
  156. }  

部署启动项目,使用http请求模拟器请求接口测试:

1.通过ID查询:
整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

2.通过条件查询返回实体集合

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

3.通过条件查询返回Map集合

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

4.多条件分页查询实体

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

5.多条件分页查询map

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

6.批量保存数据

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

7.批量更新数据

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

8.评论删除(mybatis接收List<Integer>参数)

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

9.批量删除(mybatis接收int[]参数)

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

10.添加数据

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

11.更新数据

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架


项目源码下载地址:整合maven+spring+springmvc+mybatis实现ssm通用增删查改API(没BUG版本)

整合maven+spring+springmvc+mybatis实现ssm基础开发框架,封装通用增删查改api,提高程序开发效率

myeclipse创建maven项目:

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

把maven项目转成maven web项目:项目右键Properties

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

把WebRoot里面的东西移到src/main/webapp下面

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

打开pom.xml,加入如下,否则报错

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

项目缺少web.xml文件,在src/main/webapp/WEB-INF下加入web.xml文件即可

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

pom.xml管理ssm相关jar包

[html] view plain copy
  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/xsd/maven-4.0.0.xsd">  
  3.     <modelVersion>4.0.0</modelVersion>  
  4.     <groupId>com.xe.demo</groupId>  
  5.     <artifactId>demo-ssm</artifactId>  
  6.     <version>0.0.1-SNAPSHOT</version>  
  7.     <packaging>war</packaging>  
  8.     <properties>  
  9.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
  10.         <jdk.version>1.8</jdk.version>  
  11.         <spring.version>4.2.5.RELEASE</spring.version>  
  12.         <mybatis.version>3.3.1</mybatis.version>  
  13.         <mybatis.spring.version>1.2.4</mybatis.spring.version>  
  14.         <mysql.version>5.1.29</mysql.version>  
  15.         <fastjson.version>1.2.4</fastjson.version>  
  16.         <druid.version>1.0.13</druid.version>  
  17.     </properties>  
  18.     <dependencies>  
  19.         <!--web -->  
  20.         <dependency>  
  21.             <groupId>javax.servlet</groupId>  
  22.             <artifactId>javax.servlet-api</artifactId>  
  23.             <version>3.1.0</version>  
  24.         </dependency>  
  25.   
  26.         <!-- spring -->  
  27.         <dependency>  
  28.             <groupId>org.springframework</groupId>  
  29.             <artifactId>spring-context</artifactId>  
  30.         </dependency>  
  31.         <dependency>  
  32.             <groupId>org.springframework</groupId>  
  33.             <artifactId>spring-orm</artifactId>  
  34.         </dependency>  
  35.         <dependency>  
  36.             <groupId>org.springframework</groupId>  
  37.             <artifactId>spring-oxm</artifactId>  
  38.         </dependency>  
  39.         <dependency>  
  40.             <groupId>org.springframework</groupId>  
  41.             <artifactId>spring-jdbc</artifactId>  
  42.         </dependency>  
  43.         <dependency>  
  44.             <groupId>org.springframework</groupId>  
  45.             <artifactId>spring-tx</artifactId>  
  46.         </dependency>  
  47.         <dependency>  
  48.             <groupId>org.springframework</groupId>  
  49.             <artifactId>spring-web</artifactId>  
  50.         </dependency>  
  51.         <dependency>  
  52.             <groupId>org.springframework</groupId>  
  53.             <artifactId>spring-webmvc</artifactId>  
  54.         </dependency>  
  55.         <dependency>  
  56.             <groupId>org.springframework</groupId>  
  57.             <artifactId>spring-aop</artifactId>  
  58.         </dependency>  
  59.   
  60.         <!--spring-aop依赖 -->  
  61.         <dependency>  
  62.             <groupId>org.aspectj</groupId>  
  63.             <artifactId>aspectjweaver</artifactId>  
  64.             <version>1.8.2</version>  
  65.         </dependency>  
  66.         <!--spring-json依赖 -->  
  67.         <dependency>  
  68.             <groupId>com.fasterxml.jackson.core</groupId>  
  69.             <artifactId>jackson-databind</artifactId>  
  70.             <version>2.4.6</version>  
  71.         </dependency>  
  72.   
  73.         <!--Mybatis -->  
  74.         <dependency>  
  75.             <groupId>org.mybatis</groupId>  
  76.             <artifactId>mybatis</artifactId>  
  77.             <version>${mybatis.version}</version>  
  78.         </dependency>  
  79.         <dependency>  
  80.             <groupId>org.mybatis</groupId>  
  81.             <artifactId>mybatis-spring</artifactId>  
  82.             <version>${mybatis.spring.version}</version>  
  83.         </dependency>  
  84.         <!--分页插件 -->  
  85.         <dependency>  
  86.             <groupId>com.github.pagehelper</groupId>  
  87.             <artifactId>pagehelper</artifactId>  
  88.             <version>4.1.6</version>  
  89.         </dependency>  
  90.   
  91.         <!--mysql -->  
  92.         <dependency>  
  93.             <groupId>mysql</groupId>  
  94.             <artifactId>mysql-connector-java</artifactId>  
  95.             <version>${mysql.version}</version>  
  96.         </dependency>  
  97.   
  98.         <!--druid -->  
  99.         <dependency>  
  100.             <groupId>com.alibaba</groupId>  
  101.             <artifactId>fastjson</artifactId>  
  102.             <version>${fastjson.version}</version>  
  103.         </dependency>  
  104.         <dependency>  
  105.             <groupId>com.alibaba</groupId>  
  106.             <artifactId>druid</artifactId>  
  107.             <version>${druid.version}</version>  
  108.         </dependency>  
  109.   
  110.         <!-- commons -->  
  111.         <dependency>  
  112.             <groupId>commons-fileupload</groupId>  
  113.             <artifactId>commons-fileupload</artifactId>  
  114.             <version>1.3</version>  
  115.         </dependency>  
  116.         <dependency>  
  117.             <groupId>commons-collections</groupId>  
  118.             <artifactId>commons-collections</artifactId>  
  119.             <version>3.2.2</version>  
  120.         </dependency>  
  121.         <dependency>  
  122.             <groupId>org.apache.commons</groupId>  
  123.             <artifactId>commons-lang3</artifactId>  
  124.             <version>3.1</version>  
  125.         </dependency>  
  126.   
  127.         <dependency>  
  128.             <groupId>log4j</groupId>  
  129.             <artifactId>log4j</artifactId>  
  130.             <version>1.2.17</version>  
  131.         </dependency>  
  132.     </dependencies>  
  133.     <dependencyManagement>  
  134.         <dependencies>  
  135.             <dependency>  
  136.                 <groupId>org.springframework</groupId>  
  137.                 <artifactId>spring-framework-bom</artifactId>  
  138.                 <version>${spring.version}</version>  
  139.                 <type>pom</type>  
  140.                 <scope>import</scope>  
  141.             </dependency>  
  142.         </dependencies>  
  143.     </dependencyManagement>  
  144.     <build>  
  145.         <plugins>  
  146.             <plugin>  
  147.                 <artifactId>maven-compiler-plugin</artifactId>  
  148.                 <configuration>  
  149.                     <source>1.8</source>  
  150.                     <target>1.8</target>  
  151.                 </configuration>  
  152.             </plugin>  
  153.             <!-- 打成war包 -->  
  154.             <plugin>  
  155.                 <groupId>org.apache.maven.plugins</groupId>  
  156.                 <artifactId>maven-war-plugin</artifactId>  
  157.                 <configuration>  
  158.                     <warName>ssm</warName>  
  159.                 </configuration>  
  160.             </plugin>  
  161.         </plugins>  
  162.     </build>  
  163. </project>  

删除WebRoot目录,右键更新项目

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

创建项目包结构

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架


到此项目基础结构创建完成


==================================================整合ssm==================================================

配置mybatis-config.xml:

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD SQL Map Config 3.0//EN"  
  3.         "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  4. <configuration>  
  5.     <settings>  
  6.         <!-- mybatis支持log4j日志 -->  
  7.         <setting name="logImpl" value="LOG4J"/>  
  8.         <!-- 开启缓存 -->  
  9.         <setting name="cacheEnabled" value="true" />  
  10.         <!-- 开启全局懒加载 -->  
  11.         <setting name="lazyLoadingEnabled" value="true" />  
  12.         <!-- 当设置为‘true’的时候,懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载 -->  
  13.         <setting name="aggressiveLazyLoading" value="false" />  
  14.         <!-- 允许单一语句返回多结果集 -->  
  15.         <setting name="multipleResultSetsEnabled" value="true" />  
  16.         <!-- 使用列标签代替列名 -->  
  17.         <setting name="useColumnLabel" value="true" />  
  18.         <!-- 允许 JDBC 支持生成的键 -->  
  19.         <setting name="useGeneratedKeys" value="true" />  
  20.         <!-- 指定 MyBatis 如何自动映射列到字段/ 属性 -->  
  21.         <setting name="autoMappingBehavior" value="FULL" />  
  22.         <!-- 配置默认的执行器 -->  
  23.         <setting name="defaultExecutorType" value="REUSE" />  
  24.         <!-- 设置超时时间 -->  
  25.         <setting name="defaultStatementTimeout" value="25000" />  
  26.     </settings>  
  27.   
  28.     <plugins>  
  29.         <!-- 分页插件 -->  
  30.         <plugin interceptor="com.github.pagehelper.PageHelper"/>  
  31.     </plugins>  
  32. </configuration>  

配置spring-mybatis.xml:

[html] view plain copy
  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:tx="http://www.springframework.org/schema/tx"  
  4.     xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"  
  5.     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc"  
  6.     xmlns:task="http://www.springframework.org/schema/task"  
  7.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  8.     http://www.springframework.org/schema/beans/spring-beans-4.2.xsd  
  9.     http://www.springframework.org/schema/tx  
  10.     http://www.springframework.org/schema/tx/spring-tx-4.2.xsd  
  11.     http://www.springframework.org/schema/context  
  12.     http://www.springframework.org/schema/context/spring-context-4.2.xsd  
  13.     http://www.springframework.org/schema/aop  
  14.     http://www.springframework.org/schema/aop/spring-aop-4.2.xsd  
  15.     http://www.springframework.org/schema/cache  
  16.     http://www.springframework.org/schema/cache/spring-cache-4.2.xsd  
  17.     http://www.springframework.org/schema/mvc  
  18.     http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd">  
  19.   
  20.     <mvc:annotation-driven />  
  21.     <!-- 启动组件扫描,排除@Controller组件,该组件由SpringMVC配置文件扫描 -->  
  22.     <context:component-scan base-package="com.xe.demo">  
  23.         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />  
  24.     </context:component-scan>  
  25.   
  26.     <!-- mysql数据源 -->  
  27.     <bean id="mysqlDataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">  
  28.         <property name="driverClassName" value="${mysql.driver}" />  
  29.         <property name="url" value="${mysql.url}" />  
  30.         <property name="username" value="${mysql.username}" />  
  31.         <property name="password" value="${mysql.password}" />  
  32.         <property name="defaultAutoCommit" value="false" />  
  33.         <property name="maxActive" value="20" />  
  34.         <property name="initialSize" value="1" />  
  35.         <property name="maxWait" value="60000" />  
  36.         <property name="minIdle" value="1" />  
  37.         <property name="timeBetweenEvictionRunsMillis" value="60000" />  
  38.         <property name="minEvictableIdleTimeMillis" value="300000" />  
  39.         <property name="validationQuery" value="SELECT 'x'" />  
  40.         <property name="testWhileIdle" value="true" />  
  41.         <property name="testOnBorrow" value="false" />  
  42.         <property name="testOnReturn" value="false" />  
  43.         <property name="poolPreparedStatements" value="true" />  
  44.         <property name="maxPoolPreparedStatementPerConnectionSize" value="50" />  
  45.     </bean>  
  46.   
  47.     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
  48.         <property name="dataSource" ref="mysqlDataSource" />  
  49.         <property name="typeAliasesPackage" value="com.xe.demo.model" />  
  50.         <property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />  
  51.         <property name="mapperLocations" value="classpath:mybatis/*/*.xml"></property>  
  52.     </bean>  
  53.   
  54.     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
  55.         <property name="basePackage" value="com.xe.demo.mapper" />  
  56.         <property name="markerInterface" value="com.xe.demo.mapper.BaseMapper" />  
  57.         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />  
  58.     </bean>  
  59.   
  60.     <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">  
  61.         <constructor-arg ref="sqlSessionFactory" />  
  62.     </bean>  
  63.   
  64.     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  65.         <property name="dataSource" ref="mysqlDataSource" />  
  66.     </bean>  
  67.       
  68.     <!-- 启动对@AspectJ注解的支持 -->  
  69.     <aop:aspectj-autoproxy proxy-target-class="true" />  
  70.   
  71.     <!-- 配置事务切面Bean,指定事务管理器 -->  
  72.     <tx:advice id="txAdvice" transaction-manager="transactionManager">  
  73.         <tx:attributes>  
  74.             <tx:method name="delete*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" />  
  75.             <tx:method name="update*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" />  
  76.             <tx:method name="save*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" />  
  77.             <tx:method name="batch*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" />  
  78.         </tx:attributes>  
  79.     </tx:advice>  
  80.     <!-- Service aop -->  
  81.     <aop:config>  
  82.         <aop:pointcut id="pc" expression="execution(* com.xe.demo.service.*Service.*(..))" />  
  83.         <aop:advisor pointcut-ref="pc" advice-ref="txAdvice" />  
  84.     </aop:config>  
  85. </beans>  
spring管理配置文件spring.xml:

[html] view plain copy
  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:tx="http://www.springframework.org/schema/tx"  
  4.     xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"  
  5.     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc"  
  6.     xmlns:task="http://www.springframework.org/schema/task"  
  7.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  8.     http://www.springframework.org/schema/beans/spring-beans-4.2.xsd  
  9.     http://www.springframework.org/schema/tx  
  10.     http://www.springframework.org/schema/tx/spring-tx-4.2.xsd  
  11.     http://www.springframework.org/schema/context  
  12.     http://www.springframework.org/schema/context/spring-context-4.2.xsd  
  13.     http://www.springframework.org/schema/aop  
  14.     http://www.springframework.org/schema/aop/spring-aop-4.2.xsd  
  15.     http://www.springframework.org/schema/cache  
  16.     http://www.springframework.org/schema/cache/spring-cache-4.2.xsd  
  17.     http://www.springframework.org/schema/mvc  
  18.     http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd">  
  19.   
  20.     <!-- 读取配置文件 -->  
  21.     <context:property-placeholder location="classpath*:config.properties" ignore-unresolvable="false" />  
  22.       
  23.     <import resource="classpath:spring/spring-mybatis.xml"/>  
  24. </beans>  

配置spring-mvc.xml:

[html] view plain copy
  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:mvc="http://www.springframework.org/schema/mvc"  
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
  6.         http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd    
  7.         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">  
  8.   
  9.     <mvc:annotation-driven />  
  10.     <context:component-scan base-package="com.xe.demo.controller" />  
  11.     <!-- 对静态资源文件的访问 -->  
  12.     <mvc:resources mapping="/assets/**" location="/assets/" />  
  13.   
  14.     <!-- 配置SpringMVC的视图解析器 -->  
  15.     <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  16.         <property name="prefix" value="" />  
  17.         <property name="suffix" value=".jsp" />  
  18.     </bean>  
  19.   
  20.     <!-- 上传配置 -->  
  21.     <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
  22.         <property name="defaultEncoding" value="UTF-8" />  
  23.         <property name="maxUploadSize" value="-1" />  
  24.         <property name="maxInMemorySize" value="40960" />  
  25.     </bean>  
  26. </beans>  

创建全局配置文件config.properties:

[plain] view plain copy
  1. ########################### 数据源配置 ###########################  
  2. #########本地数据库#########  
  3. #数据源驱动  
  4. mysql.driver=com.mysql.jdbc.Driver  
  5. mysql.username=root  
  6. mysql.password=xie8845233  
  7. mysql.url=jdbc:mysql://localhost/demo?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true  

加载log4j.properties日志文件:

[plain] view plain copy
  1. log4j.rootLogger=DEBUG,CONSOLE,ERR_LOG  
  2. log4j.addivity.org.apache=false  
  3. #打印到控制台  
  4. log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender  
  5. log4j.appender.CONSOLE.Target=System.out  
  6. log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout  
  7. log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} -%-4r [%t] %-5p  %x - %m%n  
  8. #输入日志到文件  
  9. log4j.appender.ERR_LOG=org.apache.log4j.DailyRollingFileAppender  
  10. log4j.appender.ERR_LOG.Threshold=ERROR  
  11. log4j.appender.ERR_LOG.File=${catalina.home}/logs/demo  
  12. log4j.appender.ERR_LOG.DatePattern='_'yyyyMMdd'.log'  
  13. log4j.appender.ERR_LOG.Encoding=utf-8  
  14. log4j.appender.ERR_LOG.layout=org.apache.log4j.PatternLayout  
  15. log4j.appender.ERR_LOG.layout.ConversionPattern=[m6]  %d{yyyy-MM-dd HH\:mm\:ss} %5p %c{1}\:%L \: %m%n  
  16.   
  17. log4j.logger.org.apache=ERROR  
  18. log4j.logger.org.mybatis=ERROR  
  19. log4j.logger.org.springframework=ERROR  

配置web.xml:

[html] view plain copy
  1. <!DOCTYPE web-app PUBLIC  
  2.  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"  
  3.  "http://java.sun.com/dtd/web-app_2_3.dtd" >  
  4.   
  5. <web-app>  
  6.     <display-name>demo-bstable</display-name>  
  7.     <welcome-file-list>  
  8.         <welcome-file>index.jsp</welcome-file>  
  9.     </welcome-file-list>  
  10.   
  11.     <context-param>  
  12.         <param-name>contextConfigLocation</param-name>  
  13.         <param-value>classpath:spring/spring.xml</param-value>  
  14.     </context-param>  
  15.     <context-param>  
  16.         <param-name>log4jConfigLocation</param-name>  
  17.         <param-value>classpath:log4j.properties</param-value>  
  18.     </context-param>  
  19.   
  20.     <listener>  
  21.         <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>  
  22.     </listener>  
  23.     <!-- 启动加载spring容器 -->  
  24.     <listener>  
  25.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  26.     </listener>  
  27.   
  28.     <servlet>  
  29.         <servlet-name>demoServlet</servlet-name>  
  30.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  31.         <init-param>  
  32.             <param-name>contextConfigLocation</param-name>  
  33.             <param-value>classpath:spring/spring-mvc.xml</param-value>  
  34.         </init-param>  
  35.         <load-on-startup>1</load-on-startup>  
  36.     </servlet>  
  37.     <servlet-mapping>  
  38.         <servlet-name>demoServlet</servlet-name>  
  39.         <url-pattern>/</url-pattern>  
  40.     </servlet-mapping>  
  41.     <servlet-mapping>  
  42.         <servlet-name>default</servlet-name>  
  43.         <url-pattern>*.html</url-pattern>  
  44.     </servlet-mapping>  
  45.       
  46.     <!-- 编码过滤器 -->  
  47.     <filter>  
  48.         <filter-name>encodingFilter</filter-name>  
  49.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  50.         <init-param>  
  51.             <param-name>encoding</param-name>  
  52.             <param-value>UTF-8</param-value>  
  53.         </init-param>  
  54.         <init-param>  
  55.             <param-name>forceEncoding</param-name>  
  56.             <param-value>true</param-value>  
  57.         </init-param>  
  58.     </filter>  
  59.     <filter-mapping>  
  60.         <filter-name>encodingFilter</filter-name>  
  61.         <url-pattern>/*</url-pattern>  
  62.     </filter-mapping>  
  63. </web-app>  

创建通用mapper接口BaseMapper.java:
[java] view plain copy
  1. package com.xe.demo.mapper;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.List;  
  5.   
  6. import org.apache.ibatis.annotations.Param;  
  7.   
  8. import com.xe.demo.common.pojo.PageAjax;  
  9.   
  10. /** 
  11.  * Mybatis基础DAO 
  12.  * @author 蔡泽华 
  13.  */  
  14. public interface BaseMapper<T> {  
  15.   
  16.     /** 
  17.      * 通过ID查询 
  18.      * @param id 
  19.      * @return 
  20.      */  
  21.     Object selectById(Serializable id);  
  22.       
  23.     /** 
  24.      * 查询单条记录 
  25.      * @param entity 
  26.      * @return 
  27.      */  
  28.     Object selectOne(@Param("item")Object obj);  
  29.   
  30.     /** 
  31.      * 查询记录集合 
  32.      * @param entity 
  33.      * @return 
  34.      */  
  35.     List<?> selectList(@Param("item")Object obj);  
  36.       
  37.     /** 
  38.      * 分页查询 
  39.      * @param t 
  40.      * @param page 
  41.      * @return 
  42.      */  
  43.     List<T> selectPage(@Param("item")Object obj, @Param("page")PageAjax<T> page);  
  44.   
  45.     /** 
  46.      * 通用的保存方法 
  47.      * @param <T> 
  48.      * @param entity 
  49.      */  
  50.     void save(@Param("item")Object obj);  
  51.       
  52.     /** 
  53.      * 批量保存 
  54.      * @param list 
  55.      */  
  56.     int batchSave(List<?> list);  
  57.   
  58.     /** 
  59.      * 通用的修改方法 
  60.      * @param <T> 
  61.      * @param entity 
  62.      */  
  63.     int update(@Param("item")Object obj);  
  64.       
  65.     /** 
  66.      * 批量更新 
  67.      * @param list 
  68.      * @return 
  69.      */  
  70.     int batchUpdate(List<?> list);  
  71.   
  72.     /** 
  73.      * 删除方法 
  74.      * @param id 
  75.      */  
  76.     int delById(Serializable id);  
  77.       
  78.     /** 
  79.      * 批量删除 
  80.      * @param list 
  81.      * @return 
  82.      */  
  83.     int delList(List<?> list);  
  84.   
  85.     /** 
  86.      * 批量删除方法 
  87.      * @param ids 
  88.      */  
  89.     int delArray(int[] ids);  
  90.   
  91.     /** 
  92.      * 统计查询 
  93.      * @param <T> 
  94.      * @param params 查询参数 
  95.      * @return 总记录条数 
  96.      */  
  97.     int count(Object obj);  
  98.   
  99. }  

创建通用业务层实现BaseService.java:

[java] view plain copy
  1. package com.xe.demo.service;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.List;  
  5.   
  6. import org.springframework.beans.factory.annotation.Autowired;  
  7.   
  8. import com.xe.demo.common.pojo.PageAjax;  
  9. import com.xe.demo.mapper.BaseMapper;  
  10.   
  11. /** 
  12.  * 通用业务层 
  13.  * @author 蔡泽华 
  14.  */  
  15. public class BaseService<T> {  
  16.       
  17.     @Autowired  
  18.     private BaseMapper<T> baseMapper;  
  19.   
  20.     /** 
  21.      * 通过ID查询 
  22.      * @param id 
  23.      * @return 
  24.      */  
  25.     public Object selectById(Serializable id) {  
  26.         return baseMapper.selectById(id);  
  27.     }  
  28.   
  29.     /** 
  30.      * 查询单条记录 
  31.      * @param entity 
  32.      * @return 
  33.      */  
  34.     public Object selectOne(Object obj) {  
  35.         return baseMapper.selectOne(obj);  
  36.     }  
  37.   
  38.     /** 
  39.      * 查询集合 
  40.      * @param t 
  41.      * @return 
  42.      */  
  43.     public List<?> selectList(Object obj) {  
  44.         return (List<?>) baseMapper.selectList(obj);  
  45.     }  
  46.       
  47.     /** 
  48.      * 分页查询 
  49.      * @param t 
  50.      * @param page 
  51.      * @return 
  52.      */  
  53.     public PageAjax<T> selectPage(Object obj, PageAjax<T> page){  
  54.         List<T> list = baseMapper.selectPage(obj, page);  
  55.         return new PageAjax<T>(list);  
  56.     }  
  57.   
  58.     /** 
  59.      * 通用的保存方法 
  60.      * @param <T> 
  61.      * @param entity 
  62.      */  
  63.     public void save(Object obj) {  
  64.         baseMapper.save(obj);  
  65.     }  
  66.   
  67.     /** 
  68.      * 批量保存 
  69.      * @param list 
  70.      */  
  71.     public void batchSave(List<?> list) {  
  72.         baseMapper.batchSave(list);  
  73.     }  
  74.   
  75.     /** 
  76.      * 通用的修改方法 
  77.      * @param <T> 
  78.      * @param entity 
  79.      */  
  80.     public void update(Object obj) {  
  81.         baseMapper.update(obj);  
  82.     }  
  83.   
  84.     /** 
  85.      * 删除方法 
  86.      * @param id 
  87.      */  
  88.     public int delById(Serializable id) {  
  89.         return baseMapper.delById(id);  
  90.     }  
  91.   
  92.     /** 
  93.      * 批量删除 
  94.      * @param list 
  95.      * @return 
  96.      */  
  97.     public int delList(List<?> list) {  
  98.         return baseMapper.delList(list);  
  99.     }  
  100.   
  101.     /** 
  102.      * 批量删除方法 
  103.      * @param ids 
  104.      */  
  105.     public int delArray(int[] ids) {  
  106.         return baseMapper.delArray(ids);  
  107.     }  
  108.   
  109.     /** 
  110.      * 统计查询 
  111.      * @param <T> 
  112.      * @param params 查询参数 
  113.      * @return 总记录条数 
  114.      */  
  115.     public int count(T t) {  
  116.         return baseMapper.count(t);  
  117.     }  
  118.       
  119.     /** 
  120.      * 批量更新 
  121.      * @param list 
  122.      * @return 
  123.      */  
  124.     public int batchUpdate(List<?> list){  
  125.         return baseMapper.batchUpdate(list);  
  126.     }  
  127.     /*@Autowired 
  128.     private SqlSessionTemplate sqlSessionTemplate; 
  129.      
  130.     *//** 
  131.      * 批量更新 
  132.      * @param str 
  133.      * @param obj 
  134.      * @return 
  135.      * @throws Exception 
  136.      *//* 
  137.     public int batchUpdate(String str, List<?> objs) { 
  138.         SqlSessionFactory sqlSessionFactory = sqlSessionTemplate.getSqlSessionFactory(); 
  139.         // 批量执行器 
  140.         SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); 
  141.         int succ = 0; 
  142.         try { 
  143.             if (objs != null) { 
  144.                 for (int i = 0, size = objs.size(); i < size; i++) { 
  145.                     sqlSession.update(str, objs.get(i)); 
  146.                 } 
  147.                 sqlSession.flushStatements(); 
  148.                 sqlSession.commit(); 
  149.                 sqlSession.clearCache(); 
  150.             } 
  151.         } finally { 
  152.             sqlSession.close(); 
  153.         } 
  154.         return succ; 
  155.     }*/  
  156. }  

创建数据表t_user:
  1. CREATE TABLE `t_user` (  
  2.   `id` int(3) unsigned NOT NULL AUTO_INCREMENT,  
  3.   `username` char(20) NOT NULL,  
  4.   `passwordchar(32) NOT NULL,  
  5.   `email` varchar(100) DEFAULT NULL,  
  6.   `useable` tinyint(4) NOT NULL DEFAULT '1' COMMENT '是否可用(0禁用,1可用)',  
  7.   `addtime` datetime NOT NULL COMMENT '创建时间',  
  8.   `logintime` datetime DEFAULT NULL COMMENT '登陆时间',  
  9.   `loginip` varchar(15) DEFAULT NULL COMMENT '登陆IP',  
  10.   PRIMARY KEY (`id`),  
  11.   KEY `username` (`username`) USING BTREE  
  12. ) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8;  

编写增删查改sql映射文件UserMapper.xml:

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   
  3.     "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  4. <mapper namespace="com.xe.demo.mapper.UserMapper">  
  5.     <select id="selectById" resultType="map">  
  6.         SELECT u.id, u.username, u.password, u.email, u.useable, u.addtime, u.logintime, u.loginip FROM t_user u where u.id = #{id}  
  7.     </select>  
  8.       
  9.     <select id="selectOne" resultType="user">  
  10.         SELECT u.id, u.username, u.password, u.email, u.useable, u.addtime, u.logintime, u.loginip FROM t_user u where 1 = 1  
  11.         <if test="null != id"> and u.id = #{id}</if>  
  12.         <if test="null != username"> and u.username = #{username}</if>  
  13.         <if test="null != email"> and u.email = #{email}</if>  
  14.     </select>  
  15.   
  16.     <select id="selectList" resultType="map">  
  17.         SELECT u.id, u.username, u.password, u.email, u.useable, u.addtime, u.logintime, u.loginip FROM t_user u  
  18.         <where>  
  19.             <if test="null != username and '' != username"> and u.username like CONCAT('%', #{username}, '%')</if>  
  20.             <if test="null != email and '' != email"> and u.email like CONCAT('%', #{email}, '%')</if>  
  21.         </where>  
  22.     </select>  
  23.       
  24.     <select id="selectPage" resultType="map">  
  25.         SELECT u.id, u.username, u.password, u.email, u.useable, u.addtime, u.logintime, u.loginip FROM t_user u where 1 = 1  
  26.             <if test="null != obj.username and '' != obj.username"> and u.username like CONCAT('%', #{obj.username}, '%')</if>  
  27.             <if test="null != obj.email and '' != obj.email"> and u.email = #{obj.email}</if>  
  28.         limit #{page.startRow}, #{page.pageSize}  
  29.     </select>  
  30.       
  31.     <insert id="save">  
  32.         insert into t_user(username, password, email, useable, addtime)  
  33.         values(#{username}, #{password}, #{email}, #{useable}, now())  
  34.     </insert>  
  35.       
  36.     <update id="update">  
  37.         update t_user set password = #{password}, email = #{email}, useable = #{useable} where id = #{id}  
  38.     </update>  
  39.   
  40.     <update id="batchSave">  
  41.         insert into t_user(username, password, email, useable, addtime) values  
  42.         <foreach collection="list" item="item" index="index" separator=",">  
  43.             (#{item.username}, #{item.password}, #{item.email}, #{item.useable}, now())  
  44.         </foreach>  
  45.     </update>  
  46.   
  47.     <update id="batchUpdate">  
  48.         <foreach collection="list" item="item" index="index" open="" close="" separator=";">  
  49.             update t_user set password = #{item.password}, email = #{item.email}, useable = #{item.useable} where id = #{item.id}  
  50.         </foreach>  
  51.     </update>  
  52.       
  53.     <delete id="delArray">  
  54.         delete from t_user where id in  
  55.         <foreach collection="array" item="item" open="(" separator="," close=")">  
  56.             #{item}  
  57.         </foreach>  
  58.     </delete>  
  59.       
  60.     <delete id="delList">  
  61.         delete from t_user where id in  
  62.         <foreach collection="list" item="item" open="(" separator="," close=")">  
  63.             #{item}  
  64.         </foreach>  
  65.     </delete>  
  66. </mapper>  
创建UserService继承BaseService.java;

创建UserController.java实现功能:

[java] view plain copy
  1. package com.xe.demo.controller;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.Arrays;  
  5. import java.util.HashMap;  
  6. import java.util.List;  
  7. import java.util.Map;  
  8.   
  9. import org.springframework.beans.factory.annotation.Autowired;  
  10. import org.springframework.stereotype.Controller;  
  11. import org.springframework.web.bind.annotation.RequestMapping;  
  12. import org.springframework.web.bind.annotation.ResponseBody;  
  13.   
  14. import com.xe.demo.common.pojo.AjaxResult;  
  15. import com.xe.demo.common.pojo.PageAjax;  
  16. import com.xe.demo.model.User;  
  17. import com.xe.demo.service.UserService;  
  18.   
  19. @Controller  
  20. public class UserController {  
  21.   
  22.     @Autowired  
  23.     private UserService userService;  
  24.       
  25.     @ResponseBody  
  26.     @RequestMapping("/queryById")  
  27.     public AjaxResult queryById(int id){  
  28. //      User user = userService.selectById(id);  
  29.         Object user = userService.selectById(id);  
  30.         return new AjaxResult(user);  
  31.     }  
  32.       
  33.     @ResponseBody  
  34.     @RequestMapping("/queryOne")  
  35.     public AjaxResult queryOne(User user){  
  36.         Object obj = userService.selectOne(user);  
  37.         return new AjaxResult(obj);  
  38.     }  
  39.       
  40.     @ResponseBody  
  41.     @RequestMapping("/queryList")  
  42.     public AjaxResult queryList(User user){  
  43.         List<?> list = userService.selectList(user);  
  44.         return new AjaxResult(list);  
  45.     }  
  46.       
  47.     @ResponseBody  
  48.     @RequestMapping("/queryPage")  
  49.     public PageAjax<User> queryPage(User user, PageAjax<User> page){  
  50.         return userService.selectPage(user, page);  
  51.     }  
  52.   
  53.     @ResponseBody  
  54.     @RequestMapping("/save")  
  55.     public AjaxResult save(User user){  
  56.         //保存map测试  
  57.         Map<String, Object> map = new HashMap<String, Object>();  
  58.         map.put("username", user.getUsername());  
  59.         map.put("email", user.getEmail());  
  60.         map.put("useable", user.getUseable());  
  61.         map.put("password", user.getPassword());  
  62.         userService.save(map);  
  63.         return new AjaxResult();  
  64.     }  
  65.       
  66.     @ResponseBody  
  67.     @RequestMapping("/update")  
  68.     public AjaxResult update(User user){  
  69.         //更新map测试  
  70. //      Map<String, Object> map = new HashMap<String, Object>();  
  71. //      map.put("id", user.getId());  
  72. //      map.put("email", user.getEmail());  
  73. //      map.put("useable", user.getUseable());  
  74. //      map.put("password", user.getPassword());  
  75.         userService.update(user);  
  76.         return new AjaxResult();  
  77.     }  
  78.       
  79.     @ResponseBody  
  80.     @RequestMapping("/batchSave")  
  81.     public AjaxResult batchSave(){  
  82. //      List<User> list = new ArrayList<User>();  
  83. //      User user = null;  
  84. //      for(int i = 0; i < 10; i ++){  
  85. //          user = new User();  
  86. //          String username = "ourte" + i;  
  87. //          user.setUsername(username);  
  88. //          user.setPassword("123456");  
  89. //          user.setUseable(1);  
  90. //          user.setEmail(username + "@163.com");  
  91. //          list.add(user);  
  92. //      }  
  93.   
  94.         //map批量保存  
  95.         List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();  
  96.         Map<String, Object> map = null;  
  97.         for(int i = 0; i < 10; i ++){  
  98.             map = new HashMap<String, Object>();  
  99.             String username = "csefgg" + i;  
  100.             map.put("username", username);  
  101.             map.put("email", username + "@163.com");  
  102.             map.put("useable"1);  
  103.             map.put("password""658264");  
  104.             list.add(map);  
  105.         }  
  106.         userService.batchSave(list);  
  107.         return new AjaxResult();  
  108.     }  
  109.       
  110.     @ResponseBody  
  111.     @RequestMapping("/batchUpdate")  
  112.     public AjaxResult batchUpdate(){  
  113.         Integer[] ids = new Integer[]{303132};  
  114.   
  115. //      List<User> list = new ArrayList<User>();  
  116. //      User user = null;  
  117. //      for(int id: ids){  
  118. //          user = new User();  
  119. //          user.setId(id);  
  120. //          user.setPassword("654321");  
  121. //          user.setUseable(0);  
  122. //          user.setEmail("[email protected]");  
  123. //          list.add(user);  
  124. //      }  
  125.           
  126.         //map批量更新  
  127.         List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();  
  128.         Map<String, Object> map = null;  
  129.         for(int id: ids){  
  130.             map = new HashMap<String, Object>();  
  131.             map.put("id", id);  
  132.             map.put("email""[email protected]");  
  133.             map.put("useable"1);  
  134.             map.put("password""565656");  
  135.             list.add(map);  
  136.         }  
  137.         userService.batchUpdate(list);  
  138.         return new AjaxResult();  
  139.     }  
  140.   
  141.     @ResponseBody  
  142.     @RequestMapping("/delList")  
  143.     public AjaxResult delList(Integer[] ids){  
  144.         List<Integer> list = Arrays.asList(ids);  
  145.         userService.delList(list);  
  146.         return new AjaxResult();  
  147.     }  
  148.       
  149.     @ResponseBody  
  150.     @RequestMapping("/delArray")  
  151.     public AjaxResult delArray(int[] ids){  
  152.         userService.delArray(ids);  
  153.         return new AjaxResult();  
  154.     }  
  155.   
  156. }  

部署启动项目,使用http请求模拟器请求接口测试:

1.通过ID查询:
整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

2.通过条件查询返回实体集合

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

3.通过条件查询返回Map集合

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

4.多条件分页查询实体

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

5.多条件分页查询map

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

6.批量保存数据

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

7.批量更新数据

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

8.评论删除(mybatis接收List<Integer>参数)

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

9.批量删除(mybatis接收int[]参数)

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

10.添加数据

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架

11.更新数据

整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架整合maven+spring+springmvc+mybatis实现ssm通用增删查改基础开发框架


项目源码下载地址:整合maven+spring+springmvc+mybatis实现ssm通用增删查改API(没BUG版本)