MyBatis和Spring的整合

MyBatis和Spring整合

Spring支持对MyBatis进行IOPAOP等操作,这也是SSM框架被使用的基础 。想要Spring能对MyBatis进行支持的话,需要导入相对应的jar包,这里使用maven导入

Maven jar包:

  <dependencies>

		<!-- 支持@Text的包-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
		
		<!-- 支持Mybatis的包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>

		<!-- 支持mysql的包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.19</version>
        </dependency>

		<!--支持Spring的包1 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.5</version>
        </dependency>
		
		<!--支持Spring的包2 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.3.6</version>
        </dependency>
		
		<!--支持AOP织入器的包 -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.6</version>
        </dependency>


		<!--支持MyBatis和Spring连接的包 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.6</version>
        </dependency>

    </dependencies>

Spring配置

在单独使用MyBatis时,我们需要对MyBatis中的JDBC的连接进行专门的XML配置,还有sqlSessionFactory繁琐的实例化
在我们使用Spring来连接MyBatis时,我们就可以让Spring来对这些内容进行Bean配置,也就是ioc注入等。非常方便。

bean.xml配置:

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

2:数据源配置

而后我们配置数据源,也就是配置MyBatis连接数据库的数据源
它可以大大简化我们MyBatis的配置,需要MyBatis中等连接池等设置我们还是可以在MyBatis-config.xml中配置

<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/test?characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=UTC&amp;rewriteBatchedStatements=true"/>
        <property name="username" value="root"/>
        <property name="password" value="123321"/>
    </bean>

3:sqlSessionFactory配置

我们还需要在Spring中配置sqlSessionFactory,并且关联MyBatis来进行操作。

然后把数据源也就是dataSource导入到sqlSessionFactory中.

当我们配置这个连接时,mybatis-config.xml就不能再去连接Mapper.xml,它们之间就不能有任何连接,如果一定有连接,只需要再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:Mapper.xml"/>
    </bean>

4:sqlSessionTemplate配置

sqlSessionTemplate配置需要把sqlSessionFactory传入到SqlSessionTemplate类中,但SqlSessionTemplate是拥有有参构造所以只能使用构造器注入(constructor-arg)

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

5:实例化sqlSessionTemplate

先建立一个mapper接口:


package com.nicht.mapper;

import com.nicht.pojo.User;
import java.util.List;

public interface UserMapper {
    //简单查询功能
    List<User> selectUser();
}

在我们Spring中配置完了SqlSessionTemplate,我们就可以在这里调用了,但要想调用的话,我们需要在Spring的配置中把sqlSessionTemplate注入

注入sqlSessionTemplate:

 <bean id="userMapper" class="com.nicht.mapper.UserMapperImpl">
        <property name="sqlSessionTemplate" ref="sqlSessionTemplate"/>
    </bean>

实现mapper接口:

package com.nicht.mapper;

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

import java.util.List;

public class UserMapperImpl   implements UserMapper{
    private SqlSessionTemplate sqlSessionTemplate;

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

    }
    @Override
    public List<User> selectUser() {
        UserMapper mapper =  sqlSessionTemplate.getMapper(UserMapper.class);
        return mapper.selectUser();

    }
}

这样我们调用时,就无需再去创建sqlSessionFactory等繁琐的java类了

6:测试

public class MyTest {
   @Test
    public  void test() throws IOException{
       ApplicationContext context =  new ClassPathXmlApplicationContext("bean.xml");
       UserMapper mapper = (UserMapper) context.getBean("userMapper");
       for (User user : mapper.selectUser()) {
           System.out.println(user);
       }
   }
}

升级简化版:依靠sqlSessionDaoSupport类

使用sqlSessionDaoSupport不需要去实例化且配置sqlSessionTemplate,,只需要把sqlSessionFactory传给sqlSessionDaoSupport就行了

我们让实现Mapper接口类 继承一个 SqlSessionDaoSupport父类

package com.nicht.mapper;

import com.nicht.pojo.User;
import org.mybatis.spring.support.SqlSessionDaoSupport;

import java.util.List;

public class UserMapperImpl extends SqlSessionDaoSupport implements UserMapper{
    @Override
    public List<User> selectUser() {
        return getSqlSession().getMapper(UserMapper.class).selectUser();
    }
}

虽然实现类没有定义sqlSessionFactory类,但因为我们继承了sqlSessionDaoSupport父类。所以我们可以直接把sqlSessionFactory传进去。


<bean id="userMapper1" class="com.nicht.mapper.UserMapperImpl">
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>

这样我们就完成了,也省略了许多关于sqlSessionTemplate的步骤。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值