项目说明:
最近做的几个项目都是采用sPRing+springMvc+mybatis三大框架组合模式,现整理一份,仅供学习和参考,后期更新其他框架组合模式。
采用注解方式,mybaits自动代码生成,数据库使用MySQL
一,spring 整合mybatis,需要的配置文件有两个,jdbc.properties 和 spring-datasource.xml。
spring-datasource.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <!-- 引入jdbc配置文件 --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="systemPropertiesMode" value="2"/> <property name="locations"> <list> <value>classpath:jdbc.properties</value> </list> </property> </bean> <!-- 1. 数据源 : DriverManagerDataSource --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="${db.url}"/> <property name="username" value="${db.username}"/> <property name="passWord" value="${db.password}"/> <!-- 从池中获取连接前进行验证 --> <property name="testOnBorrow" value="false"/> <!-- 向池中还回连接前进行验证 --> <property name="testOnReturn" value="false"/> <!-- 连接空闲时验证 --> <property name="testWhileIdle" value="true"/> <!-- 运行判断连接超时任务(evictor)的时间间隔,单位为毫秒,默认为-1,即不执行任务。 --> <property name="timeBetweenEvictionRunsMillis" value="300000"/> <!-- 连接的超时时间,默认为半小时。 --> <property name="minEvictableIdleTimeMillis" value="1800000"/> <!-- 每次evictor启动检查的空闲连接数,-2标识1/2的总空闲连接 --> <property name="numTestsPerEvictionRun" value="-1"></property> <!-- 线程池初始数量 --> <property name="initialSize" value="10"></property> <!-- 最大线程数量 --> <property name="maxActive" value="50"></property> <!-- 最大空闲线程数量 --> <property name="maxIdle" value="20"></property> <!-- 最小空闲线程数量 --> <property name="minIdle" value="10"></property> <!-- 从线程池获取一个mysql连接的最大等待时间,单位毫秒 --> <property name="maxWait" value="1000"></property> </bean> <!-- 2. mybatis的Sqlsession的工厂: SqlSessionFactoryBean dataSource:引用数据源 MyBatis定义数据源,同意加载配置 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <!-- 所有配置的mapper文件 --> <property name="mapperLocations" value="classpath:com/qi/config/*.xml" /> </bean> <!-- 3. mybatis自动扫描加载Sql映射文件/接口 : MapperScannerConfigurer sqlSessionFactory basePackage:指定sql映射文件/接口所在的包(自动扫描) --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.qi.mapper" ></property> <property name="sqlSessionFactory" ref="sqlSessionFactory"></property> </bean> <!-- 4. 事务管理 : DataSourceTransactionManager dataSource:引用上面定义的数据源 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 5. 使用声明式事务 基于注释的事务,当注释中发现@Transactional时,使用id为“transactionManager”的事务管理器 transaction-manager:引用上面定义的事务管理器 --> <tx:annotation-driven transaction-manager="transactionManager" /> </beans>jdbc.propertiesdb.url=jdbc:mysql://120.26.38.142:3306/datebase?useUnicode=true&characterEncoding=UTF8db.username=rootdb.password=root说明:本例采用注解式事务,在需要事务控制的service方法上或者整个class上添加注解@Transactional
二,spring-mvc.xml配置文件
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 注解扫描包 --> <context:component-scan base-package="com.*.*" /> <!-- 开启注解 --> <mvc:annotation-driven> <!-- 设置输出编码格式 --> <mvc:message-converters> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg> <bean class="java.nio.charset.Charset" factory-method="forName"> <constructor-arg value="UTF-8" /> </bean> </constructor-arg> </bean> </mvc:message-converters> </mvc:annotation-driven> <!-- 配置静态资源,直接映射到对应的文件夹,不被DispatcherServlet处理,3.04新增功能,需要重新设置spring-mvc-3.0.xsd --> <!-- <mvc:resources mapping="/images/**" location="/images/" /> --> <!-- <mvc:resources mapping="/js/**" location="/js/" /> --> <!-- <mvc:resources mapping="/CSS/**" location="/css/" /> --> <!-- <mvc:resources mapping="/jsp/**" location="/WEB-INF/jsp/" /> --> <!-- 开启默认处理 --> <!-- 这样静态资源就可以访问了 --> <mvc:default-servlet-handler /> <!-- 对象与json数据的转换 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>application/json;charset=UTF-8</value> </list> </property> </bean> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper"> <bean class="com.fasterxml.jackson.databind.ObjectMapper"> <property name="dateFormat"> <bean class="java.text.SimpleDateFormat"> <constructor-arg type="java.lang.String" value="yyyy-MM-dd" /> </bean> </property> </bean> </property> <property name="supportedMediaTypes"> <list> <value>application/json;charset=UTF-8</value> </list> </property> </bean> </list> </property> </bean> <!-- 定义ViewResolver组件, 实现根据视图标识获取JSP响应 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- View中用到的相关技术 --> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property> <!-- 后缀 --> <property name="suffix" value=".jsp"></property> <!-- 前缀 --> <property name="prefix" value="/jsp/"></property> </bean></beans>三,web.xml 配置文件
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5"xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><!-- 设置Spring容器加载所有的配置文件的路径 --><context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring-*.xml</param-value></context-param><session-config> <session-timeout>15</session-timeout></session-config><!-- 加载Spring容器配置 --><listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class></listener><!-- 防止Spring内存溢出监听器 --><listener> <listener-class> org.springframework.web.context.ContextCleanupListener </listener-class></listener><!-- 监听session创建和失效 --><listener> <listener-class> com.qi.listener.SessionListener </listener-class> </listener> <!-- 字符编码过滤器 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping><!-- 配置SpringMVC核心控制器 --><servlet> <servlet-name>mvcDispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 启动加载一次 --> <load-on-startup>1</load-on-startup></servlet><servlet-mapping> <servlet-name>mvcDispatcher</servlet-name> <url-pattern>/</url-pattern></servlet-mapping><welcome-file-list> <welcome-file>/html/login.html</welcome-file></welcome-file-list></web-app>四,mybaits 自动代码生成,包含配置文件mbgConfiguration.xml 和 启动java类,需要引用的jar包 mybatis-generator-core-1.3.2.jar
mbgConfiguration.xml 配置文件
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration> <!-- 配置mysql 驱动jar包路径.用了绝对路径 --> <classPathEntry location="E:/DEV/MS/WebContent/WEB-INF/lib/mysql-connector-java-5.1.31.jar" /> <context id="mysql_tables" targetRuntime="MyBatis3"> <!-- 为了防止生成的代码中有很多注释,比较难看,加入下面的配置控制 --> <commentGenerator> <property name="suppressAllComments" value="true" /> <property name="suppressDate" value="true" /> </commentGenerator> <!-- 注释控制完毕 --> <!-- 数据库连接 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/database?characterEncoding=utf8" userId="root" password="root"> </jdbcConnection> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- 数据表对应的model 层 --> <javaModelGenerator targetPackage="com.qi.model" targetProject="src"> <property name="enableSubPackages" value="true" /> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- sql mapper 隐射配置文件 --> <sqlMapGenerator targetPackage="com.qi.config" targetProject="src"> <property name="enableSubPackages" value="true" /> </sqlMapGenerator> <!-- 在ibatis2 中是dao层,但在mybatis3中,其实就是mapper接口 --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.qi.mapper" targetProject="src"> <property name="enableSubPackages" value="true" /> </javaClientGenerator> <!-- 要对那些数据表进行生成操作,必须要有一个. --> <table schema="mybatis" tableName="APPLY_INFO" domainObjectName="ApplyInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> </table> <table schema="mybatis" tableName="TASK" domainObjectName="Task" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"> </table> </context></generatorConfiguration>java代码
package com.qi.test;import java.io.File;import java.io.IOException;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import org.mybatis.generator.api.MyBatisGenerator;import org.mybatis.generator.config.Configuration;import org.mybatis.generator.config.xml.ConfigurationParser;import org.mybatis.generator.exception.InvalidConfigurationException;import org.mybatis.generator.exception.XMLParserException;import org.mybatis.generator.internal.DefaultShellCallback;public class GenMain { public static void main(String[] args) { List<String> warnings = new ArrayList<String>(); boolean overwrite = true; String genCfg = "/mbgConfiguration.xml"; File configFile = new File(GenMain.class.getResource(genCfg).getFile()); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = null; try { config = cp.parseConfiguration(configFile); } catch (IOException e) { e.printStackTrace(); } catch (XMLParserException e) { e.printStackTrace(); } DefaultShellCallback callback = new DefaultShellCallback(overwrite); MyBatisGenerator myBatisGenerator = null; try { myBatisGenerator = new MyBatisGenerator(config, callback, warnings); } catch (InvalidConfigurationException e) { e.printStackTrace(); } try { myBatisGenerator.generate(null); } catch (SQLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } }}
新闻热点
疑难解答