11.Spring整合Mybatis

11.Spring整合Mybatis

11.1 搭建基础环境(跟着官网走)

​ 第一步:导入相关依赖

<dependencies>
    <!--junit单元测试-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13</version>
    </dependency>
    <!--mysql数据库-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.20</version>
    </dependency>
    <!--mybatis-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.5</version>
    </dependency>
    <!--spring整合mybatis-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>2.0.5</version>
    </dependency>
    <!--日志-->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    <!--spring全套-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.2.7.RELEASE</version>
    </dependency>
    <!--spring操作数据库-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.2.7.RELEASE</version>
    </dependency>
    <!--织入(切入点表达式)-->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.9.5</version>
    </dependency>
</dependencies>

​ 第二步: 将SqlSessionFactory注入到springIOC容器中

  • 由于spring要接管mybatis的SqlSessionFactory类所以需要注入到spring中
  • name属性可以指定mybatis相关配置文件的路径
<!--可使用 SqlSessionFactoryBean来创建 SqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <!--绑定mybatis配置文件位置-->
    <property name="configLocation" value="classpath:mybatis-config.xml"/>
    <!--绑定映射配置文件-->
    <property name="mapperLocations" value="com/xuan/mapper/UserMapper.xml"/>
    <!--起别名-->
    <property name="typeAliases" value="com.xuan.pojo.User"/>
</bean>

​ 第三步:SqlSessionFactory又关联到DataSource数据源,所以我们也需要将DataSource注入到spring中

  • 这里用的是Spring的数据源
  • 与此同时可以删除mybatis主配置文件的数据源
<!--用spring的数据源配置mybatis的配置-->
<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=UTF-8&amp;serverTimezone=UTC"/>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
</bean>

​ 第四步:有了SqlSessionFactory,我们可以用它创建功能几乎与SqlSession相等的SqlSessionTemplate

  • 由于该类没有set注入所以我们需要通过构造方法注入来创建sqlSessionTemplate对象并加入到springIOC容器中
<!--SqlSessionTemplate等价于我们使用的SqlSession-->
<!--由于没有set注入 所以我们使用构造方法注入-->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>

​ 第五步:编写UserMapper的实现类以将UserMapper实现类对象注入SpringIOC获得SqlSessionTemplate来执行方法

  • 通过set方法将SqlSessionTemplate注入进来
  • 调用SqlSessionTemplate参数执行方法
package com.xuan.mapper;

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

import java.util.List;

/**
 * xuan
 * 2020/7/16
 * 1870136088@qq.com
 **/
public class UserMapperImpl implements UserMapper{
    private SqlSessionTemplate sqlSessionTemplate;

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

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

    @Override
    public User findById(Integer id) throws Exception {
        return null;
    }
}

​ 第六步:将UserMapperImpl注入到springIOC容器中

<!--编写实现类将SqlSessionTemplate注入-->
<bean id="userMapperImpl" class="com.xuan.mapper.UserMapperImpl">
    <property name="sqlSessionTemplate" ref="sqlSessionTemplate"/>
</bean>

​ 第七步:编写测试

public class UserMapperTest2 {

    @Test
    public  void testFindAll() throws Exception {

        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserMapper users = context.getBean( "userMapperImpl",UserMapperImpl.class);
        for (User user : users.findAll()) {
            System.out.println(user);
        }
    }

}

-------------------------------测试成功----------------------------------

Spring整合Mybatis方法二

  • 关键类:SqlSessionDaoSupport

  • SqlSessionDaoSupport 是一个抽象的支持类,用来为你提供 SqlSession。调用 getSqlSession() 方法你会得到一个 SqlSessionTemplate,之后可以用于执行 SQL 方法

代码实现:

package com.xuan.mapper;

import com.xuan.pojo.User;
import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.support.SqlSessionDaoSupport;

import java.util.List;

public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper{
    @Override
    public List<User> findAll() throws Exception {
        UserMapper mapper = getSqlSession().getMapper(UserMapper.class);
        return mapper.findAll();
    }

}

关键配置:

<bean id="userMapperImpl2" class="com.xuan.mapper.UserMapperImpl2">
    <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值