一文吃透Spring集成MyBatis

 更新时间:2023年05月26日 10:25:03   作者:几分醉意.  
spring能集成很多的框架,是spring一个优势功能,通过集成功能,让开发人员使用其他框架更方便,本文将给大家详细介绍Spring如何集成MyBatis,,需要的朋友可以参考下

💖集成思路

spring能集成很多的框架,是spring一个优势功能。通过集成功能,让开发人员使用其他框架更方便。集成使用的是spring ioc 核心技术。

✨怎么使用MyBatis

使用mybatis,需要创mybatis框架中的某些对象,使用这些对象,就能使用mybatis提供的功能了。

分析: mybatis执行sql语句,需要使用那些对象?
 1. 需要有Dao接口的代理对象,例如StudentDao接口,需要一个它的代理对象,使用 SqlSession.getMapper(StudentDao.class),得到dao代理对象。
 2. 需要有SqlSessionFactory,创建SqlSessionFactory对象,才能使用openSession(得到SqlSession对象。
 3. 数据源DataSource对象,使用一个更强大,功能更多的连接池对象代替mybatis自己的PooledDataSource。

✨集成的步骤

实现步骤:
1.使用的mysql库, 使用学生表 student2(id int 主键列, 自动增长,
                                    name varchar(80),
                                    age int)

2.创建maven项目

3.加入依赖gav
  spring依赖, mybatis依赖, mysql驱动。 junit依赖
  mybatis-spring依赖(mybatis网站上提供的,用来在spring项目中,创建mybatis对象)
  spring有关事务的依赖。

  mybatis和spring整合的时候, 事务是自动提交的。

4.创建实体类Student

5.创建Dao接口和mapper文件写sql语句

6.写mybatis主配置文件

7.创建service接口和他的实现类

8.创建spring的配置文件
  1)声明数据源DataSource,使用的阿里的Druid连接池
  2) 声明SqlSessionFactoryBean类,在这个类内部创建的是SqlSessionFactory对象。
  3)声明MapperScannerConfiguration类,在内部创建dao代理对象,
     创建的对象都放在spring容器中。

  4)声明Service对象,把3)的中dao赋值给service属性

9.测试dao访问数据库

✨pom加入依赖

<dependencies>
    <!--测试-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!--spring依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
    <!--spring事务依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
    <!--mybatis依赖-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.1</version>
    </dependency>
    <!--mybatis和spring集成-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.1</version>
    </dependency>
    <!--mysql驱动-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.9</version>
    </dependency>
    <!--阿里的连接池-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.12</version>
    </dependency>
  </dependencies>
  <build>
    <!--用mybatis就要用到这个插件 编译java目录下,除了java文件,还编译xml和properties文件-->
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
      </resource>
    </resources>
  </build>
</project>

✨创建MyBatis使用代码

1.创建实体类,生成get、set和toString方法。

