一 springMVC整合mybatis
1.在配置文件中配置好数据源
xml头
<?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: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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"><!-- 自动扫描 --><context:component-scan base-package="com.datanew"><!--<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"></context:include-filter>--><!--<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"></context:include-filter>--><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan><context:component-scan base-package="com.datanew_zg"><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan>
配置要读取的配置文件信息
<!-- 引入配置文件 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="locations" ><list><value>classpath:config.properties</value><value>classpath:datasource.properties</value><value>classpath:ureport.properties</value></list></property><property name="ignoreUnresolvablePlaceholders" value="true"/> </bean>
这里是config.properties,datasource.properties,ureport.properties等
<bean id="dataSource_pjgl" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"><property name="driverClassName" value="${jdbc.driver}"/><property name="url" value="${jdbc.url.pjgl}"/><property name="username" value="${jdbc.username.pjgl}"/><property name="password" value="${jdbc.password.pjgl}"/><property name="initialSize" value="${jdbc.initialSize}"/><property name="maxActive" value="${jdbc.maxActive}"/><property name="minIdle" value="${jdbc.minIdle}"/><property name="maxWait" value="${jdbc.maxWait}"/><property name="testWhileIdle" value="true"/><property name="connectionInitSqls"><list><value>set names utf8mb4</value></list></property> </bean> <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --> <bean id="sqlSessionFactory_pjgl" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource_pjgl"/><property name="configLocation" value="classpath:mybatis-config.xml"/><!-- 自动扫描mapping.xml文件 --><property name="mapperLocations" value="classpath:com/datanew/dao/xml/*.xml"/> </bean> <!-- DAO接口所在包名,Spring会自动查找其下的类 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.datanew.dao"/><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory_pjgl"/> </bean> <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx --> <bean id="transactionManager_pjgl" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource_pjgl"/> </bean> <!-- 配置事务增强处理Bean,指定事务管理器 --> <tx:advice id="transactionAdvice_pjgl" transaction-manager="transactionManager_pjgl"><!-- 配置详细事务处理语义 --><tx:attributes><tx:method name="insert*" rollback-for="java.lang.Exception"/><tx:method name="update*" rollback-for="java.lang.Exception"/><tx:method name="delete*" rollback-for="java.lang.Exception"/><tx:method name="save*" rollback-for="java.lang.Exception"/><tx:method name="process*" rollback-for="java.lang.Exception"/><tx:method name="disable*" rollback-for="java.lang.Exception"/><tx:method name="enable*" rollback-for="java.lang.Exception"/><tx:method name="merge*" rollback-for="java.lang.Exception"/><tx:method name="undo*" rollback-for="java.lang.Exception"/><tx:method name="recount*" rollback-for="java.lang.Exception"/><!-- 其他采用只读事务方式 --><tx:method name="*" read-only="true"/></tx:attributes> </tx:advice>
读取数据源与设置要扫描的mapper.xml包与dao所在的包
二 springMVC整合hibnate
1.在配置文件中配置数据源(若配置在config.properties中不必再引入配置文件,用默认)
xml头
<?xml version="1.0" encoding="UTF-8"?> <beans default-lazy-init="true" xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd" xmlns:p="http://www.springframework.org/schema/p">
<bean id="dataSource_fsgl" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"><property name="driverClassName" value="${jdbc.driver}"/><property name="url" value="${fsgl.jdbc.url}"/><property name="username" value="${fsgl.jdbc.username}"/><property name="password" value="${fsgl.jdbc.password}"/><!-- 初始化连接大小(默认0) --><property name="initialSize" value="${initialSize}" /><!-- 连接池最大数量(默认8) --><property name="maxActive" value="${maxActive}" /><!-- 最小连接池数量 --><property name="minIdle" value="${minIdle}" /><!-- 获取连接最大等待时间,单位毫秒 --><property name="maxWait" value="${maxWait}" /><!-- 是否缓存preparedStatement(MySql建议关闭) --><property name="poolPreparedStatements" value="false" /><!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --><property name="timeBetweenEvictionRunsMillis" value="60000" /><!-- 这里配置提交方式,默认自动提交 --><property name="defaultAutoCommit" value="false" /><!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 --><property name="filters" value="stat" /> </bean><!-- 配置hibernate的SessionFactory --> <bean id="sessionFactory_fsgl"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><!-- 注入数据源 相关信息看源码 --><property name="dataSource" ref="dataSource_fsgl" /><!-- hibernate配置信息 --><property name="hibernateProperties"><props><prop key="hibernate.dialect">com.datanew.util.MySQLServerDialect</prop><prop key="hibernate.show_sql">${hibernate.show_sql}</prop><prop key="hibernate.format_sql">${hibernate.format_sql}</prop><!--<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>--><prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop><prop key="hibernate.temp.use_jdbc_metadata_defaults">false</prop><prop key="hibernate.jdbc.use_streams_for_binary">true</prop><prop key="hibernate.connection.release_mode">auto</prop><prop key="hibernate.autoReconnect">true</prop><!-- 开启二级缓存 ehcache --><!-- <prop key="hibernate.cache.use_second_level_cache">${hibernate.cache.use_second_level_cache}</prop><prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop><prop key="hibernate.cache.region.factory_class">${hibernate.cache.region.factory_class}</prop><prop key="hibernate.cache.provider_configuration_file_resource_path">${hibernate.cache.provider_configuration_file_resource_path}</prop> --></props></property><!-- 扫描hibernate注解配置的entity --><property name="packagesToScan" value="com.datanew.model_fsgl"/> </bean><!-- 配置事务管理器 --> <bean id="transactionManager_fsgl" class="org.springframework.orm.hibernate4.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory_fsgl" /> </bean><!-- 配置事务增强处理Bean,指定事务管理器 --> <tx:advice id="transactionAdvice_fsgl" transaction-manager="transactionManager_fsgl"><!-- 配置详细事务处理语义 --><tx:attributes><tx:method name="set*" propagation="REQUIRED" rollback-for="java.lang.Exception"/><tx:method name="push*" propagation="REQUIRED" rollback-for="java.lang.Exception"/><tx:method name="sync*" propagation="REQUIRED" rollback-for="java.lang.Exception"/><tx:method name="voided*" propagation="REQUIRED" rollback-for="java.lang.Exception"/><tx:method name="send*" propagation="REQUIRED" rollback-for="java.lang.Exception"/><tx:method name="create*" propagation="REQUIRED" rollback-for="java.lang.Exception"/><tx:method name="get*" propagation="SUPPORTS" read-only="true"/><tx:method name="*" propagation="SUPPORTS" read-only="true"/></tx:attributes> </tx:advice><!-- Spring aop事务管理 --> <aop:config><!-- 配置切入点 --><aop:pointcut id="transactionPointcut" expression="(execution(* com.datanew.service.impl.*Impl.*(..)) || execution(* com.datanew.dao.BaseDao.*(..)))"/><!-- 指定在txAdvice切入点应用txAdvice事务增强处理 --><aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice_fsgl" /> </aop:config>
读取配置文件中的数据源信息,要扫描数据源对应实体类的包
2.配置一个baseDao,再配置一个当前数据源的dao实现baseDao
@Repository("fsBaseDao") public class FsBaseDaoImpl implements BaseDao {@Resource(name = "sessionFactory_fsgl")private SessionFactory sessionFactory;public SessionFactory getSessionFactory() {return sessionFactory;}public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}@Overridepublic Session getSession() {return sessionFactory.getCurrentSession();}
}
baseDao里为增删改查等相应的方法
三 springBoot整合mybatis
mapperscan扫描加config类配置(不再使用xml配置)
@Configuration @MapperScan(value = {"com.datanew.reimburse.mapperpjgl" }, sqlSessionFactoryRef = "sessionFactory-pjgl") public class PjDataSourceConfig {@Bean(name = "datasource-pjgl")@ConfigurationProperties(prefix = "spring.datasource.pjgl")public DataSource pjDataSource() {return DataSourceBuilder.create().build();}@Autowired@Bean(name = "sessionFactory-pjgl")public SqlSessionFactory sessionFactory(@Qualifier("datasource-pjgl") DataSource dataSource) throws Exception {MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();factoryBean.setDataSource(dataSource);factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/mapperxml/*.xml"));return factoryBean.getObject();}@Autowired@Bean("sessionTemplate-pjgl")public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sessionFactory-pjgl") SqlSessionFactory sqlSessionFactory) throws Exception {return new SqlSessionTemplate(sqlSessionFactory);}@Autowired@Bean(name = "transactionManager-pj")public PlatformTransactionManager transactionManager(@Qualifier("datasource-pjgl") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}