Spring集成Mybatis

半个自学笔记,结合代码理解。

一. 环境搭建以及工具介绍

idea:2023.2.3

jar包:展示如下。

    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.39</version>
</dependency>

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.9</version>
</dependency>

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

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.29</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.3.29</version>
</dependency>

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.15</version>
</dependency>

二. 开始集成

步骤如下:

    1) jar包导入:

                  MyBatis相关jar
          jdk.jar-------JDBC相关接口
          mysql-conector-java.jar-----JDBC相关接口实现类
          mybatis.jar
          mybatis-spring.jar

                  Spring相关jar
          spring-context.jar
          spring-jdbc.jar(DaoSupport接口)

 
                  辅助jar:
          来自于阿里巴巴公司公司Durid.jar

   2) 配置文件:

                   Spring核心配置文件
           MyBatis核心配置文件
           Sql映射文件

   3)相关java类与接口
                    描述Dept表特征实体类
            DeptDao接口

 

首先,maven工程创建完成。quickstart模板

在pom文件中导入相关jar包。

然后书写两个核心配置文件:mybatis核心配置文件和spring核心配置文件。

mybatis核心配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--变化:
    (1)小服务:实体类别名映射服务没有啦,在spring核心配置文件中索要
    (2)设置SqlSession的四要素没有啦。我们要使用Druid数据库连接池代替
    (3)原有的SQL语句映射文件交由spring核心映射文件索要
    -->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>

</configuration>

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">


    <!--
       第一步:要求Spring容器对象创建Druid  dataSources对象
       由它来负责connection对象创建以及管理
       (tip:原来这一步是写在mybatis核心配置文件中,现在写在spring配置文件中)
    -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/myTest"/>
        <property name="username" value="root"/>
        <property name="password" value="0323"/>
    </bean>


    <!--
        第二步:要求spring容器对象创建SqlSessionFactoryBean这个对象,用于完成创建
        初始化SqlSessionFactory对象并将其存放其中
    -->
    <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--提供当前工程中mybatis配置文件在工程编译路径下的位置-->
        <!--
        InputStream in = Resources.getStreamAsValue("mybatis.xml");按理说要用到ref,但
        实际上使用这个方法来获取mybatis核心配置文件,所以value
        -->
        <property name="configLocation" value="classpath:mybatis.xml"/>
        <!--使用上方创建的DruidDataSources替换掉SqlSessionFactory内置的数据库连接池。
        tip:原数据库连接池的属性名就i是dataSources,用ref实现-->
        <property name="dataSource" ref="dataSource"/>
        <!--申请实体类别名映射服务,自动为生成后的entity实体类赋一个名称,一般是首字母小写的形式-->
        <property name="typeAliasesPackage" value="org.example.entity"/>
    </bean>

    <!--
        第三步:要求Spring容器对象创建MapperScannerConfigure对象
        这个对象最终完成Dao代理对象创建并将Dao代理对象存储在Spring容器对象中
    -->
    <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--SqlSessionFactoryBean factoryBean =  spring.getBean("sqlSessionFactoryBean")-->
        <!--sqlSessionFactory factory = factoryBean.getSqlSessionFactory()-->
        <!--SqlSession sc = factory.openSession()-->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"/>
        <!--要求SqlSession对象为指定包下的所有Dao接口申请Dao代理对象-->
        <property name="basePackage" value="org.example.dao"/>
    </bean>


</beans>

由于使用的是dao代理设计服务,因此此时的sql映射文件要与dao接口置于同一个包下

dao接口与mapper映射文件的配置规则:

1.dao接口与映射文件应该置于同一包下

2.dao接口与映射文件必须同名

3.dao接口中的方法名称必须与映射文件中dml语句的id一致

4.映射文件中的namespace必须为dao接口的全限定名称:

<mapper namespace="org.example.dao.DeptDao">

最后。修改pom文件的相关resources标签以实现映射文件的正确配置

<resource>
  <directory>src/main/java</directory>
  <includes>
    <include>**/*.xml</include>
  </includes>
</resource>

<resource>
  <directory>src/main/resources</directory>
  <includes>
    <include>**/*.xml</include>
  </includes>
</resource>

三. 解释

1.mybatis和spring核心配置文件的解释。

(1)首先了解SqlSessionFactoryBean这个(类):

Spring创建了SqlSessionFactoryBean这个对象,通过SqlSessionFactoryBean完成

SqlSessionFactoryBuilder的创建并实现配置文件的读取,最终创建并初始化SqlSessionFactory对象并存放在Spring中。

(2)MapperScannerConfigurer类:

spring容器对象会通过MapperScannerConfigurer对象完成dao代理对象的创建。

(3)原有的mybatis对象的功能被分割到spring中,在mybatis中只有额外服务,比如日志输出服务等

(4)数据库连接池

2.书写。(在spring配置文件中书写)

(1)配置数据库连接池:

使用阿里云的druid数据库连接池,并实现数据库连接三要素的书写

<bean id="dataSources" class="ocm.alibaba.druid.pool.DruidDataSources">

    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>

    <property name="url" value="就是地址"/>

    <property name="username" value=""/>

    <property name="password" value""/>

</bean>

(2)配置SqlSessionFactoryBean:

<bean id="起名" class="org.mybatis.spring.SqlSessionFactoryBean">

    <property name="configLocation" value="classpath:mybatis.xml"/>   //就是这一步:                 InputStream in = Resources.getResourcesAsStream("mybatis位置");

         sqlSessionFactoryBuilder.build(in);

    <property name="dataSoueces" ref="dataSources"/>

    <property name="typeAliasesPackage" value="实体类的位置"/>   //就是原先的实体类别名映射服务,如果不额外加名就默认返回首字母小写的实体类名称

</bean>

(3)配置MapperScannerConfigurer

<bean id="mapperScannerConfigurer" class = "org.mybatis.spring.mapper .MapperScannerConfigurer">

<property name="sqlSessionFactoryBeanName" value="就是你的Factorybean名字"/>

<property name="basePackage" value="要申请dao代理的包的位置"/>

</bean>

四. 测试一下

自己测哈。

我这里测试成功,数据成功删除。

结束

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值