Spring文章链接: 从头到尾Spring概念,家族,核心技术使用,事务这一篇就够了!!!_千小半的博客-CSDN博客_spring最新技术
mybatis文章链接: MyBatis框架入门(含实例)_mybatis sqlsession创建和关闭_千小半的博客-CSDN博客
用过Mybatis的伙伴们因该知道当我们去使用Mybatis去进行数据访问时,不仅有三个重要步骤,还有三个核心对象,这里简单重温一下Spring和Mybatis:
MyBatis使用步骤:
1.创建MybatisConfig 配置文件
2.创建SQL映射文件
3.读取配置文件,获取映射器调用方法测试
MyBatis的三个核心对象:
1.SqlSessionFactoryBuider :创建SqlSessionFactory
2.SqlSessionFactory : 创建SqlSession
3. SqlSession :获取mapper映射器并调用方法
Spring IOC容器和AOP:
spring 将所有的对象都交由spring/IOC容器管理,被管理的对象都称为bean。这些bean都在spring配置文件中进行配置。
好了,小半列出上面的温习及步骤,友友们是不是想起来了Mybatis呢?那么我们最终要让spring和mybatis进行一个整合,这两个框架都有配置文件,我们该怎么把他们合二为一呢,请看下图:
IOC容器也就是spring配置文件需要配置的属性和扫描的信息:
1.SqlSessionFactoryBean : 在mybtais-spring的整合包中,可以生成一个SqlSessionFactory,而前者可以创建出SqlSession,也就自然通过mapper映射器可以调用指定方法,通过该类还可以对Mybtais进行配置别名等。
2.数据源: 通过dbcp包提供的BasicDataSource类进行数据源的一个配置.
3.数据映射器类:使用XML配置文件时,需要扫描mapper映射器,反之,使用注解扫描。
4. 事务管理器 : 在spring容器中,开启事务控制需要先通过springFramework.jdbc包下的DataSourceTransactionManager类配置事务管理器,它控制着事务的开关。
以上的4个类就是需要我们在spring整合mybatis配置的bean,关于整合的配置,以下有XML和java类配置的方式。
数据源我们都要配置url,username等连接信息,要想达到数据源的复用性,不想每回都重新配置一遍,就可以通过properties属性文件外部引入数据源。
- db.properties文件
注意:使用spring引入外部属性文件时,前缀必须用jdbc标记。
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.username=root
jdbc.password=root
jdbc.url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
- spring配置XML文件
注意: 要想识别数据源,需要先使用以下标签扫描该数据源文件的路径
开始配置!!!!
MapperFactoryBean类:能够以配置的方式生成映射器的实现类,并注入给业务组件(类型只能是接口类型)
- 启动Spring容器
//测试类
public class Test{
public static void main(String[] args) {
//读取spring配置文件
ApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml");
StudentService service=context.getBean("bean名称",StudentService.class);
service.方法();
}
}
使用XML不仅可以配置整合文件,java类也同理。
@Configuration //描述该类是一个配置类
@Component //注册bean
@ComponentScan(basePackages = {"dao", "service"}) //扫描bean
@MapperScan(value = "dao") //扫描mapper接口注入映射器
public class ApplicationConfig {
/**
* 配置数据源
*/
@Bean
public BasicDataSource getDataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUsername("root");
dataSource.setPassword("root");
dataSource.setUrl("jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=UTC");
return dataSource;
}
/**
* 创建SqlSessioinFactory
*/
@Bean
public SqlSessionFactory sqlSessionFactory()
{
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(getDataSource());
PathMatchingResourcePatternResolver patternResolver = new PathMatchingResourcePatternResolver();
try {
Resource[] resources = patternResolver.getResources("dao/*.xml");
factoryBean.setMapperLocations(resources);
ClassPathResource classPathResource = new ClassPathResource("mybatisConfig.xml");
factoryBean.setConfigLocation(classPathResource);
//设置别名
factoryBean.setTypeAliasesPackage("entity");
} catch (IOException e) {
throw new RuntimeException(e);
}
try {
return factoryBean.getObject();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 配置事务管理器
*/
@Bean
public DataSourceTransactionManager transactionManager(){
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
transactionManager.setDataSource(getDataSource());
return transactionManager;
}