【学习笔记】Spring整合Mybatis

Spring整合Mybatis

回顾Mybatis

  1. 首先需要导入mybatis和mysql的依赖

  2. 需要一个配置文件,mybatis-config.xml

    在这个配置文件中,需要配置连接数据库的环境

  3. 通过SqlSessionFactory创建SqlSession,之前我们是把这些代码提取为一个工具类

    public class SqlSessionUtils {
        private static SqlSessionFactory sqlSessionFactory;
        static{
            try {
                String resource = "mybatis-config.xml";
                InputStream is = Resources.getResourceAsStream(resource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        public static SqlSession getSqlSession(){
            return sqlSessionFactory.openSession();
        }
    }

    通过调用getSqlSession方法,获得SqlSession

  4. 开始进行业务的编写

    • 需要实体类

    • 持久层的接口和配置文件

      在配置文件中用namespace绑定持久层接口,然后就可以在里面用标签写sql语句

    • 在mybatis配置文件中,需要注册接口所对应的xml配置文件

  5. 测试

    • 调用SqlSessionFactory工具类中的方法,获得sqlSession

    • sqlSession.getMapper() ,方法里面就是你写的持久层接口,返回值是mapper

    • 用返回的mapper去调用接口里面的方法即可

    • 不要忘记关闭sqlSession,节省资源

详见:【学习笔记】Mybatis的使用 - GrowthRoad - 博客园 (cnblogs.com)

 

整合Mybatis方式一

在整合之前,需要导入如下依赖

除了mybatis导入的 mysql和 mabatis 和spring导入的spring-mvc、aop 还有以下依赖spring-jdbc、mybatis-spring

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.2</version>
</dependency>
​
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.1.9.RELEASE</version>
</dependency>

 

  1. 在spring配置文件中准备DataSource数据源,也就是连接数据库的,之前都是在mybatis的配置文件中进行环境的设置,现在我们用Spring提供的JDBC 来替换掉mybatis的配置

    和注册bean一样,只是class用的是spring提供的 org.springframework.jdbc.datasource.DriverManagerDataSource

    在这个bean中,可以对连接数据库的属性进行配置,就是Driver、url、username、password

    <!--  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://localhost:3306/jdbcstudy?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false"/>
            <property name="username" value="root"/>
            <property name="password" value="123456"/>
        </bean>

    这一步配置完毕后,在mybatis-config配置文件中

    image-20230217180905517

    这些可以被替换掉了

  2. 之前在工具类中需要用SqlSessionFactory来创建SqlSession,现在也是通过注册bean的方式来注册一个SqlSessionFactory,class是spring提供的SqlSessionFactoryBean,它的属性需要上面创建的数据源

    <!--    SqlSessionFactory-->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    在这个bean中,还可以绑定mybatis的配置文件,也可以直接在这里面完成mybatis配置文件中可以进行的配置。比如设置环境、别名、设置等

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

    image-20230217183326755

    绑定mybatis配置后,这两个配置文件就连接起来了,在哪个配置文件中配置都可以

  3. 有了SqlSessionFactory,之前我们是用SqlSessionFactory去获取SqlSession,但现在我们使用SqlSessionTemplate,它就是相当于sqlSession。创建方法还是通过注册bean的方式,class是spring提供的SqlSessionTemplate。这个bean需要注入一个属性SqlSessionFactory,就是上面我们创建的,但只能通过构造器注入,因为它没有set方法

    <!--    SqlSessionTemplate-->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>
  4. 之前是只有一个接口和接口的xml 就可以了,现在我们需要一个实现类,这个实现类需要实现上面的接口。在这个类中使用SqlSessionTemplate,是用组合的方式,还要有一个set方法,用来注入SqlSessionTemplate。

    然后在重写的方法中,进行getMapper,获得mapper以后,就可以执行接口中的方法了。

    package com.wang.mapper;
    ​
    import com.wang.pojo.User;
    import org.mybatis.spring.SqlSessionTemplate;
    ​
    import java.util.List;
    ​
    public class UserMapperImpl implements UserMapper{
        
        //获得sqlSession,也就是SqlSessionTemplate
        private SqlSessionTemplate sqlSession;
    ​
        public void setSqlSession(SqlSessionTemplate sqlSession) {
            this.sqlSession = sqlSession;
        }
    ​
        @Override
        public List<User> selectUser() {
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            return  mapper.selectUser();
        }
    }

    不要忘了把这个类注册到spring配置文件中。通过注册bean的方式,他需要的参数是sqlSessionTemplate,正是我们上面注册的那个。

  5. 测试,直接去调用UserMapper实现类中的方法即可。

    @Test
    public void test01(){
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-dao.xml");
        UserMapper userMapper = context.getBean("userMapper", UserMapper.class);
        List<User> users = userMapper.selectUser();
        for (User user : users) {
            System.out.println(user);
        }
    }

     

整合Mybatis方式二

在方式一中,创建流程大概是:数据源dataSource--->SqlSessionFactory---> SqlSessionTemplate-->

通过set方法注入SqlSessionTemplate

方式二可以省略注册SqlSessionFactory的bean的步骤,直接向实现类bean注入SqlSessionFactory,前提是实现类需要继承SqlSessionDaoSupport类,然后调用getSqlSession方法就可以获得sqlSession了

新建一个实现类UserMapperImpl2

package com.wang.mapper;
​
import com.wang.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();
    }
}

在xml配置文件中,注册这个bean,里面的属性是SqlSessionFactory

<bean id="userMapper2" class="com.wang.mapper.UserMapperImpl2">
    <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
posted @ 2023-02-18 11:21  GrowthRoad  阅读(40)  评论(0编辑  收藏  举报