Spring-Mybatis整合

Spring-Mybatis整合

1 导入jar包

1.1 junit
1.2 mybatis
1.3 mysql相关的
1.4 spring-jdbc
1.5 mybatis-spring
1.6 mysql-connect-java
<dependencies>
    <!-- https://mvnrepository.com/artifact/junit/junit -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.25</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.7</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.11</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.3.11</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>2.0.6</version>
    </dependency>

</dependencies>

2 Mybatis回忆

2.1 编写实体类

pojo

package com.xzzlx.pojo;

public class User {

  private long id;
  private String name;


  public long getId() {
    return id;
  }

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


  public String getName() {
    return name;
  }

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

  public User(long id, String name) {
    this.id = id;
    this.name = name;
  }

  public User() {
  }

  @Override
  public String toString() {
    return "User{" +
            "id=" + id +
            ", name='" + name + '\'' +
            '}';
  }
}
2.2 编写核心配置文件

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.xzzlx.pojo"/>
    </typeAliases>

    <!--spring-config.xml中已经配置过了!-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://192.168.18.176:3306/win_database01?useSSL=true&amp;
                                            useUnicode=true&amp;characterEncoding=UTF-8&amp;
                                            serverTimeZone=Aisa/Shanghai"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="com/xzzlx/dao/PersonMapper.xml"/>
    </mappers>

</configuration>
2.3 编写接口

UserMapper

package com.xzzlx.mapper;

import com.xzzlx.pojo.User;

import java.util.List;

public interface UserMapper {
    /**
     * 查询所有用户
     * @return
     */
    List<User> selectUser();
}
2.4 编写Mapper.xml

UserMapper.xml

<?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="com.xzzlx.mapper.UserMapper">
    <select id="selectUser" resultType="user">
        select * from user
    </select>
</mapper>
2.5 测试

3 整合

在这里插入图片描述

有数据源可以生成sqlSessionFactory

有sqlSessionFactory可以生成sqlSessionTemplate

有sqlSessionTemplate可以执行我们的操作

所以,先写数据源,第二写sqlSessionFactory,第三写sqlSessionTemplate,第四写sqlSessionTemplate的实现类,第五将sqlSessionTemplate整合到spring中,第六写我们测试操作。

3.1 编写数据源配置

在resources中创建spring-dao.xml

创建数据源的Bean–dataSource

<!-- DataSource:使用Spring的数据源替换Mybatis的配置    c3p0 dbcp druid
    我们这里使用Spring提供的JDBC
    所以引入依赖我们引入了spring-jdbc  org.springframework.jdbc.datasource-->

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://192.168.18.176:3306/win_database01?
                                useSSL=true&amp;useUnicode=true&amp;
                                characterEncoding=UTF-8&amp;
                                serverTimeZone=Aisa/Shanghai"/>
    <property name="username" value="root"/>
    <property name="password" value="123456"/>
</bean>
3.2 sqlSessionFactory

在spring-dao.xml继续注册sqlSessionFactory的Bean

并且绑定Mybatis配置文件和UserMapper.xml文件

<!--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="classpath:com/xzzlx/mapper/*.xml"/>
</bean>
3.3 sqlSessionTemplate

在spring-dao.xml继续注册sqlSessionTemplate的Bean

<!--SqlSessionTemplate就是我们平时用的sqlSession!-->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
    <!--只能使用构造器注入sqlSessionFactory,因为它没有set方法-->
    <constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
3.4 给接口加实现类

Spring要接管对象,自动创建。

而mybatis的无法自动创建,只能手动写个set方法。

而这个方法就是以前我们mybatis做的事情,把它变成业务类来做。

在com.xzzlx.mapper中创建UserMapperImpl类

package com.xzzlx.mapper;

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

import java.util.List;

public class UserMapperImpl implements UserMapper{
    // 我们的所有操作,在原来都是使用sqlSession来执行的
    // 现在使用sqlSessionTemplate

    private SqlSessionTemplate sqlSession;

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

    @Override
    public List<User> selectUser() {
        return sqlSession.getMapper(UserMapper.class).selectUser();
    }
}
3.5 类注入Spring

将sqlSessionTemplate整合到spring中

<import resource="spring-dao.xml"/>

<bean id="userMapper" class="com.xzzlx.mapper.UserMapperImpl">
    <property name="sqlSessionTemplate" ref="sqlSession"/>
</bean>
3.6 测试使用

在测试类中创建MyTest

import com.xzzlx.mapper.UserMapper;
import com.xzzlx.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.IOException;

public class MyTest {
    @Test
    public void test01() throws IOException {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserMapper userMapper = context.getBean("userMapper", UserMapper.class);
        for (User user : userMapper.selectUser()) {
            System.out.println(user);
        }
    }
}
3.7 spring-dao.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"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!-- DataSource:使用Spring的数据源替换Mybatis的配置    c3p0 dbcp druid
    我们这里使用Spring提供的JDBC
    所以引入依赖我们引入了spring-jdbc  org.springframework.jdbc.datasource
    -->

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://192.168.18.176:3306/win_database01?
                                    useSSL=true&amp;useUnicode=true&amp;
                                    characterEncoding=UTF-8&amp;
                                    serverTimeZone=Aisa/Shanghai"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>

    <!--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="classpath:com/xzzlx/mapper/*.xml"/>
    </bean>

    <!--SqlSessionTemplate就是我们平时用的sqlSession!-->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <!--只能使用构造器注入sqlSessionFactory,因为它没有set方法-->
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>

</beans>
3.8 第二种整合方式
3.8.1 数据源和工厂

前面3.1、3.2都是一样的,就是获取sqlSessionTemplate的方式不一样

3.8.2 写实现类

直接3.4写实现类

package com.xzzlx.mapper;

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

import java.util.List;

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

SqlSessionDaoSupport是一个接口的支持类

通过SqlSessionDaoSupport的getSqlSession()方法可以得到sqlSessionTemplate

3.8.3 注册Bean

到applicationContext.xml中注册Bean

这里需要给SqlSessionDaoSupport的父类传进去一个属性值sqlSessionFactory,使用了spring的嵌套注入

需要 一个sqlSessionFactory的对象

<bean id="userMapper2" class="com.xzzlx.mapper.UserMapperImpl2">
    <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>

然后到测试类中进行测试即可

import com.xzzlx.mapper.UserMapper;
import com.xzzlx.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.IOException;

/**
 * @author:zhangheng
 * @Description:
 * @date:2021/10/19 13:24
 */
public class MyTest2 {
    @Test
    public void test01() throws IOException {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserMapper userMapper = context.getBean("userMapper2", UserMapper.class);
        for (User user : userMapper.selectUser()) {
            System.out.println(user);
        }
    }
}

以上就是Spring-Mybatis整合方式,有问题可以留言评论~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值