Spring+SpringMVC+Mybatis整合

1.框架

随便互联网的发展,各种各样的需求,所以我们选择了这个灵活多变的持久层框架Mybatis。Spring大家应该是用的比较多,IOC容器,事务控制,切面编程AOP,MVC设计模式等等都是很不错。
spring在整个框架中都是贯穿始终。

2.框架环境

a)  数据库环境: mysql-5.1.7

b) Jdk jdk 1.7.0_80

c) Eclipse 4.5.2

d) Spring spring-3.2.0

e) Mybatis mybatis-3.2.7

3.框架结构展示

我这里面还整合了quartz定时器以及radis缓存可以忽略不计。

4.核心文件的配置

1、spring-serlvet.xml

springMVC的工作流程:
这里面一共包含6种组件:

前端控制器DispatcherServlet(spring提供)

处理器映射器HandlerMapping(配置)

处理器适配器HandlerAdapter(配置)

处理器Handler(即controller自己编写)

视图解析器View resolver(配置)

视图View(自己编写jsp页面)

本次主要采用的注解的方式配置,简单方便。
		<!-- 是对包进行扫描,实现注释驱动-->  
    	<context:annotation-config />  
    	<!-- 设置使用注解的类所在的controller包 -->
    	<context:component-scan base-package="com.xinxun.strategy"></context:component-scan>
		
		<!-- http://www.cnblogs.com/benwu/articles/5162614.html
		注解处理器映射器DefaultAnnotationHandlerMapping、
		注解处理器适配器 AnnotationMethodHandlerAdapter
		jackson:在方法名前面增加@ResponseBody注解。如果Spring发现项目lib库中含有Jackson包
				Spring启用了 mvc:annotation-driven MVC注解配置返回的方法使用了@ResponseBody注解Spring 会自动进行JSON的转换。
		。用注释驱动代替-->
		<mvc:annotation-driven>
			<mvc:message-converters> 
			<!-- @ResponseBody返回的字符串带有中文时 防止中文乱码 -->   
	           <bean class="org.springframework.http.converter.StringHttpMessageConverter" >    
		            <property name = "supportedMediaTypes">  
		                <list>  
		                     <value>text/plain;charset=UTF-8</value>  
		                </list>  
		            </property>  
	           </bean>    
	       </mvc:message-converters>   
		</mvc:annotation-driven>		
		
		<!-- 配置视图解析器  解析jsp解析,默认使用jstl标签,classpath下的得有jstl的包-->
		<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
			<!-- 转向路径解析前缀 -->
			<property name="prefix" value="/WEB-INF/jsp/"></property>
			<!-- 转向路径解析后缀 -->
			<property name="suffix" value=".jsp"/>
		</bean>

2、spring-config.xml

主要配置spring和mybatis的整合以及spring的事务控制


由上图可以看出mybatis的执行流程核心文件SqlMapConfig.xml,由该文件创建SqlSessionFactoryBuilder,再由SqlSessionFactoryBuilder创建SqlSessionFactory(单例的),
再生产SqlSession,有了sqlSession就可以 mapper里面方法,操作数据库。

