Spring-整合Mybatis

Posted xiaoqiqistudy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring-整合Mybatis相关的知识,希望对你有一定的参考价值。

  • 首先我们需要导入一个包,这个包非常重要,MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.3.2</version>
</dependency>
  • 要和 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>

注意:SqlSessionFactory 需要一个 DataSource(数据源)。 这可以是任意的 DataSource,只需要和配置其它 Spring 数据库连接一样配置它就可以了。

  • 在基础的 MyBatis 用法中,是通过 SqlSessionFactoryBuilder 来创建 SqlSessionFactory 的。 而在 MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来创建。
  • mapperLocations 属性接受多个资源位置。这个属性可以用来指定 MyBatis 的映射器 XML 配置文件的位置。

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

  • 在 MyBatis 中,你可以使用 SqlSessionFactory 来创建 SqlSession。一旦你获得一个 session 之后,你可以使用它来执行映射了的语句,提交或回滚连接,最后,当不再需要它的时候,你可以关闭 session。使用 MyBatis-Spring 之后,你不再需要直接使用 SqlSessionFactory 了,因为你的 bean 可以被注入一个线程安全的 SqlSession,它能基于 Spring 的事务配置来自动提交、回滚、关闭 session。

SqlSessionTemplate 是 MyBatis-Spring 的核心。

作为 SqlSession 的一个实现,这意味着可以使用它无缝代替你代码中已经在使用的 SqlSessionSqlSessionTemplate 是线程安全的,可以被多个 DAO 或映射器所共享使用。

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

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

为什么使用构造器,而不直接属性?

因为没有对应set方法;

现在,这个 bean 就可以直接注入到你的 DAO bean 中了。你需要在你的 bean 中添加一个 SqlSession 属性,就像下面这样:

public class UserDaoImpl implements UserDao 

  private SqlSession sqlSession;

  public void setSqlSession(SqlSession sqlSession) 
    this.sqlSession = sqlSession;
  

  public User getUser(String userId) 
    return sqlSession.selectOne("org.mybatis.spring.sample.mapper.UserMapper.getUser", userId);
  
<bean id="userDao" class="org.mybatis.spring.sample.dao.UserDaoImpl">
  <property name="sqlSession" ref="sqlSession" />
</bean>

Spring整合Mybatis


 1.导包

    <dependencies>
        <!--单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>

        <!--mybatis的包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.1</version>
        </dependency>

        <!--连接数据库的驱动包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

        <!--spring的包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.24.RELEASE</version>
        </dependency>

        <!--mybatis-srping整合包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.1</version>
        </dependency>

        <!--spring-jdbc的包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.3.24.RELEASE</version>
        </dependency>

    </dependencies>

解决资源导出问题

  <build>
        <!--希望maven在导出项目的时,能够将我们的配置及资源导出-->
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

2.编写实体类

public class User 
    private int id;
    private String name;
    private String pwd;

    public User() 
    

    public User(int id, String name, String pwd) 
        this.id = id;
        this.name = name;
        this.pwd = pwd;
    

    public int getId() 
        return id;
    

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

    public String getName() 
        return name;
    

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

    public String getPwd() 
        return pwd;
    

    public void setPwd(String pwd) 
        this.pwd = pwd;
    

    @Override
    public String toString() 
        return "User" +
                "id=" + id +
                ", name=‘" + name + ‘\‘‘ +
                ", pwd=‘" + pwd + ‘\‘‘ +
                ‘‘;
    

3.业务接口

public interface UserDao 

  //根据id查询User
    User selectUserById(int id);

//    查询所有的用户
  List<User> selectAllUser();


4.mapper映射文件

<?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="org.west.dao.UserDao">
    <select id="selectUserById" resultType="org.west.pojo.User">
        select *from mybatis.user where id=#id
    </select>

    <select id="selectAllUser" resultType="org.west.pojo.User">
        select *from user
    </select>
</mapper>

5.配置mybatis文件

   在mybatis的配置文件中我们只用写简单的设置,别名,mapper映射文件就OK了.

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


    <mappers>
        <mapper resource="org/west/dao/userMapper.xml"/>
    </mappers>
</configuration>

6.接口实现类增加一个属性Session

public class UserDaoImpl implements UserDao
    SqlSessionTemplate sqlSession;

    public void setSqlSession(SqlSessionTemplate sqlSession) 
        this.sqlSession = sqlSession;
    

    public User selectUserById(int id) 

        UserDao mapper = sqlSession.getMapper(UserDao.class);


        return  mapper.selectUserById(id);
    

    public List<User> selectAllUser() 
        UserDao mapper = sqlSession.getMapper(UserDao.class);

        return mapper.selectAllUser();
    

7.编写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
       ">

   <!--1.配置数据源-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;charsetEncoding=UTF-8"/>
    <property name="username" value="root"/>
    <property name="password" value="123456"/>
</bean>

    <!--2.配置sqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!--关联mybatis的配置文件-->
        <property name="configLocation" value="classpath:Mybatis-config.xml"/>
    </bean>

<!--创建sqlSession 通过sqlSessionFactory来创建-->
    <bean id="sqlSeesion" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>

   <!--将接口的实现类交给spring来管理-->
<bean id="userDaoImpl" class="org.west.dao.UserDaoImpl">
    <property name="sqlSession" ref="sqlSeesion"/>
</bean>


</beans>

8.测试类

public class Testya 
    @Test
    public void test()
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDaoImpl = (UserDao) context.getBean("userDaoImpl");
        List<User> users = userDaoImpl.selectAllUser();
        for (User user : users) 
            System.out.println(user);
        
    

 

以上是关于Spring-整合Mybatis的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis与Spring的整合

SSM整合(springMVC+mybatis)

Spring Boot2 系列教程 | SpringBoot 整合 Mybatis

Spring Boot(19)——使用Mybatis

Spring Boot进阶系列二

SpringBoot--整合Mybatis & 删除无效的文件和文件夹