- spring,将各层进行整合,管理持久层mapper,业务层的service,表现层的handler,进行事务控制
- 表现层:springmvc,handler调用service
- 业务层:service接口,service调用mapper接口
- 持久层:mybatis(dao接口)
第一步:整合持久层(dao)
spring+mybatis,同过spring管理mapper接口
使用mapper的扫描器自动扫描mapper接口在spring中进行注册
第二步:整理service层
通过spring管理service接口
使用配置方式将service接口配置在spring配置文件中
事务控制
整合springmvc
springmvc是spring的一个模块,无缝整合
准备环境
mysql驱动包
mybatis jar包
mybatis+spring整合包
log4j包
dbcp数据库连接池包
spring包
jstl包
log4j.properties
#Clobal logging configuration,建议开发环境使用debug
log4j.rootLogger=DEBUG,stdout
#Consoe 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
db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc:username=xxx
jdbc:password=xxx
sqlMapConfig.xml
<configuration>
<!--全局setting配置,根据需要添加-->
<!--配置别名-->
<typeAliases>
<!--批量扫描别名-->
<package name="xxx.xxx.xxx"/>
</typeAliases>
<!--配置mapper
由于使用spring+mybatis整合包进行mapper扫描,这里不需要配置mapper
必须遵循:mapper.xml和mapper.java文件同名且在同一目录下
-->
<!--<mappers></mappers>-->
</configuration>
applicationContext-dao.xml
<!--加载db.properties文件-->
<context:property-placeholder location="classpath:db.properties"/>
<!--数据源-->
<bean id="dataSource" class="org.apache.common.dbcp.BasicDataSource" destory-method="close">
<property name="dirverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="maxActive" value="30"/>
<proeprty name="maxIdle" value="5"/>
</bean>
<!--sqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--数据库连接池-->
<property name="dataSource" ref="dataSource"/>
<!--加载mybatis配置文件-->
<property name="configuration" value="classpath:sqlMapConfig.xml">
</bean>
<!--mapper扫描器-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--扫描包路径,如果需要扫描多个包,中间使用半角逗号隔开-->
<proeprty name="basePackage" value="xxx.xxx.xxx.mapper"/>
<!--name使用sqlSessionFactory,可能导致无法加载db.properties,最终无法连接数据库-->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory">
</bean>
逆向工厂生成mapper类以及po类文件
针对综合查询,一般需要关联查询,需要创建自定义mapper
applciaionContext-transaction.xml
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--数据源-->
<property name="dataSource" ref="dataSource"/>
</bean>
<!--advice-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!--事务传播行为-->
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="select*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>
<!--aop-->
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="exection(* xxx.xxx.servoce.*.*(..))"/>
</aop:config>
springmvc.xml
参考前面
加载spring容器
建议使用通配符
web.xml
<!--加载spring容器-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>applicationContext-*.xml</param-value>
</context-param>