Spring.xml
写在前面:spring的配置文件默认名称是applicationContext.xml,这个名字不是固定的,都是可以随便更改的。因为是SSM框架,所以这个spring的配置文件是需要整合springmvc和mybatis的,又因为spring可以和springmvc无缝衔接的原因,所以这个配置文件中都是关于spring和mybatis的配置。
1.容器扫描注解包的配置,因为是注解开发,所以需要告诉容器注解所在包的路径,Repository是Dao层需要的注解,Service是Service层需要的注解,Controller的注解是再springmvc文件中配置的。
<context:component-scan base-package="cn.itlaobing">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Component" />
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Repository" />
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Service" />
</context:component-scan>
2.数据源的配置,也是数据库连接池的配置,创建了一个id为dataSource的Bean,为了后面sqlSessionFactory使用它。
<!-- 加载配数据源 配置文件 db.properties -->
<context:property-placeholder location="classpath:config/db.properties" />
<!-- 配置 C3P0 数据源 数据库连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<!-- 配置数据库的四要素 --> 这里四要素是通过外部db.properties文件导入进来的,也可以直接写在下面。
<property name="driverClass" value="${datasource.connection.driver_class}"/>
<property name="jdbcUrl" value="${datasource.connection.url}"/>
<property name="user" value="${datasource.connection.username}"/>
<property name="password" value="${datasource.connection.password}"/>
</bean>
3. 获取 sqlSessionFactory 工厂,通过工厂才能获得我们想要的sqlsession,蓝色部分是使用@select(),@insert等注解开发时的配置,绿色部分是使用mapper.xml映射文件时的配置,两种方法都可以,根据不同情况使用。
<!-- spring 通过 sqlSessionFactoryBean 获取 sqlSessionFactory 工厂类 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!-- 使用mapper.xml文件书写sql语句时,需要扫描映射文件-->
<!-- 扫描 po 包,使用别名 -->
<!-- <property name="typeAliasesPackage" value="cn.itlaobing.entity"></property> -->
<!-- 扫描映射文件 -->
<!-- <property name="mapperLocations" value="classpath:config/mybatis/mapper/*.xml"></property> -->
</bean>
4. 配扫描 dao 包,动态实现 dao 接口,注入到 spring 容器中。因为开发过程中创建的时Dao的接口文件,没有具体的接口实现文件,所以要动态的实现dao对象,将其放入容器中以便使用。
<!-- 配置扫描 dao 包,动态实现 dao 接口,注入到 spring 容器中 . -->
<!-- 因为dao内是接口,并没有实现类,所以动态实现dao接口实际上就是使用了dao的动态代理对象。 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.itlaobing.dao" />
<!-- 注意使用 sqlSessionFactoryBeanName 避免出现spring 扫描组件失效问题 -->
<!-- <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> -->
</bean>
5. 配置事务,查询功能不需要事务,增删改都需要涉及事务的提交和回滚。
<!-- 事务管理器 (JDBC) -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 启动声明式事务驱动 -->
<tx:annotation-driven transaction-manager="transactionManager" />