1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>org.example</groupId>
  7. <artifactId>Spring-Mybatis</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <properties>
  10. <maven.compiler.source>8</maven.compiler.source>
  11. <maven.compiler.target>8</maven.compiler.target>
  12. </properties>
  13. <dependencies>
  14. <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
  15. <!--junit-->
  16. <dependency>
  17. <groupId>org.junit.jupiter</groupId>
  18. <artifactId>junit-jupiter-api</artifactId>
  19. <version>5.8.1</version>
  20. <scope>test</scope>
  21. </dependency>
  22. <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
  23. <!--mybatis-->
  24. <dependency>
  25. <groupId>org.mybatis</groupId>
  26. <artifactId>mybatis</artifactId>
  27. <version>3.5.7</version>
  28. </dependency>
  29. <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
  30. <!--mysql-connector-java-->
  31. <dependency>
  32. <groupId>mysql</groupId>
  33. <artifactId>mysql-connector-java</artifactId>
  34. <version>8.0.25</version>
  35. </dependency>
  36. <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
  37. <!--spring相关-->
  38. <dependency>
  39. <groupId>org.springframework</groupId>
  40. <artifactId>spring-webmvc</artifactId>
  41. <version>5.3.13</version>
  42. </dependency>
  43. <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
  44. <dependency>
  45. <groupId>org.springframework</groupId>
  46. <artifactId>spring-jdbc</artifactId>
  47. <version>5.3.13</version>
  48. </dependency>
  49. <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
  50. <!--aspectJ AOP 织入器-->
  51. <dependency>
  52. <groupId>org.aspectj</groupId>
  53. <artifactId>aspectjweaver</artifactId>
  54. <version>1.9.7</version>
  55. <scope>runtime</scope>
  56. </dependency>
  57. <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
  58. <!--mybatis-spring整合包 【重点】-->
  59. <dependency>
  60. <groupId>org.mybatis</groupId>
  61. <artifactId>mybatis-spring</artifactId>
  62. <version>2.0.6</version>
  63. </dependency>
  64. </dependencies>
  65. <!--静态访问资源类-->
  66. <build>
  67. <resources>
  68. <resource>
  69. <directory>src/main/java</directory>
  70. <includes>
  71. <include>**/*.properties</include>
  72. <include>**/*.xml</include>
  73. </includes>
  74. <filtering>true</filtering>
  75. </resource>
  76. </resources>
  77. </build>
  78. </project>

要和 Spring 一起使用 MyBatis,需要在 Spring 应用上下文中定义至少两样东西:一个 SqlSessionFactory 和至少一个数据映射器类。

在 MyBatis-Spring 中,可使用SqlSessionFactoryBean来创建 SqlSessionFactory。要配置这个工厂 bean,只需要把下面代码放在 Spring 的 XML 配置文件中

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
</bean>

spring整合:mybatis-spring

  • mybatis-config.xml
<?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>

    <typeAliases>
        <package name="com.study.pojo"/>
    </typeAliases>

<!--    <environments default="development">-->
<!--        <environment id="development">-->
<!--            <transactionManager type="JDBC"/>-->
<!--            <dataSource type="POOLED">-->
<!--                <property name="driver" value="com.mysql.jdbc.cj.Driver"/>-->
<!--                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf8"/>-->
<!--                <property name="username" value="root"/>-->
<!--                <property name="password" value="123456"/>-->
<!--            </dataSource>-->
<!--        </environment>-->
<!--    </environments>-->

<!--    <mappers>-->
<!--        <package name="com.study.dao"/>-->
<!--    </mappers>-->
</configuration>
  • spring 的xml文件
<?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的-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf8"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <property name="mapperLocations" value="classpath:com/study/dao/*.xml"/>
    </bean>

    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory" />
    </bean>

    <bean id="userDao" class="com.study.dao.UserDaoImpl">
        <property name="sqlSessionTemplate" ref="sqlSessionTemplate"/>
    </bean>
</beans>
  • 实体类
package com.study.pojo;

public class User {
    private int id;
    private int age;
    private String name;
    private String username;
    private String password;

    public User(int id, int age, String name, String username, String password) {
        this.id = id;
        this.age = age;
        this.name = name;
        this.username = username;
        this.password = password;
    }

    public User() {
    }

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

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
  • dao包下
  • UserMapper接口
package com.study.dao;

import com.study.pojo.User;

import java.util.List;

public interface UserMapper {
    List<User> select();
}
  • UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.study.dao.UserMapper">
    <select id="select" resultType="user">
        select * from mybatis.test;
    </select>
</mapper>
  • UserDaoImpl
package com.study.dao;

import com.study.pojo.User;
import org.mybatis.spring.SqlSessionTemplate;

import java.util.List;

public class UserDaoImpl implements UserMapper{
    private SqlSessionTemplate sqlSessionTemplate;

    public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
        this.sqlSessionTemplate = sqlSessionTemplate;
    }


    @Override
    public List<User> select() {
        UserMapper mapper = sqlSessionTemplate.getMapper(UserMapper.class);
        return mapper.select();
    }
}
  • Test
    @Test
    public void testUnit(){
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-dao.xml");
        UserMapper mapper = context.getBean("userDao", UserMapper.class);
        List<User> list = mapper.select();
        for (User user : list) {
            System.out.println(user);
        }
    }

在基础的 MyBatis 用法中,是通过 SqlSessionFactoryBuilder 来创建 SqlSessionFactory 的。而在 MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来创建。

在 MyBatis 中,你可以使用 SqlSessionFactory 来创建 SqlSession。一旦你获得一个 session 之后,你可以使用它来执行映射了的语句,提交或回滚连接,最后,当不再需要它的时候,你可以关闭 session。

SqlSessionFactory有一个唯一的必要属性:用于 JDBC 的 DataSource。这可以是任意的 DataSource 对象,它的配置方法和其它 Spring 数据库连接是一样的。

一个常用的属性是 configLocation,它用来指定 MyBatis 的 XML 配置文件路径。它在需要修改 MyBatis 的基础配置非常有用。通常,基础配置指的是 < settings> 或 < typeAliases>元素。

需要注意的是,这个配置文件并不需要是一个完整的 MyBatis 配置。确切地说,任何环境配置(<environments>),数据源(<DataSource>)和 MyBatis 的事务管理器(<transactionManager>)都会被忽略。SqlSessionFactoryBean 会创建它自有的 MyBatis 环境配置(Environment),并按要求设置自定义环境的值。

SqlSessionTemplate 是 MyBatis-Spring 的核心。作为 SqlSession 的一个实现,这意味着可以使用它无缝代替你代码中已经在使用的 SqlSession。

模板可以参与到 Spring 的事务管理中,并且由于其是线程安全的,可以供多个映射器类使用,你应该总是用 SqlSessionTemplate 来替换 MyBatis 默认的 DefaultSqlSession 实现。在同一应用程序中的不同类之间混杂使用可能会引起数据一致性的问题。

可以使用 SqlSessionFactory 作为构造方法的参数来创建 SqlSessionTemplate 对象。