将mybatis与spring进行整合,主要解决的问题就是讲SqlSessionFactory对象交由spring来管理,所以,该整合,只需要将SqlSessionFactory的对象生成器SqlSessionFactoryBean注册在spring容器中,再将其注入给Dao的实现类即可完成整合。

实现spring与mybatis的整合常用的方式:扫描的Mapper动态代理

spring就像插线板一样,mybatis框架是插头,可以很容易的组合到一起。mybatis插头插入spring插线板就是一个整体。

我们需要spring创建以下对象

1.独立的连接池对象,使用阿里的druid连接池

2.SqlSessionFactory对象

3.创建出dao对象

上面三个对象的创建,使用xml的bean标签

Spring集成MyBatis实现步骤:

先准备创建数据库,新建表

第一步:

新建maven项目

第二步:

加入maven的依赖

1.spring的依赖

2.mybatis依赖

3.mysql驱动

4.spring的事务的依赖

5.mybatis和spring集成的依赖:mybatis官方提供的,用来在spring项目中常见mybatis的SqlSessionFactory,dao对象的

 <dependencies>
    <!--测试单元依赖-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!--spring核心ioc依赖-->
    <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>
    <resources>
      <resource>
        <directory>src/main/java</directory><!--所在的目录-->
        <includes><!--包括目录下的.properties,.xml文件都会扫描到-->
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
      </resource>
    </resources>
  </build>

第三步:

创建Student实体类

package com.bjpowernode.domain;

public class Student {
    //属性名和列名一样
    private Integer id;
    private String name;
    private String email;
    private Integer age;
    //无参构造
    public Student() {
    }
    //有参构造
    public Student(Integer id, String name, String email, Integer age) {
        this.id = id;
        this.name = name;
        this.email = email;
        this.age = age;
    }
    //set、get方法
    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 String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", email='" + email + '\'' +
                ", age=" + age +
                '}';
    }
}

第四步:

创建dao接口和mapper文件

 

 第五步:

创建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>

    <!--settings:控制mybatis全局行为-->
    <settings>
        <!--设置mybatis输出日志-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

    <!--类别名-->
    <typeAliases>
        <package name="com.bjpowernode.domain"/>
     </typeAliases>
    <mappers>
        <!--一个mapper标签指定一个文件的位置。
            从类路径开始的路径信息。  target/clasess
            指定sql映射文件的位置,使用包的方式,一次性全部把包中的映射文件全部读取到
            -->
       <package name="com.bjpowernode.dao"/>
    </mappers>
</configuration>

第六步:

创建Service接口和实现类,属性是dao

Service接口实现类 定义StudentDao属性

package com.bjpowernode.service.impl;

import com.bjpowernode.dao.StudentDao;
import com.bjpowernode.domain.Student;
import com.bjpowernode.service.StudentService;

import java.util.List;

public class StudentServiceImpl implements StudentService {
    //引用类型
    private StudentDao studentDao;
    //使用set注入赋值
    public void setStudentDao(StudentDao studentDao) {
        this.studentDao = studentDao;
    }

    @Override
    public int addStudent(Student student) {
        int num = studentDao.insertStudent(student);
        return num;
    }

    @Override
    public List<Student> selectStudent() {
        List<Student> studentList = studentDao.selectStudent();
        return studentList;
    }
}

 第七步:

创建spring的配置文件:声明mybatis的对象交给spring创建

1.数据源

2.SqlSessionFactory

3.Dao对象

4.声明自定义的service

<?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.url}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
            <!--连接池最多可以连接多少数据库,默认20-->
            <property name="maxActive" value="20"/>
    </bean>

    <!--声明mybatis中提供的SqlSessionFactoryBean类,这个类内部创建SqlSessionFactory-->
    <bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!--set注入,把数据库连接池赋给了dataSource属性-->
            <property name="dataSource" ref="MyDataSource"/>
            <!--
            mybatis主配置文件的位置,因为是在spring中指定mybatis主配置文件,所以要用classpath:
            configLocation:属性是Resource类型的,负责读取配置文件
            赋值使用 value 指定文件的路径
            -->
            <property name="configLocation" value="classpath:mybatis.xml"/>

    </bean>
    <!--创建dao对象,使用SqlSession的getMapper(StudentDao.class)
        MapperScannerConfigurer:在内部调用getMapper()生成每个dao接口的代理对象
    -->
     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
         <!--指定SqlSessionFactory对象的id-->
         <property name="sqlSessionFactoryBeanName" value="SqlSessionFactory"/>
         <!--指定包名,包名是dao接口的包名
            MapperScannerConfigurer会扫描这个包中所有的接口,
            把每个接口都执行一次getMapper()方法,得到每个接口的dao对象
            创建好的dao对象放入spring容器中
            创建好的dao对象名称就是接口名首字母小写,例如studentDao
         -->
         <property name="basePackage" value="com.bjpowernode.dao"/>
     </bean>
        <!--声明Service-->
    <bean id="ServiceStudent" class="com.bjpowernode.service.impl.StudentServiceImpl">
        <property name="studentDao" ref="studentDao"/>
    </bean>
</beans>

第八步:

创建测试类,获取Service对象,通过service调用dao完成数据库的访问

  /*使用Service*/
    @Test
    public void test03(){
        //读取spring主配置文件
        String in = "applicationContext.xml";
        ApplicationContext ac = new ClassPathXmlApplicationContext(in);
        StudentService service = (StudentService) ac.getBean("ServiceStudent");
        Student student = new Student(4002,"裴元虎","peiyuanhu@163.com",26);
        int i = service.addStudent(student);
        System.out.println("添加"+i+"行数据");
    }

    @Test
    public void test04(){
        //读取spring主配置文件
        String in = "applicationContext.xml";
        ApplicationContext ac = new ClassPathXmlApplicationContext(in);
        StudentService service = (StudentService) ac.getBean("ServiceStudent");
        List<Student> studentList = service.selectStudent();
        for (Student stu:studentList) {
            System.out.println(">>>>"+stu);
        }
    }

--------------------------------------------------------------------------------

为了方便修改数据库连接信息,我们自己定义个文件专门放数据库连接信息

第一步:

创建数据库连接信息jdbc.properties文件

jdbc.url=jdbc:mysql://localhost:3306/bjpowernode?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=123456

第二步:

在spring主配置配置文件中指定连接数据库信息文件


    <!--数据库配置信息,写在一个单独的文件里,执行文件的路径-->
    <context:property-placeholder location="classpath:jdbc.properties"/>

第三步:

在主配置文件中用${}指定连接信息

例如,${jdbc.url}就是jdbc.properties文件中=号左边的值

 <property name="url"
                     value="${jdbc.url}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