使用Mybatis-Spring整合Mybatis和Spring


前言

以下内容源于对狂神的Spring5视频P24的总结,参考链接:【狂神说Java】Spring5最新完整教程IDEA版通俗易懂

1.使用Mybatis的module结构

在这里插入图片描述
具体文件内容可以参考链接:基于Mybatis的jdbc使用


2.使用Spring的module结构

在这里插入图片描述
具体文件内容可以参考链接:Spring5框架IOC中Bean管理对象的创建的方式


一、Mybatis-Spring整合Mybatis和Spring

Mybatis-Spring中文文档地址:Mybatis-Spring中文文档


1.Mybatis-Spring的module结构

在这里插入图片描述


2.注入依赖

在maven的配置文件pom.xml中注入mysql、mybatis、spring-webmvc、spring-jdbc、aspectjweaver‘、mybatis-spring的依赖
代码如下:

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.8</version>
        </dependency>

        <!--Spring操作数据库的话,还需要一个spring-jdbc-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.3.8</version>
        </dependency>

        <!--代码织入需导入的包-->
        <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.7</version>
            <scope>runtime</scope>
        </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>

3.填写Mybatis-Spring的配置文件

(1)使用Bean管理对象的创建

这里使用Spring的Bean管理对象创建,来管理dataSource、sqlSessionFactory、sqlSession对象的创建,在mybatis-spring.xml文件中,注册上述bean,这里的mybatis-spring.xml代替了Spring中的applicationContext.xml文件。
在这里插入图片描述
代码如下:

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
        <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="mybatis-config.xml"></property>
        <property name="mapperLocations" value="classpath*:com.scut.mapper/UserMapper.xml" />
    </bean>
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>
    </bean>

从代码中可以看到,sqlSession是SqlSessionTemplate类,它等同于sqlSession类,包含了sqlSessionFactory类作为它的属性,那它就可以在它的内部代码中直接用sqlSessionFactory来生成sqlSession对象,这部分原本在Mybatis中是使用工具类类实现的,代码如下:

//sqlSessionFactory --> sqlSession
public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;

    static{
        try {
            //使用Mybatis第一步:获取sqlSessionFactory对象
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    //既然有了 SqlSessionFactory,顾名思义,我们就可以从中获得 SqlSession 的实例了。
    // SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

sqlSessionFactory类中包含了dataSource类、configLocation类、mapperLocations类作为它的属性。configLocation类其实用于加载mybatis-config.xml文件,使得它能像Mybatis一样加载它的配置文件。mapperLocations类其实用于加载UserMapper.xml文件,使得它能像Mybatis的mybatis-config.xml文件一样注册Mapper,而无需再在mybatis-config.xml文件中写如下代码:

    <!--  每一个Mapper.XML都需要在Mybatis核心配置文件中注册  -->
    <mappers>
        <mapper resource="com/scut/mapper/UserMapper.xml"/>
        <!--<mapper class="com.scut.mapper.UserMapper"/>-->
        <!--<package name="com.scut.mapper"/>-->
    </mappers>

当然,在mybatis-config.xml文件依旧可以配置其他属性。

dataSource类包含了jdbc.properties里面的配置信息,它等同于Mybatis的配置文件mybatis-config.xml中,<environments>标签中包含的代码,代码如下:

    <!-- 环境选择 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

(2)创建UserDao、pojo和Mapper.xml

UserMapper就是UserDao接口,在UserMapper.xml中编写SQL语句。

到这里,只要用Spring获取IOC容器里面的Bean就可以得到UserMapper接口的代理类实例mapper,mapper就可以实现接口中的增删改查方法,实现如下:

    @Test
    public void test1(){
        ApplicationContext context = new ClassPathXmlApplicationContext("mybatis-spring.xml");
        SqlSession sqlSession = context.getBean("sqlSession", SqlSessionTemplate.class);
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = mapper.getUserList();
        userList.forEach(System.out::println);
    }

结果如下:

User{id=1, name='admin', pwd='1234567'}
User{id=2, name='赵四', pwd='1sdf5'}

Process finished with exit code 0

虽然能实现,但MVC三层结构里,Service层是不能直接获得sqlSession对象的,只能在Dao层进行获取,所以我们可以创建一个UserMapperImp类来装载sqlSession对象,这样实现jdbc的方法依然保留在Dao层,顺应Spring的IOC思想,可以把UserMapperImp类里面的属性sqlSession类的创建也交由Spring的Bean管理,只要在配置文件mybatis-spring.xml中添加如下代码即可:

    <bean id="userMapperImp" class="com.scut.mapper.UserMapperImp">
        <property name="sqlSession" ref="sqlSession"></property>
    </bean>

UserMapperImp类的创建如下:

public class UserMapperImp implements UserMapper{
    private SqlSessionTemplate sqlSession;

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

    @Override
    public List<User> getUserList() {
        return sqlSession.getMapper(UserMapper.class).getUserList();
    }

    @Override
    public User getUserById(int id) {
        return null;
    }

    @Override
    public int addUser(User user) {
        return 0;
    }

    @Override
    public int updateUser(User user) {
        return 0;
    }

    @Override
    public int deleteUser(int id) {
        return 0;
    }
}

就可以在测试代码中测试UserMapperImp类的方法:

public class UserMapperTest {
    @Test
    public void test(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserMapper mapper = context.getBean("userMapperImp", UserMapper.class);
        List<User> userList = mapper.getUserList();
        userList.forEach(System.out::println);
    }
}

结果如下:

User{id=1, name='admin', pwd='1234567'}
User{id=2, name='赵四', pwd='1sdf5'}

Process finished with exit code 0

总结

Mybatis中配置文件mybatis-config里面,jdbc的配置信息和Mapper.xml的注册语句都放到了Mybatis-Spring的配置文件mybatis-spring.xml中,再使用Spring的Bean管理,实现UserMapperImp对象的创建,同时也实现了其内部属性中的类,其内部属性中的类中的属性中的类等的对象创建,把这部分原本放在applicationContext.xml的Spring配置文件中的Bean管理的代码放到了Mybatis-Spring的配置文件mybatis-spring.xml中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值