目录
一、Spring整合Mybatis的思路
1.引入相关依赖
spring mybatis mysql。。。
2.如何整合?
Spring 项目管理框架 主要用于负责项目中组件对象的 创建 | 使用 | 销毁
MyBatis 持久层框架 主要是用于简化原始jdbc技术 对数据库的访问操作
Spring核心作用就是对象创建,Mybatis核心作用是操作数据库,
要使用mybatis必须要用( Java写的)Mybatis中核心对象才能操作数据库
可以看到整合思路: 通过Spring框架 接管Mybatis框架中核心对象的创建。
3.Mybatis框架中 核心对象是谁?
sqlSessionFactoryBuilder :它能构建后续所有对象,但不是最核心的对象
sqlSessionFactory: Mybatis中最核心的对象 读取Mybatis-Config.xml(数据源配置 mapper文件配置)
sqlSession : 没有sqlSession就拿不到dao
dao
4.SM整合
整合思路:通过Spring 框架 接管Mybatis中 核心的 SqlSessionFactory 对象的创建 。
a).Spring如何管理SqlSessionFactory对象的创建?
SqlSessionFactory 是复杂对象 ?还是 简单对象?
通过查看源码, 可以看到 SqlSessionFactory 是一个接口类型 ,因此是复杂类型
如何创建?
注: 本来应该是SqlSessionFactoryFactoryBean,但是为了简化,所以把中间的Factory省略掉了。
1).
//自定义创建sqlSessionFactory
SqlSessionFactoryBean implements FactoryBean<SqlSessionFactory>{
//注入依赖,便于更改mybatis-config.xml的地址
private String configLocations
public void setConfigLocation(String configLocations){
this.configLocations = configLocations;
}
@Override
SqlSessionFactory getObject(){
is = Resources.getResourceAsStream("configLocations");
return new SqlSessionFactoryBuilder().build(is);
}
@Override
Class getClass(){
return SqlSessionFactory.class;
}
@Override
boolean isSingleton(){return true;}
}
2)工厂管理SqlSessionFactory
<bean id = "sqlSessionFactory" class = "xxx.sqlSessionFactoryBean">
3)工厂获取
SqlSessionFactory sf = context.getBean("sqlSessionFactory");
5.简化开发
只要按照上面的程序写基本就能使用整合后的SM,那么问题又来了:每个开发者,每个公司都要这么写一遍,很麻烦,所以Mybatis官方对这个代码进行了封装,提供了一个叫做Mybatis-spring的jar包, 封装了SqlSessionFactory对象的创建 ,叫做SqlSessionFactoryBean
以后只需要在引入Mybatis的基础上,引入Mybatis-spring的依赖,直接写一个bean标签来获取 Mybatis 复杂对象
注意:mybatis官方提供的sqlSessionFactoryBean 不能再使用mybatis主配置文件(mybatis-config.xml其中包含数据源+mapper文件注册),但是又必须用到这两个,所以需要都写进去。(把数据源对象也交过来管理)
<!--创建数据源对象 可使用的有阿里的 Druid,国外的C3p0 dbcp都可用于构建数据源-->
<!--要使用的话还需要在pom中引入 druid的依赖-->
<bean id = "dataSource" class = "com.alibaba.druid.pool.DruidDataSource">
<!--下面的name值不能更改-->
<property name="driverClassName" value = "com.mysql.jdbc.Driver"/>
<property name="url" value = "jdbc:mysql://localhost:3306/test"/>
<property name="userName" value = "root"/>
<property name="password" value = "root"/>
</bean>
<!--创建sqlSessionFactory-->
<bean id="sqlSessionFactory" class = "org.mybatis.spring.SqlSessionFactoryBean">
<!--依赖数据源对象-->
<property name="dataSource" value = "dataSource"/>
<!--依赖mapper-->
<property name="configLocation" value = "classpath:mybatis-config.xml"/>
</bean>
只要见到Resource对象把它当成String去处理就好了
可以看到这个 jar包 中也是实现了原来的接口
6.总结:Spring整合mybatis的编程步骤
整合思路:通过spring接管mybatis中核心对象的sqlSessionFactory的创建
SqlSessionFactory 是 复杂对象====》SqlSessionFactoryBean的创建=====》代码是通用的=====》官方jar包 mybatis-spring.jar
1.引入依赖
1).spring 2.)mybatis 3).mysql 4).mybatis-spring 5).druid
在最新的整合中,不能再使用主配置文件mybatis-config.xml(其中包含数据源+mapper注册文件),把主配置文件做了拆分。
所以还有 5.druid
2.配置spring.xml
a.创建sqlSessionFactory (它已经被jar包中的SqlSessionFactoryBean创建好了,直接用即可)
创建的sqlSessionFactory 还依赖 数据源对象,所以也需要在工厂中b.创建数据源对象
<!--创建sqlSessionFactory-->
<bean id="sqlSessionFactory" class = "org.mybatis.spring.SqlSessionFactoryBean">
<!--依赖数据源对象-->
<property name="dataSource" value = "dataSource"/>
<!--依赖mapper文件注册-->
<property name="configLocation" value = "classpath:mybatis-config.xml"/>
</bean>
b.创建数据源对象,(注意 id = “dataSource” 需要固定这么写,不能改!!)
<!--创建数据源对象 可使用的有阿里的 Druid,国外的C3p0 dbcp都可用于构建数据源-->
<!--要使用的话还需要在pom中引入 druid的依赖-->
<bean id = "dataSource" class = "com.alibaba.druid.pool.DruidDataSource">
<!--下面的name值不能更改-->
<property name="driverClassName" value = "com.mysql.jdbc.Driver"/>
<property name="url" value = "jdbc:mysql://localhost:3306/test"/>
<property name="userName" value = "root"/>
<property name="password" value = "root"/>
</bean>
3.从工厂中获取sqlSessionFactory对象
context = new ClassPathXmlApplicationContext("spring.xml");
SqlSessionFactory sf = (SqlSessionFactory) context.getBean("sqlSessionFactory");
二、Spring整合Mybatis编程操作DAO–实例示范
创建好 maven 项目目录结构,并在 pom.xml 中引入相关依赖.
并在 resources 目录下建立 spring.xml配置文件,要在这里完成spring 和 mybatis的整合, 即,让spring 接管 mybatis中 sqlSessionFactory 对象的 创建
,因为已经引入了spring-mybatis.jar包 所以不用自己去创建sqlSessionFactoryBean这个类,(直接在spring.xml中写bean标签,class的全限定名写成“`org.mybatis.spring.SqlSessionFactoryBean“`即能直接使用这个对象)。另外,这个对象还依赖 数据源datasource,但是当前没有这个数据源对象, 所以 还要先创建数据源对象 datasource。
下面再java目录中写测试类,TestSqlSessionFactory
public class TestSqlSessionFactory{
public static void main(String[] args){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
SqlSessionFactory sqlSessionFactory = (SqlSessionFactory) context.getBean("sqlSessionFactory");
System.out.println(sqlSessionFactory.openSession());
}
}
运行结果:
3.数据库建表
4.实体类,提供相应的 get/set 方法
5.DAO接口
6.开发mapper配置文件
在resources目录下,创建文件目录,
并创建叫做UserDAOMapper.xml的 mapper配置文件
在mapper配置文件中写入如下内容:
在 spring.xml 中还要注入mapper配置文件
7.启动工厂 获取 SqlSessionFactory
分析可知,每次都要写下面两句话,影响开发效率,因此官方对这两句话也做了进一步封装。可以看到,创建一个DAO对象,它
(1).依赖于 SqlSessionFactory ( 2).依赖于mapper
在mybatis-spring.jar中,封装了MapperFactoryBean 来封装下面两句话,以便于我们获取Mapper ,从而创建DAO
而mapper 又 依赖于 SqlSessionFactory ,因此 也需要注入SqlSessionFactory
光着些还不够,还要告诉mapper,帮我们 创建具体哪一个 DAO
下面标记为黄色的部分,为框架源码定义,不能更换名称
——End——