勿忘初衷(Stay Real)...走向了JAVA程序员的道路.路途是坎坷的,学习过程中有很多问题需要去解决,曾经想平平淡淡做个简单的猿就可以了,但在看清现实后,顺带在那仅存不多的上进心的促进下,我还是选择要干还是干的Perfect,do best.
开发有一段时间了.目前虽然还是小菜鸟,但是我相信我会突破界限达到自己想要的高度.对于JAVA开发,我是很热爱的,自己也喜欢写一些简单的小框架,供自己娱乐.对于开发的框架中,Spring框架是很NB的,这毋庸置疑.不过谁都有谁的好处,我是比较看好这个框架的.所以也去了解了一些.目前仅仅只是简单的会用一些框架做一些项目.SSH(下次更新就是这三大框架的使用和个人总结)三大框架也是独立开发过项目的,不过我还是比较喜欢用SpringMvc+Mybatis这套框架去开发项目.
那么我就来谈谈自己对这套框架的使用,和个人见解与总结(不喜勿喷,若有理解错误之处,希望大家一起指出,共同进步):
1.首先我在开发项目的时候喜欢用Maven去搭建我的项目,使用Maven把我的项目基本的模型搭建出来,并且把需要的jar包通过Maven引入.------Maven的使用介绍我会在后续补上.
2.使用Maven创建好Web项目后,就可以开始搭建框架了.
----------------------------------------------------------
搭建SpringMvc框架----用Mvc设计模式划分,它其中包括了控制层Controller和视图层View,将Spring和Mybatis紧密相连,完成Model层,其中用Mybatis来完成对数据库的操作.
开始搭建框架:
1.将SpringMvc、Mybatis和项目需要的jar包引入,这个我是通过Maven构建的之前有说过,当然大家也可以用传统方式,把jar放入WEB-INF/lib中。
2.创建配置文件,第一个配置文件--------application-context.xml(Spring主容器配置)
命名空间和对应的域,既然是主容器那么除了必要的beans、context、tx,还需要加入aop来声明事务。
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
">
然后开始第一步,扫描注解组件:<context:component-scan>
<context:component-scan base-package="com.cx">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
扫描通过Spring添加的注解组件.
这里注意:本来扫描包路径下面的全部的,这里我把Controller注解排除扫描了,也就是这里除了@controller注解其他的注解都会被扫描掉。
**这里是做法就是为了能让后面的事务起作用而有意为之。这里是我们配置的开端,我们还没有配置事务,如果过早的把@Controller也给创建Bean那么我们在Controller里面准备做的service事物处理就会没有绑定上去,导致后面的事务失效...
继续配置:引入jdbc配置文件,(将jdbc连接需要的信息放到配置文件里面单独存储,便于更改)
<context:property-placeholder location="classpath:config/jdbc.properties" />
然后创建jdbc数据源,---dataSource:
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close" >
<property name="driverClassName" value="${jdbc_driverClassName}" />
<property name="url" value="${jdbc_url}" />
<property name="username" value="${jdbc_username}"/>
<property name="password" value="${jdbc_password}"/>
<!-- 连接池最大使用连接数 -->
<property name="maxActive" value="20"/>
<!-- 初始化连接大小 -->
<property name="initialSize" value="1"/>
<!-- 获取连接最大等待时间 -->
<property name="maxWait" value="60000"/>
<!-- 自动清除无用连接 -->
<property name="removeAbandoned" value="true"/>
<!-- 清除无用连接的等待时间 -->
<property name="removeAbandonedTimeout" value="180"/>
<!-- 连接属性 -->
<property name="connectionProperties" value="clientEncoding=UTF-8"/>
</bean>
创建SqlSession:
<span style="white-space:pre"> </span><bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation">
<value>classpath:config/mybatis-config.xml</value>
</property>
//这里是当mybatis的xml文件和mapper接口不在同一个包下面的时候,我们就需要配置进行装载mapper.xml
<property name="mapperLocations">
<value>classpath*:/com/cx/mapper/**/*Mapper.xml</value>
</property>
</bean>
这里我配置加入本地配置文件mybatis-config.xml将其中的配置信息注入到sqlSession中,
完成对mybatis的sqlSession的构建。
然后我们把mapper接口在注入进去,
这里不用在单独加入property来添加sqlsession,MapperScannerConfigurer会自动加载的,
由于上面配置了自动装载mapper.xml,
所以在这里可以让我们的接口和xml不在同一个包中也可,
但是我们要把所有的mapper接口都要扫描到。。没扫描到的接口,你懂的。。。
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.cx.mapper"/>
</bean>
最后我们在配置上事务:
-------------事务管理
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
-------------通过tx;advice来配置事务信息
<tx:advice id="serviceAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="insert*" propagation="REQUIRED" rollback-for="Throwable"/>
<tx:method name="del*" propagation="REQUIRED" rollback-for="Throwable"/>
<tx:method name="update*" propagation="REQUIRED" rollback-for="Throwable"/>
<tx:method name="add*" propagation="REQUIRED" rollback-for="Throwable"/>
<tx:method name="save*" propagation="REQUIRED" rollback-for="Throwable"/>
<tx:method name="*" read-only="true"/>
</tx:attributes>
</tx:advice>
-------------我自己定义了一个切面类,用来记录事务处理前后的数据库操作信息
<bean id="LogAop" class="com.cx.aop.LogAop" />
-------------设置aop
<aop:config proxy-target-class="true">
//对所有service包下面的service类进行注册切点
<aop:pointcut id="servicePointcut" expression="execution(* com.cx.service..*Service.*(..))"/>
//引入配置的事务信息
<aop:advisor pointcut-ref="servicePointcut" advice-ref="serviceAdvice"/>
//引入切面类,在以servicePoincut为切点的事务处理前后执行的方法是:before方法和after方法
<aop:aspect id="logAspect" ref="LogAop">
<aop:before method="before" pointcut-ref="servicePointcut"/>
<aop:after method="after" pointcut-ref="servicePointcut"/>
</aop:aspect>
</aop:config>
这样我们的Spring和Mybatis的配置信息就结束了。
让我们来配置SpringMvc的xml.......