专栏首页技术进阶之路Spring 整合 Mybatis

Spring 整合 Mybatis

一、MyBatis 单独开发

第一个问题就是配置文件繁琐。

如果使用 MyBatis 配置文件的方式开发,配置文件会非常的繁琐:

<configuration>
    <typeAliases>
        <typeAlias type="edu.lsu.mybatis.User" alias="user"/>
    </typeAliases>
    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test?serverTimezone=UTC&amp;useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="UserDaoMapper.xml"/>
    </mappers>
</configuration>

如上:

  • 我们需要配置别名,有几个写几个;
  • 我们需要注册 mapper,有几个写几个。

有同学说可以使用 package 标签解决这个问题。

是的,但是我们待会使用 Spring 的方式解决这个问题。

第二个问题就是在调用 API 的时候存在代码冗余:

@Test
public void test1() throws IOException {
    InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
    SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);
    SqlSession session = ssf.openSession();
    UserDao userDao = session.getMapper(UserDao.class);
    
    User user = new User();
    user.setName("ws");
    user.setPassword("123456");
    userDao.saveUser(user);
    session.commit();
}

这里创建 SqlSessionFactory 的代码是固定的,变化的部分只有 getMapper 时需要传入的参数。

二、Spring 与 Mybatis 的整合思路

Spring 主要是对这 4 行代码进行了封装:

InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);

SqlSession session = ssf.openSession();
UserDao userDao = session.getMapper(UserDao.class);

前两行

首先是封装了创建 SqlSessionFactory 的方式,然后封装了创建 Dao 的实现类。

原来是需要 mybatis-config.xml 配置文件的,现在去掉了,但是我们还是需要给它提供配置文件里的内容信息,比如 数据源 、别名、Mapper 的注册信息。

SqlSessionFactoryBean :

  • 用于封装 SqlSessionFactory 创建的代码;
  • 需要数据源 、别名、注册信息作为参数;
  1. 数据源可以使用 ref 引用存在的数据源信息;
  2. 别名可以使用包名,Spring会自动为包下的实体类创建别名:首字母小写;
  3. 注册信息可以使用通配的设置,如:*Mapper.xml

后两行

Spring 提供了一个 MapperScannerConfig 类,他需要几个属性:

  • 首先是需要一个 SqlSessionFactoryBean ,用于获取 session
  • 然后设置 Dao 接口所在的包,他会自动扫描包下的接口并创建 Dao 对象,它的 id 值是接口首字母小写。

三、整合编码实现

在 Spring 的配置文件中:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--    连接池-->
    <bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/test?serverTimezone=UTC&amp;useSSL=false&amp;characterEncoding=UTF-8"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </bean>
<!--    SqlSessionFactoryBean-->
    <bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="typeAliasesPackage" value="edu.lsu.entity"/>
        <property name="mapperLocations">
            <list>
                <value>classpath:edu/lsu/mapper/*Mapper.xml</value>
            </list>
        </property>
    </bean>
<!--    创建Dao对象-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" id="scanner">
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"/>
        <property name="basePackage" value="edu.lsu.dao"/>
    </bean>
</beans>

其余文件内容均不变,在测试的时候即可测试出结果:

@Test
public void test2() {
    ApplicationContext ac = new ClassPathXmlApplicationContext("/application.xml");
    UserDao userDao = ac.getBean("userDao", UserDao.class);
    User user = new User();
    user.setName("小贱人");
    user.setPassword("99999");
    userDao.saveUser(user);
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 从零开始重新认识 MyBatis

    这里 MyBatis 提供多种配置方式,这里我们都采取了最优的方式配置了,注释掉的为其他配置方式。

    wsuo
  • SpringBoot 跨域问题:Access to XMLHttpRequest at ‘***‘ from origin ‘***‘ has been blocked by CORS policy

    CORS 跨站点资源分享,属于跨域问题,同个 IP 的不同端口间的访问也属于跨域。

    wsuo
  • 微信小程序常用组件

    https://developers.weixin.qq.com/miniprogram/dev/component/map.html

    wsuo
  • Spring3整合Ibatis3配置

    <context-param> <param-name>contextConfigLocation</param-name> <param-value...

    py3study
  • Java面试系列23-spring(2)-配置数据库驱动、依赖、Mapping等

    Java面试系列23-spring(2)-配置数据库驱动、依赖、Mapping等 6.如何在spring的applicationContext.xml使用JND...

    Java帮帮
  • Git 项目推荐 | 分布式系统唯一 ID 生成方法

    image.png 在工程中引用sequence项目的sequence-client jar包 在的应用数据库中创建两个sequence表,sql语句如下:...

    码云Gitee
  • hadoop集群篇--从0到1搭建hadoop集群

    本来有套好好的集群,可是不知道为什么虚拟机镜像文件损坏,结果导致集群不能用。所以不得不重新搭套集群,借此机会顺便再重新搭套吧,顺便提醒一句大家,自己虚拟机的集群...

    LhWorld哥陪你聊算法
  • MATLAB simulink文件格式

    slx 与mdl文件。slx是一种压缩文件,可以通过修改后缀名的方式,取出其中的XML标记语言的文件。这个文件包含模型的信息。

    用户4381798
  • SSM项目集成mybatis-plus

    2.替换 spring.xml  配置文件中的 sqlSessionFactory

    似水的流年
  • Hbase的安装(hadoop-2.6.0,hbase1.0)

      Hbase的安装相对很简单啊。。。只要你装了Hadoop 装Hbase就是分分钟的事 如果要装hadoop集群的话 hadoop分类的集群安装好了,如果已经...

    用户3003813

扫码关注云+社区

领取腾讯云代金券