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);
}