public class Student {
    private Integer id;
    private String name;
    private Integer age;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

2.创建Dao接口,在里面写方法。

public interface StudentDao {
    //添加操作
    int insertStudent(Student student);
    //查询操作
    List<Student> selectStudents();
}

3.创建mapper文件,写SQL。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="youfei1_v.Dao.StudentDao">
    <!-- 使用insert,update,select标签写sql -->
    <insert id="insertStudent" >
        insert into student2(name,age) values (#{name},#{age})
    </insert>
    <select id="selectStudents" resultType="youfei1_v.domain.Student">
        select id,name ,age from student2
    </select>
</mapper>

4.创建Mybatis主配置文件。

注意:Spring集成MyBatis,MyBatis主配置文件里面不需要指定数据源了,下面会介绍在哪里指定。基本上Mybatis主配置文件里面就设置个日志、别名和其它的mapper文件。

<?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>
    <!--设置日志-->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <!--指定其它mapper文件的位置,目的是找到其它文件的sql语句-->
    <mappers>
        <!--使用mapper的resource属性指定mapper文件的路径。
        这个路径是从类路径根目录开始
        使用注意:mapper文件的路径使用 / 分割路径
                 一个mapper resource 指定一个mapper文件
        -->
        <!--<mapper resource="youfei1_v/dao/StudentDao.xml"/>-->
        <!--name:mapper文件所在的包名
        满足要求才能使用这种方式:
        1.mapper文件和dao接口在同一目录
        2.mapper文件和dao接口名称一致
        -->
        <package name="youfei1_v.Dao"/>
    </mappers>
</configuration>

✨创建Service类

1.创建service接口。

public interface StudentService {
    int addStudent(Student student);
    List<Student> queryStudent();
}

2.实现service接口。

public class StudentServiceImpl implements StudentService {
    private StudentDao studentDao; //创建这个dao对象和set方法
    public void setStudentDao(StudentDao studentDao) {
        this.studentDao = studentDao;
    }
    @Override
    public int addStudent(Student student) {
        int rows = studentDao.insertStudent(student); //方法中调用studentDao对象的方法
        return rows;
    }
    @Override
    public List<Student> queryStudent() {
        List<Student> students = studentDao.selectStudents();
        return students;
    }
}

✨创建Spring配置文件和测试集成MyBatis

1.创建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"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    <!--加载外部的属性配置文件-->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!--声明数据源DataSource 德鲁伊-->
    <bean id="myDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <property name="url" value="jdbc:mysql://localhost:3306/springdb"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>
    <!--声明SqlSessionFactoryBean,在这个类的内部,创建SqlSessionFactory bean的id就代表创建SqlSessionFactory对象-->
    <bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--指定数据源-->
        <property name="dataSource" ref="myDataSource" /> <!--用的是什么数据源的id-->
        <!--指定mybatis主配置文件
            Resource可以直接使用 value属性赋值。
        -->
        <property name="configLocation" value="classpath:mybatis.xml" />
    </bean>
    <!--
      相当于:SqlSessionFactory  factory  = new SqlSessonFactoryBuider.build(classpath:mybatis.xml)
    -->
    <!--声明MapperScannerConfigurer
        SqlSession.getMapper(StudentDao.class)
        MapperScannerConfigurer作用是:
        循环basePackage所表示的包,把包中的每个接口都找到,调用SqlSession.getMapper
        把每个dao接口都创建出dao对象 ,dao代理对象放在容器中。
        ApplicationContext ctx = ....
        SqlSessionFactory sqlSessionFactory  = ctx.getBean("factory");
        SqlSession session = sqlSessionFactory.openSession();
        for(接口: com.bjpowernode.dao){
             接口 对象 =  session.getMapper(接口)
             springMap.put(接口名的首字母小写, 对象)  //创建dao代理,这个dao代理的对象的名字是这个接口的首字母小写。也就是bean的id
        }
    -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--指定SqlSessionFactory对象的名称-->
        <property name="sqlSessionFactoryBeanName" value="factory" />
        <!--指定基本包,dao接口所在的包名-->
        <property name="basePackage" value="youfei1_v.Dao" /><!--创建dao代理,这个dao代理的对象的名字是这个接口名的首字母小写。也就是bean的id-->
    </bean>
    <!--声明service-->
    <bean id="studentService" class="youfei1_v.service.impl.StudentServiceImpl">
        <property name="studentDao" ref="studentDao" /> <!--set注入:把dao代理赋值给StudentServiceImpl类中的StudentDao对象-->
    </bean>                         <!--ref用的就是上面的创建出来的dao代理,的id值,这个id值就是接口名的首字母小写-->
    <!--ref="studentDao" :studentDao指的是Student这个接口的代理。上面那个bean,创建出Student接口的代理,这个代理的id就是接口名字小写studentDao-->
</beans>

2.测试

✨使用外部属性配置文件

1.创建一个.properties的文件

2.在spring配置文件中引用

以上就是一文吃透Spring集成MyBatis的详细内容,更多关于Spring集成MyBatis的资料请关注脚本之家其它相关文章!

相关文章

  • Spring Data JPA命名约定查询实现方法

    Spring Data JPA命名约定查询实现方法

    这篇文章主要为大家介绍了Spring Data JPA命名约定查询实现方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • 基于CyclicBarrier和CountDownLatch的使用区别说明

    基于CyclicBarrier和CountDownLatch的使用区别说明

    这篇文章主要介绍了基于CyclicBarrier和CountDownLatch的使用区别说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • CountDownLatch源码解析之await()

    CountDownLatch源码解析之await()

    这篇文章主要为大家详细解析了CountDownLatch源码之await方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • 记一次线上SpringCloud Feign请求服务超时异常排查问题

    记一次线上SpringCloud Feign请求服务超时异常排查问题

    这篇文章主要介绍了记一次线上SpringCloud Feign请求服务超时异常排查问题,本项目与下游项目均注册在Eureka上面,对这个1秒就超时感到很迷惑,于是开始查阅底层源码之旅。需要的朋友可以参考下
    2022-01-01
  • spring boot 添加admin监控的方法

    spring boot 添加admin监控的方法

    这篇文章主要介绍了spring boot 添加admin监控的相关知识,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-02-02
  • java与微信小程序实现websocket长连接

    java与微信小程序实现websocket长连接

    这篇文章主要为大家详细介绍了java与微信小程序实现websocket长连接,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • Java join 线程控制用法

    Java join 线程控制用法

    Java join 线程控制用法,需要的朋友可以参考一下
    2013-03-03
  • 详解在Spring Boot中使用JPA

    详解在Spring Boot中使用JPA

    本篇文章主要介绍了详解在Spring Boot中使用JPA,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Mybatis-Plus之ID自动增长的设置实现

    Mybatis-Plus之ID自动增长的设置实现

    本文主要介绍了Mybatis-Plus之ID自动增长的设置实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Spring实现默认标签解析流程

    Spring实现默认标签解析流程

    这篇文章主要为大家详细介绍了Spring实现默认标签解析流程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01

最新评论