Spring+Mybatis整合
一、spring利用配置文件加载mybatis核心配置文件整合(利用mybatis核心配置注册相应的ORM映射文件或接口注解类)
1、mybatis利用ORM映射,相应的接口实现类需要继承SqlSessionDaoSupport,并在配置文件中自动传入一个sqlSessionFactory的工厂类给其父类,在完善接口类的方法,用this.getSqlSessionTemplate().xxx---->去调用相应的方法查询或增删改
2、mybatis利用接口注解,相应的接口实现类需要继承SqlSessionDaoSupport,并在配置文件中自动传入一个sqlSessionFactory的工厂类给其父类,在完善接口类的方法,用this.getSqlSessionTemplate().xxx---->去调用相应的方法查询或增删改

二、spring利用配置文件加载通过spring的配置属性整合(代替了mybatis核心配置文件,用spring提供的配置属性去加载ORM映射文件或接口注解类)	
	1、mybatis利用ORM映射,相应的接口实现类需要继承SqlSessionDaoSupport,并在配置文件中自动传入一个sqlSessionFactory的工厂类给其父类
	2、mybatis利用接口注解,相应的接口实现类需要继承SqlSessionDaoSupport,并在配置文件中自动传入一个sqlSessionFactory的工厂类给其父类

spring配置文件:
		1、创建相应的数据源
		2、配置SqlSessionFactory工厂 (二选一)
					(1)注入数据源和mybatis
					(2)或者注入数据源和注入通过spring的配置属性代替mybatis(configuration-ref),最后用(都用)
															<1>、mapperLocations去扫描相应的ORM映射配置文件
															<2>、<mybatis-spring:scan base-package="com.zh.mapper"/>扫描相应的接口注解类
		3、配置sqlSessionTemplate封装类,注入SqlSessionFactory工厂
		4、创建dao层接口类,指向dao的实现类,注入sqlSessionTemplate封装类
		5、创建service层接口类,指向servce的实现类,注入dao层接口
		如果用到spring事务的话,还需要:
		6、创建事务管理器DataSourceTransactionManager类,注入数据源
			<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
								p:dataSource-ref="c3p0DataSource"/>
															
			<aop:config proxy-target-class="true">
				<aop:pointcut id="servicePoint" expression="execution(* com.zh.service.impl.*ServiceImpl.*(..))" />
				<aop:advisor pointcut-ref="servicePoint" advice-ref="serviceAdvice"/>
			</aop:config>

			<tx:advice id="serviceAdvice" transaction-manager="transactionManager">
				<tx:attributes>
					<tx:method name="find*" isolation="READ_COMMITTED" propagation="REQUIRED" rollback-for="SQLException"/>
					<tx:method name="select*" isolation="READ_COMMITTED" propagation="REQUIRED"/>
				</tx:attributes>
			</tx:advice>


三、spring利用注解类加载mybatis核心配置文件整合(利用mybatis核心配置注册相应的ORM映射或接口注解类)
	1、mybatis利用ORM映射,相应的接口实现类的类头需要用@Repository标记(表示dao层类),需要继承SqlSessionDaoSupport,在用一个方法,其方法要用@Autowired标记:
					@Autowired
					public void init(SqlSessionTemplate sqlSessionTemplate) {
						super.setSqlSessionTemplate(sqlSessionTemplate);
					}
	在完善接口类的方法,用this.getSqlSessionTemplate().xxx---->去调用相应的方法查询(select)或增删改(update)
	2、mybatis利用接口注解,相应的接口实现类的类头需要用@Repository标记(表示dao层类),需要继承SqlSessionDaoSupport,在用一个方法,其方法要用@Autowired标记:
					@Autowired
					public void init(SqlSessionTemplate sqlSessionTemplate) {
						super.setSqlSessionTemplate(sqlSessionTemplate);
					}
	在完善接口类的方法,用this.getSqlSessionTemplate().xxx---->去调用相应的方法查询(select)或增删改(update)


四、spring利用注解类加载通过spring的配置属性整合(代替了mybatis核心配置文件,用spring提供的配置属性去加载ORM映射文件或接口注解类)	
	1、mybatis利用ORM映射,相应的接口实现类的类头需要用@Repository标记(表示dao层类),需要继承SqlSessionDaoSupport,在用一个方法,其方法要用@Autowired标记:
					@Autowired
					public void init(SqlSessionTemplate sqlSessionTemplate) {
						super.setSqlSessionTemplate(sqlSessionTemplate);
					}
	在完善接口类的方法,用this.getSqlSessionTemplate().xxx---->去调用相应的方法查询(select)或增删改(update)
	2、mybatis利用接口注解,相应的接口实现类的类头需要用@Repository标记(表示dao层类),需要继承SqlSessionDaoSupport,在用一个方法,其方法要用@Autowired标记:
					@Autowired
					public void init(SqlSessionTemplate sqlSessionTemplate) {
						super.setSqlSessionTemplate(sqlSessionTemplate);
					}
	在完善接口类的方法,用this.getSqlSessionTemplate().xxx---->去调用相应的方法查询(select)或增删改(update)

spring注解类:
	1、类头要用 @org.springframework.context.annotation.Configuration + @PropertySource("dbdatasource.properties")---(如果你用到了spring自带的数据源)去标记,如果用到了mybatis的注解方法还需要用@MapperScan("com.zh.mapper")扫描相应的mapper类

	2、创建相应的方法配置相应的数据源,其头部用@Bean标记

	3、创建方法配置SqlSessionFactory工厂(二选一)
			(1)、注入数据源,加载mybatis核心配置,类的头部用@Bean+@Autowired进行标记
					SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
					factoryBean.setDataSource(driverManagerDataSource);
					Resource resource = new ClassPathResource("mybatis-config.xml");
					factoryBean.setConfigLocation(resource);
					SqlSessionFactory sqlSessionFactory = null;
					try {
						sqlSessionFactory = factoryBean.getObject();
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
			  (2)、注入数据源,利用spring自带属性配置用来代替mybatis核心配置文件,类的头部用@Bean+@Autowired进行标记
			  		SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
					factoryBean.setDataSource(c3p0DataSource);
					factoryBean.setConfiguration(configuration);
					factoryBean.setMapperLocations(new Resource[] { new ClassPathResource("com/zh/vo/TeacherVO.xml") });
					SqlSessionFactory sqlSessionFactory = null;
					try {
						sqlSessionFactory = factoryBean.getObject();
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}

					需要多写个configuration类
						@Bean
						public Configuration configuration() {
							Configuration configuration = new Configuration();
							configuration.setAggressiveLazyLoading(true);
							configuration.setCacheEnabled(true);
							configuration.setDefaultFetchSize(2000);
							configuration.setLazyLoadingEnabled(false);
							configuration.setLogImpl(Log4j2Impl.class);
							configuration.setMapUnderscoreToCamelCase(true);
							return configuration;
						}
	4、创建SqlSessionTemplate封装类:
				@Bean
				@Autowired
				public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
					SqlSessionTemplate template = null;
					template = new SqlSessionTemplate(sqlSessionFactory);
					return template;

				}
	如果用到事务,需要多加个方法:
		5、创建service方法
				@Bean
				@Autowired
				public DataSourceTransactionManager transactionManager (DataSource c3p0DataSource) {
					return new DataSourceTransactionManager(c3p0DataSource);
				}