spring-mybatis.xml 笔记
整合Spring和Mybatis的主配置文件
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
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.3.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
< context:property-placeholder >
我们在基于spring开发应用的时候,一般都会将数据库的配置放置在properties文件中.
<!--1 引入属性文件,在配置中占位使用 -->
<context:property-placeholder location="classpath:db.properties" />
这样/src/main/resources/db.properties文件就会被spring加载
如果想使用多个配置文件,可以添加order字段来进行排序
< bean id=“datasource” >
配置数据源
<!--2 配置C3P0数据源 -->
<bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<!--驱动类名 -->
<property name="driverClass" value="${jdbc.driver}" />
<!-- url -->
<property name="jdbcUrl" value="${jdbc.url}" />
<!-- 用户名 -->
<property name="user" value="${jdbc.uid}" />
<!-- 密码 -->
<property name="password" value="${jdbc.pwd}" />
<!-- 当连接池中的连接耗尽的时候c3p0一次同时获取的连接数 -->
<property name="acquireIncrement" value="5"></property>
<!-- 初始连接池大小 -->
<property name="initialPoolSize" value="10"></property>
<!-- 连接池中连接最小个数 -->
<property name="minPoolSize" value="5"></property>
<!-- 连接池中连接最大个数 -->
<property name="maxPoolSize" value="20"></property>
</bean>
c3p0 与 dpdp的区别:
dpcp 没有自动回收空闲连接的功能,c3p0有
两者主要是对数据连接的处理方式不同!C3P0提供最大空闲时间,DBCP提供最大连接数。
前者当连接超过最大空闲连接时间时,当前连接就会被断掉。DBCP当连接数超过最大连接数时,所有连接都会被断开。
dbcp它的原理是维护多个连接对象Connection,在web项目要连接数据库时直接使用它维护的对象进行连接,省去每次都要创建连接对象的麻烦。提高效率和减少内存使用。
< bean id=“sqlSessionFactory” >
Spring和Mybatis整合,不用配置Mybatis-config.xml文件,直接将sqlSessionFactory的创建工作交给Spring
<!--3 会话工厂bean sqlSessionFactoryBean -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 数据源 -->
<property name="dataSource" ref="datasource"></property>
<!-- 别名,扫描实体包 -->
<property name="typeAliasesPackage" value="com.zhangguo.bookstore.entities"></property>
<!-- 配置mapper文件扫描路径 -->
<property name="mapperLocations" value="classpath:com/zhangguo/bookstore/mapper/*Mapper.xml"></property>
</bean>
Mybatis动态代理
MapperScannerConfigurer类:spring-mybatis-1.x.x.jar包 中生产出mapper接口的实现类
<!--4 自动扫描对象关系映射 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--指定会话工厂,如果当前上下文中只定义了一个则该属性可省去 -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
<!-- 指定要自动扫描接口的基础包,实现接口 -->
<property name="basePackage" value="com.zhangguo.bookstore.mapper"></property>
</bean>
< bean id=“transactionManager” >
<!--5 声明式事务管理 -->
<!--定义事物管理器,由spring管理事务 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="datasource"></property>
</bean>
<!--支持注解驱动的事务管理,指定事务管理器 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
< context:component-scan >
配置完这个标签后,spring就会去自动扫描base-package对应的路径或者该路径的子包下面的java文件,如果扫描到文件中带有@Service,@Component,@Repository,@Controller等这些注解的类,则把这些类注册为bean
<!--6 容器自动扫描IOC组件 -->
<context:component-scan base-package="com.zhangguo.bookstore"></context:component-scan>
注解:
- @Service告诉spring容器,这是一个Service类,标识持久层Bean组件,默认情况会自动加载它到spring容器中。
- @Autowried注解告诉spring,这个字段需要自动注入
- @Scope指定此spring bean的scope是单例
- @Repository注解指定此类是一个容器类,是DA层类的实现。标识持久层Bean组件
- @Componet:基本注解,标识一个受Spring管理的Bean组件
- @Controller:标识表现层Bean组件
<!--7 aspectj支持自动代理实现AOP功能 -->
<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
</beans>