欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > 手动整合mybatis和spring框架

手动整合mybatis和spring框架

2025/9/23 12:09:55 来源:https://blog.csdn.net/weixin_45583303/article/details/143425151  浏览:    关键词:手动整合mybatis和spring框架

文章目录

    • 一、前述
    • 二、引出
      • SqlSessionFactory
      • 数据映射器类
    • 三、手动整合
      • 环境搭建
      • 依赖注入报错
      • 代理方式改写
      • 使用包扫描方式
      • 自定义扫描器修改
      • 改写代理类
      • 加入SqlSessionFactory的对象
    • 四、总结

一、前述

spring框架概述:

  • spring可以理解为一个帮我们管理bean的容器。
  • 之前我们创建bean都是通过new的方式,使用spring之后, 只需要告诉spring有那些bean,它就会帮我们管理这些bean,在程序启动的时候帮我们创建好,放到一个容器中,随用随取, 并且维护bean整体的生命周期。
  • spring有两大特性 AOP(面向切面编程)和 IOC(控制反转)。
  • spring也是一个基础框架, 在此基础之上还有 springboot 框架和 springcloud 框架,这些框架都是以spring框架为基础的,并在此基础上进行二次开发。

mybatis框架概述:

  • mybatis是一个基于java的持久层框架,内部封装了jdbc,使开发者只需要关注SQL语句本身,无需要花费精力去处理加载驱动,创建连接,创建Statement等复杂过程。
  • mybatis通过xml或者注解的方式将要执行的各种statement配置起来,并通过java对象和statement中的SQL的动态参数进行映射,生成最终需要执行的SQL语句,最后由mybatis框架执行SQL并将结果映射为java对象返回。
  • 使用mybatis配置之后就不用再写dao接口的实现类了,mybatis会通过动态代理的方式创建实体类。
  • 注意:mybatis框架是可以单独使用的,该框架的主要作用就是方便我们操作数据库。

总结:

  • spring框架是一个帮助我们管理bean的框架, mybatis框架是帮我们访问数据库的框架,二者都可以单独使用。
  • 使用mybatis框架需要用到mybatis框架所提供的一些类构造出对应的对象,然后才能使用mybatis框架给我们提供的功能。
  • 问题就是如何让spring帮我们管理mybatis框架提供的这些bean那?这所谓的spring整合mybatis框架。

二、引出

通过mybatis官网的入门介绍里可知,每个基于 mybatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 得到。有了 SqlSessionFactory,就可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。通过 SqlSession 实例来直接执行已映射的 SQL 语句。

// 配置文件
String resource = "org/mybatis/example/mybatis-config.xml"; 
// 读取配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
// 通过配置构建SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
try (SqlSession session = sqlSessionFactory.openSession()) {BlogMapper mapper = session.getMapper(BlogMapper.class);Blog blog = mapper.selectBlog(101);
}

mybatis核心配置文件:mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments><mappers><mapper resource="org/mybatis/example/BlogMapper.xml"/></mappers>
</configuration>

SQL映射配置文件(如果使用注解则可以不配置):BlogMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper"><select id="selectBlog" resultType="Blog">select * from Blog where id = #{id}</select>
</mapper>

数据映射器类:BlogMapper.class

public interface BlogMapper {public Blog selectBlog(Long id);
}

因此要想和 spring 一起使用 mybatis,需要在 spring 容器中定义至少两样东西,一个 SqlSessionFactory 和 至少一个数据映射器类

SqlSessionFactory

<dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.3</version>
</dependency>

在 mybatis-spring jar包中,可使用 SqlSessionFactoryBean 来创建 SqlSessionFactory。 要配置这个工厂 bean,只需要在 spring 的 xml 配置文件中配置即可:

 <!-- 数据库连接配置 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"></property>  <property name="url" value="jdbc:mysql://localhost/mybatis"></property> <property name="username" value="root"></property> <property name="password" value="1234"></property>   
</bean> 
<!-- 可使用 SqlSessionFactoryBean 来创建 SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- SqlSessionFactory 需要一个 DataSource(数据源),可以是任意的 DataSource --><property name="dataSource" ref="dataSource" />
</bean>

数据映射器类

public interface BlogMapper {@Select("  select * from Blog where id = #{id}")public Blog selectBlog(Long id);
}

mybatis所指定的映射器类必须是一个接口,而接口不是具体实现类,故不能直接使用。可以通过 MapperFactoryBean 将接口加入到 Spring 容器中。

<bean id="blogMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"><property name="mapperInterface" value="org.mybatis.example.BlogMapper" /><property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

将上述配置将入到spring的xml配置文件,配置好之后,你就可以使用 spring 的Autowired注解,将映射器类注入到你的业务或服务对象中了。MapperFactoryBean 将会负责 SqlSession 的创建和关闭。如果使用了 Spring 的事务功能,那么当事务完成时,Session 将会被提交或回滚。最终任何异常都会被转换成 Spring 的 DataAccessException 异常。

三、手动整合

环境搭建

在这里插入图片描述

POM文件坐标:

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.0.RELEASE</version></dependency><dependency><groupId>org.springframework

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词