详情:连接池的配置(使用阿里的druid)、SqlSessionFactoryBean配置、采用扫描方式配置mapper、spring的事务配置、配置切面AOP...
	<!-- 加载db.properties文件中的内容,db.properties文件中key命名要有一定的特殊规则 -->
	<context:property-placeholder location="classpath:db.properties" />
	 
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> 
	  <!-- 基本属性 url、user、password -->
	  <property name="driverClassName" value="${jdbc.driver}" />
	  <property name="url" value="${jdbc.url}" />
	  <property name="username" value="${jdbc.username}" />
	  <property name="password" value="${jdbc.password}" />
	 
	  <!-- 配置初始化大小、最小、最大 -->
	  <property name="initialSize" value="1" />
	  <property name="minIdle" value="1" /> 
	  <property name="maxActive" value="20" />
	 
	  <!-- 配置获取连接等待超时的时间 -->
	  <property name="maxWait" value="60000" />
	 
	  <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
	  <property name="timeBetweenEvictionRunsMillis" value="60000" />
	 
	  <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
	  <property name="minEvictableIdleTimeMillis" value="300000" />
	 
	  <property name="validationQuery" value="SELECT 'x'" />
	  <property name="testWhileIdle" value="true" />
	  <property name="testOnBorrow" value="false" />
	  <property name="testOnReturn" value="false" />
	 
	  <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
	  <property name="poolPreparedStatements" value="false" />
	  <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
	 
	  <!-- 配置监控统计拦截的filters -->
	  <property name="filters" value="stat" /> 
	</bean>
	
	<!--2. mybatis的SqlSession的工厂: SqlSessionFactoryBean dataSource:引用数据源
		MyBatis定义数据源,同意加载配置-->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
		<property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml" /> 
	</bean>
		
	<!--3. mybatis自动扫描加载Sql映射文件/接口 : MapperScannerConfigurer sqlSessionFactory
		basePackage:指定sql映射文件/接口所在的包(自动扫描)-->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.xinxun.strategy.mapper"/>
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
	</bean>

	<!--4. 事务管理 : DataSourceTransactionManager dataSource:引用上面定义的数据源-->
	<bean id="txManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"></property>
	</bean>

	<!-- 5. 使用声明式事务 transaction-manager:引用上面定义的事务管理器-->
	<tx:annotation-driven transaction-manager="txManager" />
	
	<!-- 6. 通知 -->
	<tx:advice id="txAdvice" transaction-manager="txManager">
        <tx:attributes>
        	<tx:method name="execute*" propagation="REQUIRED" />
            <tx:method name="save*" propagation="REQUIRED" />
            <tx:method name="add*" propagation="REQUIRED" />
            <tx:method name="create*" propagation="REQUIRED" />
            <tx:method name="insert*" propagation="REQUIRED" />
            <tx:method name="update*" propagation="REQUIRED" />
            <tx:method name="merge*" propagation="REQUIRED" />
            <tx:method name="del*" propagation="REQUIRED" />
            <tx:method name="remove*" propagation="REQUIRED" />
            <tx:method name="put*" propagation="REQUIRED" />
            <tx:method name="use*" propagation="REQUIRED"/>      
            <tx:method name="get*" propagation="REQUIRED" read-only="true" />
            <tx:method name="count*" propagation="REQUIRED" read-only="true" />
            <tx:method name="find*" propagation="REQUIRED" read-only="true" />
            <tx:method name="list*" propagation="REQUIRED" read-only="true" />
            <tx:method name="*" read-only="true" />
        </tx:attributes>
    </tx:advice>
    
    <!-- 7. aop面向切面 -->
    <aop:config expose-proxy="true">
        <aop:pointcut id="txPointcut" expression="execution(* com.xinxun.strategy.service..*.*(..))" />
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
    </aop:config>

3、web.xml

每一个web项目都会有这个文件。
主要配置:加载spring容器上下文context、配置dispatcherservlet等等
	<!-- 加载spring容器  上下文-->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			classpath:spring/spring-config.xml
			classpath:quartz/quartz.xml
			classpath:redis/redis.xml
		</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
  
  <!-- 配置dispatcherservlet -->
  <servlet>	
  	<servlet-name>springmvc</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<!-- 配置springmvc加载的配置文件(配置处理器映射器、适配器、视图解析器等等) -->
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:spring/spring-servlet.xml</param-value>
  	</init-param>
  	<!-- 当前servlet启动加载优先级 -->
  	<load-on-startup>1</load-on-startup>
  </servlet>
  	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

4、sqlMapConfig.xml

这个文件暂时没有配置,只有头,mapper已经在spring-config.xml中配置。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
</configuration>

5、db.properties

数据库连接的配置文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/strategy
jdbc.username=root
jdbc.password=mysql

6、log4j.properties

log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n


配置文件了主要就是这些!

5.总结

我没有贴出java类的代码。相信这些大家都在熟悉不过了!Spring为我们做了很多的工作,注解用起来也十分方便!多去看看spring的源码,了解一下原理,很多问题 都会迎刃而解!


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值