【Spring】Spring整合Mybatis及初步使用操作DAO

  • Post author:
  • Post category:其他

目录

一、Spring整合Mybatis的思路

1.引入相关依赖

2.如何整合?

3.Mybatis框架中 核心对象是谁?

4.SM整合

简化开发

总结:Spring整合mybatis的编程步骤

二、Spring整合Mybatis编程操作DAO–实例示范


一、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——


版权声明:本文为weixin_45595683原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。