Spring整合Mybatis

spring整合Mybatis需要导入多个jar,我就不一一说了,直接赋值pom.xml依赖就行了

 <dependencies>

        <!--导这个最大的包-->
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.16</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.9</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.7</version>
        </dependency>


        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
        </dependency>

        <!--导入这个包的依赖-->
        <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.8</version>
        </dependency>

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


        <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.3.16</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.8</version>
        </dependency>

    </dependencies>

版本关联

 

准备工作完成之后,我们就可以开始整合了。


第一步:新建applicationContext.xml的(Spring配置文件)

  <!--使用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"/>
            <property name="username" value="root"/>
            <property name="password" value="88888888"/>
    </bean>

tips:填写你们自己对应的用户名和密码,如果查询的结果是乱码,在jdbc:mysql://localhost:3306/mybatis?characterEncoding=UTF-8。注意xml配置文件中

&被转义了,&amp; (分号也不能省略)才是普通的&,&表示和的意思。


第二步:新建Mybatis核心配置文件,在Spring中获取SqlSessionFactory对象,并且绑定mybatis核心配置文件,并将dataSource赋值给SqlSessionFactoryBean对象的dataSource属性。


    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!--绑定mybatis核心配置文件-->
            <property name="dataSource" ref="dataSource"/>
            <!--mybatis全局配置文件的地址-->
            <property name="configLocation" value="classpath:mybatis.xml"/>
    </bean>

第三步:给SqlSessionTemplate属性赋值,他就是SqlSession

<!--获取SqlSession-->
    <!--sqlSessionTemplate就是sqlSession-->
    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>

 这里为什么要用下标0 ?

因为SqlSessionTemplate类的第一个属性就是SqlSessionFactory对象,所有可以使用index=0


第四步:测试

 

 或者,还有另外一种思想,当你拿到SqlSesesionTemplate类之后,新建一个UserMapperImple的类去实现UserMapper,并且注册到Spring中,这个类中内置一个SqlSessionTemplate属性,提供一个set方法,在Spring中通过set注入,将SqlSessionTemplate类注入给这个UserMapperImple类,然后通过此类去实现UserMapper中的所有方法,并且返回结果,我们只需要在测试类中调用即可,将此实现类看成是Service层的实现类。


使用实现类充当Service层的思想去做

第四步:新建UserMapperImple类,实现UserMapper接口

package com.guanzhu.mapper;

import com.guanzhu.POJO.User;
import org.junit.Test;
import org.mybatis.spring.SqlSessionTemplate;

import java.util.ArrayList;
import java.util.List;


public class UserMapperImple implements UserMapper {

    /*在mybatis中,我们的增删改查都是用的sqlSession,现在整合了,我们使用SqlSessionTemplate对象
    * SqlSessionTemplate就是SqlSession,只是换了一个名字而已,仅此而已*/
    private SqlSessionTemplate sqlSessionTemplate;

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

    public List<User> getUsers() {
        UserMapper mapper = sqlSessionTemplate.getMapper(UserMapper.class);
        for (User user : mapper.getUsers()) {
            System.out.println(user);
        }
        return new ArrayList<User>();
    }

    public int addUser(User user) {
        UserMapper mapper = sqlSessionTemplate.getMapper(UserMapper.class);
        int i = mapper.addUser(user);
        if(i>0){
            //大于0则提交事务
            sqlSessionTemplate.commit();
            return i;
        }else{
            //不满足条件则回滚事务
            sqlSessionTemplate.rollback();
            return i;
        }


    }
}

第五步:在Spring中注册

  <!--获取SqlSession-->
    <!--sqlSessionTemplate就是sqlSession-->
    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>

    <bean id="userMapperImple" class="com.guanzhu.mapper.UserMapperImple">
            <!--他相当于就是sqlSession的实现类,以后一切业务都在这里进行-->
        <property name="sqlSessionTemplate" ref="sqlSessionTemplate"></property>
    </bean>

    

第六步:测试


    @Test
    public void test04(){ 
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserMapperImple umi = ac.getBean("userMapperImple", UserMapperImple.class);
        System.out.println("另外一种思想!");

        List<User> users = umi.getUsers();
        for (User user : users) {
            System.out.println(user);
        }

    }

直接通过getBean ,通过id获取实现类就行了。通过调用实现类中已经写好的方法,来完成我们的需求,这样写,分工更加明确,当然,你要是不想多写一个实现类,第一种方式也是可以的。


最后,如果你遇到了

org.apache.ibatis.binding.BindingException: Type interface com.guanzhu.mapper.UserMapper is not known to the MapperRegistry.

问题原因,Spring核心配置文件中没有配置绑定Mybatis的核心配置文件,

 如果少了下面这行代码,mapper.xml文件就不会被注册,加上即可解决。

            <property name="configLocation" value="classpath:mybatis.xml"/>

今天你进步了吗?

        人生没有白走的路,每走一步都算数。                

                                                                                                2022.3.13     星期天     中午     晴

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值